123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475 |
- import demixed.utils
- from generic.album import Album
- import demixed.track
- import demixed.artist
- class DeezerAlbum(Album):
- def set_raw_data(self, raw_data):
- is_page = "ALB_ID" not in raw_data
- album_data = raw_data["DATA"] if is_page else raw_data
- songs_data = raw_data["SONGS"]["data"] if is_page else album_data["SONGS"]["data"]
- return self.set_values(
- album_id = album_data["ALB_ID"],
- title = album_data["ALB_TITLE"],
- date = album_data["PHYSICAL_RELEASE_DATE"],
- picture_url = demixed.utils.ALBUM_PICTURES_URL % album_data["ALB_PICTURE"],
- picture_thumbnail_url = demixed.utils.ALBUM_PICTURES_URL_THUMBNAIL % album_data["ALB_PICTURE"],
- artists = list(map(
- lambda a: demixed.artist.DeezerArtist.grab_or_create(
- a["ART_ID"],
- artist_id = a["ART_ID"],
- name = a["ART_NAME"],
- picture_url = demixed.utils.ARTIST_PICTURES_URL % a["ART_PICTURE"]
- ),
- album_data["ARTISTS"]
- )),
- songs = list(map(
- lambda s: demixed.track.DeezerTrack.grab_or_create(
- s["SNG_ID"],
- raw_data = s
- ),
- songs_data
- )),
- is_full = True
- )
- def set_values(
- self,
- album_id = None,
- title = None,
- date = None,
- picture_url = None,
- picture_thumbnail_url = None,
- artists = None,
- songs = None,
- is_full = False, # if the album is fully loaded
- raw_data = None
- ):
- if raw_data != None:
- self.set_raw_data(raw_data)
- return
- self.album_id = album_id
- self.title = title
- self.date = date
- self.picture_url = picture_url
- self.picture_thumbnail_url = picture_thumbnail_url
- self.artists = artists
- self.songs = songs
- if self.songs != None:
- for song in self.songs:
- song.album = self
- self.is_full = is_full
- def get_full_data(self, deezer_instance):
- if not self.is_full:
- raw_data = deezer_instance.get_album_data(self.album_id)
- self.set_raw_data(raw_data)
- if self.artists != None:
- for artist in self.artists:
- if not artist.is_full:
- artist.get_full_data(deezer_instance)
- if self.songs != None:
- for song in self.songs:
- if not song.is_full:
- song.get_full_data(deezer_instance)
|