Even more rework on the library

This commit is contained in:
RemixDev
2021-03-24 17:41:03 +01:00
parent dc6adc7887
commit eda8fd3d13
7 changed files with 95 additions and 129 deletions

View File

@ -1,33 +1,18 @@
class IDownloadObject:
def __init__(self, type=None, id=None, bitrate=None, title=None, artist=None, cover=None, explicit=False, size=None, dictItem=None):
if dictItem:
self.type = dictItem['type']
self.id = dictItem['id']
self.bitrate = dictItem['bitrate']
self.title = dictItem['title']
self.artist = dictItem['artist']
self.cover = dictItem['cover']
self.explicit = dictItem.get('explicit', False)
self.size = dictItem['size']
self.downloaded = dictItem['downloaded']
self.failed = dictItem['failed']
self.progress = dictItem['progress']
self.errors = dictItem['errors']
self.files = dictItem['files']
else:
self.type = type
self.id = id
self.bitrate = bitrate
self.title = title
self.artist = artist
self.cover = cover
self.explicit = explicit
self.size = size
self.downloaded = 0
self.failed = 0
self.progress = 0
self.errors = []
self.files = []
def __init__(self, obj):
self.type = obj['type']
self.id = obj['id']
self.bitrate = obj['bitrate']
self.title = obj['title']
self.artist = obj['artist']
self.cover = obj['cover']
self.explicit = obj.get('explicit', False)
self.size = obj['size']
self.downloaded = obj.get('downloaded', 0)
self.failed = obj.get('failed', 0)
self.progress = obj.get('progress', 0)
self.errors = obj.get('errors', [])
self.files = obj.get('files', [])
self.progressNext = 0
self.uuid = f"{self.type}_{self.id}_{self.bitrate}"
self.ack = None
@ -76,17 +61,10 @@ class IDownloadObject:
if interface: interface.send("updateQueue", {'uuid': self.uuid, 'progress': self.progress})
class Single(IDownloadObject):
def __init__(self, type=None, id=None, bitrate=None, title=None, artist=None, cover=None, explicit=False, trackAPI_gw=None, trackAPI=None, albumAPI=None, dictItem=None):
if dictItem:
super().__init__(dictItem=dictItem)
self.single = dictItem['single']
else:
super().__init__(type, id, bitrate, title, artist, cover, explicit, 1)
self.single = {
'trackAPI_gw': trackAPI_gw,
'trackAPI': trackAPI,
'albumAPI': albumAPI
}
def __init__(self, obj):
super().__init__(obj)
self.size = 1
self.single = obj['single']
self.__type__ = "Single"
def toDict(self):
@ -103,17 +81,9 @@ class Single(IDownloadObject):
self.updateProgress(interface)
class Collection(IDownloadObject):
def __init__(self, type=None, id=None, bitrate=None, title=None, artist=None, cover=None, explicit=False, size=None, tracks_gw=None, albumAPI=None, playlistAPI=None, dictItem=None):
if dictItem:
super().__init__(dictItem=dictItem)
self.collection = dictItem['collection']
else:
super().__init__(type, id, bitrate, title, artist, cover, explicit, size)
self.collection = {
'tracks_gw': tracks_gw,
'albumAPI': albumAPI,
'playlistAPI': playlistAPI
}
def __init__(self, obj):
super().__init__(obj)
self.collection = obj['collection']
self.__type__ = "Collection"
def toDict(self):
@ -130,15 +100,10 @@ class Collection(IDownloadObject):
self.updateProgress(interface)
class Convertable(Collection):
def __init__(self, type=None, id=None, bitrate=None, title=None, artist=None, cover=None, explicit=False, size=None, plugin=None, conversion_data=None, dictItem=None):
if dictItem:
super().__init__(dictItem=dictItem)
self.plugin = dictItem['plugin']
self.conversion_data = dictItem['conversion_data']
else:
super().__init__(type, id, bitrate, title, artist, cover, explicit, size)
self.plugin = plugin
self.conversion_data = conversion_data
def __init__(self, obj):
super().__init__(obj)
self.plugin = obj['plugin']
self.conversion_data = obj['conversion_data']
self.__type__ = "Convertable"
def toDict(self):

View File

@ -14,10 +14,9 @@ class Picture:
)
if format.startswith("jpg"):
quality = 80
if '-' in format:
quality = format[4:]
else:
quality = 80
format = 'jpg'
return url + f'-000000-{quality}-0-0.jpg'
if format == 'png':

View File

@ -1,12 +1,9 @@
from time import sleep
import requests
import logging
logging.basicConfig(level=logging.INFO)
logger = logging.getLogger('deemix')
from time import sleep
from deezer.gw import GWAPIError
from deezer.api import APIError
from deemix.utils import removeFeatures, andCommaConcat, removeDuplicateArtists, generateReplayGainString, changeCase
from deemix.types.Album import Album
@ -24,7 +21,7 @@ class Track:
self.MD5 = ""
self.mediaVersion = ""
self.duration = 0
self.fallbackId = "0"
self.fallbackID = "0"
self.filesizes = {}
self.localTrack = False
self.mainArtist = None
@ -46,7 +43,7 @@ class Track:
self.searched = False
self.selectedFormat = 0
self.singleDownload = False
self.dateString = None
self.dateString = ""
self.artistsString = ""
self.mainArtistsString = ""
self.featArtistsString = ""
@ -61,14 +58,14 @@ class Track:
else:
raise MD5NotFound
self.mediaVersion = trackAPI_gw['MEDIA_VERSION']
self.fallbackId = "0"
self.fallbackID = "0"
if 'FALLBACK' in trackAPI_gw:
self.fallbackId = trackAPI_gw['FALLBACK']['SNG_ID']
self.fallbackID = trackAPI_gw['FALLBACK']['SNG_ID']
self.localTrack = int(self.id) < 0
def retriveFilesizes(self, dz):
guest_sid = dz.session.cookies.get('sid')
try:
guest_sid = dz.session.cookies.get('sid')
site = requests.post(
"https://api.deezer.com/1.0/gateway.php",
params={
@ -97,8 +94,7 @@ class Track:
self.filesizes = filesizes
def parseData(self, dz, id=None, trackAPI_gw=None, trackAPI=None, albumAPI_gw=None, albumAPI=None, playlistAPI=None):
if id:
if not trackAPI_gw: trackAPI_gw = dz.gw.get_track_with_fallback(id)
if id and not trackAPI_gw: trackAPI_gw = dz.gw.get_track_with_fallback(id)
elif not trackAPI_gw: raise NoDataToParse
if not trackAPI:
try: trackAPI = dz.api.get_track(trackAPI_gw['SNG_ID'])
@ -110,15 +106,15 @@ class Track:
self.parseLocalTrackData(trackAPI_gw)
else:
self.retriveFilesizes(dz)
self.parseTrackGW(trackAPI_gw)
# Get Lyrics data
if not "LYRICS" in trackAPI_gw and self.lyrics.id != "0":
try: trackAPI_gw["LYRICS"] = dz.gw.get_track_lyrics(self.id)
except GWAPIError: self.lyrics.id = "0"
if self.lyrics.id != "0": self.lyrics.parseLyrics(trackAPI_gw["LYRICS"])
# Parse Album data
# Parse Album Data
self.album = Album(
id = trackAPI_gw['ALB_ID'],
title = trackAPI_gw['ALB_TITLE'],
@ -161,7 +157,7 @@ class Track:
if not len(self.artist['Main']):
self.artist['Main'] = [self.mainArtist['name']]
self.singleDownload = trackAPI_gw.get('SINGLE_TRACK', False)
self.singleDownload = trackAPI_gw.get('SINGLE_TRACK', False) # TODO: To change
self.position = trackAPI_gw.get('POSITION')
# Add playlist data if track is in a playlist
@ -184,16 +180,16 @@ class Track:
self.artist = {
'Main': [trackAPI_gw['ART_NAME']]
}
self.date = Date()
self.album.artist = self.artist
self.album.artists = self.artists
self.album.date = self.date
self.album.mainArtist = self.mainArtist
self.date = Date()
def parseTrackGW(self, trackAPI_gw):
self.title = trackAPI_gw['SNG_TITLE'].strip()
if trackAPI_gw.get('VERSION') and not trackAPI_gw['VERSION'] in trackAPI_gw['SNG_TITLE']:
self.title += " " + trackAPI_gw['VERSION'].strip()
if trackAPI_gw.get('VERSION') and not trackAPI_gw['VERSION'].strip() in this.title:
self.title += f" {trackAPI_gw['VERSION'].strip()}"
self.discNumber = trackAPI_gw.get('DISK_NUMBER')
self.explicit = bool(int(trackAPI_gw.get('EXPLICIT_LYRICS', "0")))
@ -215,7 +211,7 @@ class Track:
day = trackAPI_gw["PHYSICAL_RELEASE_DATE"][8:10]
month = trackAPI_gw["PHYSICAL_RELEASE_DATE"][5:7]
year = trackAPI_gw["PHYSICAL_RELEASE_DATE"][0:4]
self.date = Date(year, month, day)
self.date = Date(day, month, year)
def parseTrack(self, trackAPI):
self.bpm = trackAPI['bpm']
@ -250,8 +246,8 @@ class Track:
return removeFeatures(self.title)
def getFeatTitle(self):
if self.featArtistsString and not "(feat." in self.title.lower():
return self.title + " ({})".format(self.featArtistsString)
if self.featArtistsString and not "feat." in self.title.lower():
return f"{self.title} ({self.featArtistsString})"
return self.title
def generateMainFeatStrings(self):