Skip to content

Commit 7fc81f2

Browse files
committed
get localized artistname and genre, then add them to metadata.
1 parent b11ecfa commit 7fc81f2

2 files changed

Lines changed: 41 additions & 5 deletions

File tree

zotify/__init__.py

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@
3030

3131
from zotify.loader import Loader
3232
from zotify.playable import Episode, Track
33-
from zotify.utils import Quality
33+
from zotify.utils import Quality, bytes_to_base62
3434

3535
API_URL = "https://api.sp" + "otify.com/v1/"
3636
AUTH_URL = "https://accounts.sp" + "otify.com/"
@@ -226,6 +226,7 @@ class ApiClient(LibrespotApiClient):
226226
def __init__(self, session: Session):
227227
super(ApiClient, self).__init__(session)
228228
self.__session = session
229+
self.__localized_artist_names = {}
229230

230231
def invoke_url(
231232
self,
@@ -263,6 +264,22 @@ def invoke_url(
263264
except KeyError:
264265
return data
265266

267+
def get_localized_artist_name(self, artist_info) -> str:
268+
gid = bytes_to_base62(artist_info.gid)
269+
name = artist_info.name
270+
271+
if not gid:
272+
return name
273+
if gid in self.__localized_artist_names:
274+
return self.__localized_artist_names[gid]
275+
artist_info = self.invoke_url(f"artists/{gid}")
276+
artist_name = artist_info.get("name")
277+
artist_genres = artist_info.get("genres", [])
278+
if artist_name:
279+
self.__localized_artist_names[gid] = (artist_name, artist_genres)
280+
name = artist_name
281+
return name, artist_genres
282+
266283
def __get_token(self) -> str:
267284
return (
268285
self.__session.tokens()

zotify/playable.py

Lines changed: 23 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -151,12 +151,30 @@ def __default_metadata(self) -> list[MetadataEntry]:
151151
self.track.album = self.__api().get_metadata_4_album(
152152
AlbumId.from_hex(bytes_to_hex(self.album.gid))
153153
)
154+
artist_name, genres_list = self.__api.get_localized_artist_name(self.artist[0])
155+
artists = []
156+
for artist in self.artist:
157+
extra_artist_name, extra_genres = self.__api.get_localized_artist_name(artist)
158+
if extra_artist_name:
159+
artists.append(extra_artist_name)
160+
genres_list.extend(extra_genres)
161+
162+
album_artist_name, extra_genres = self.__api.get_localized_artist_name(self.album.artist[0])
163+
genres_list = list(set(genres_list + extra_genres))
164+
165+
album_artists = []
166+
for artist in self.album.artist:
167+
extra_artist_name, album_extra_genres = self.__api.get_localized_artist_name(artist)
168+
if extra_artist_name:
169+
album_artists.append(extra_artist_name)
170+
genres_list = list(set(genres_list + album_extra_genres))
171+
genres = "; ".join(str(item) for item in set(genres_list))
154172
return [
155173
MetadataEntry("album", self.album.name),
156-
MetadataEntry("album_artist", self.album.artist[0].name),
157-
MetadataEntry("album_artists", [a.name for a in self.album.artist]),
158-
MetadataEntry("artist", self.artist[0].name),
159-
MetadataEntry("artists", [a.name for a in self.artist]),
174+
MetadataEntry("album_artist", album_artist_name),
175+
MetadataEntry("album_artists", album_artists),
176+
MetadataEntry("artist", artist_name),
177+
MetadataEntry("artists", artists),
160178
MetadataEntry("date", f"{date.year}-{date.month}-{date.day}"),
161179
MetadataEntry("disc", self.disc_number),
162180
MetadataEntry("duration", self.duration),
@@ -167,6 +185,7 @@ def __default_metadata(self) -> list[MetadataEntry]:
167185
MetadataEntry("title", self.name),
168186
MetadataEntry("track", self.name),
169187
MetadataEntry("year", date.year),
188+
MetadataEntry("genre", genres),
170189
MetadataEntry(
171190
"replaygain_track_gain", self.normalization_data.track_gain_db, ""
172191
),

0 commit comments

Comments
 (0)