From 1ed8e7bb20783246e88ebcf31205a26fc9712403 Mon Sep 17 00:00:00 2001 From: RemixDev Date: Tue, 14 Apr 2020 12:58:31 +0200 Subject: [PATCH] Fixed downloading related issues - Fixed album cover download and saving - Fixed download list initialization on reload - Adjusted download object layout --- deemix/app/downloader.py | 33 ++++++++++++++++++++++++--------- deemix/app/queuemanager.py | 2 +- 2 files changed, 25 insertions(+), 10 deletions(-) diff --git a/deemix/app/downloader.py b/deemix/app/downloader.py index 54c5722..6cb9f64 100644 --- a/deemix/app/downloader.py +++ b/deemix/app/downloader.py @@ -14,7 +14,7 @@ from Cryptodome.Cipher import Blowfish from time import sleep import re -TEMPDIR = os.path.join(gettempdir(), 'deezloader-imgs') +TEMPDIR = os.path.join(gettempdir(), 'deemix-imgs') if not os.path.isdir(TEMPDIR): makedirs(TEMPDIR) @@ -61,20 +61,22 @@ def stream_track(dz, track, stream, trackAPI, queueItem, socket=None): if round(downloadPercentage) != lastPercentage and round(percentage) % 5 == 0: lastPercentage = round(downloadPercentage) if socket: + queueItem['progress'] = lastPercentage socket.emit("updateQueue", {'uuid': queueItem['uuid'], 'progress': lastPercentage}) i += 1 def downloadImage(url, path): if not os.path.isfile(path): - with open(path, 'wb') as f: - try: - f.write(get(url, headers={'User-Agent': USER_AGENT_HEADER}, timeout=30).content) + try: + image = get(url, headers={'User-Agent': USER_AGENT_HEADER}, timeout=30) + with open(path, 'wb') as f: + f.write(image.content) return path - except ConnectionError: - sleep(2) - return downloadImage(url, path) - except HTTPError: - print("Couldn't download Image") + except ConnectionError: + sleep(1) + return downloadImage(url, path) + except HTTPError: + print("Couldn't download Image") remove(path) return None else: @@ -413,6 +415,7 @@ def downloadTrackObj(dz, trackAPI, settings, bitrate, queueItem, extraTrack=None 'data': track } if socket: + queueItem['failed'] += 1 socket.emit("updateQueue", {'uuid': queueItem['uuid'], 'failed': True, 'data': track, 'error': "Track not yet encoded and no alternative found!"}) return result else: @@ -422,6 +425,7 @@ def downloadTrackObj(dz, trackAPI, settings, bitrate, queueItem, extraTrack=None 'data': track } if socket: + queueItem['failed'] += 1 socket.emit("updateQueue", {'uuid': queueItem['uuid'], 'failed': True, 'data': track, 'error': "Track not yet encoded!"}) return result @@ -434,6 +438,7 @@ def downloadTrackObj(dz, trackAPI, settings, bitrate, queueItem, extraTrack=None 'data': track } if socket: + queueItem['failed'] += 1 socket.emit("updateQueue", {'uuid': queueItem['uuid'], 'failed': True, 'data': track, 'error': "Track not found at desired bitrate."}) return result elif format == -200: @@ -443,6 +448,7 @@ def downloadTrackObj(dz, trackAPI, settings, bitrate, queueItem, extraTrack=None 'data': track } if socket: + queueItem['failed'] += 1 socket.emit("updateQueue", {'uuid': queueItem['uuid'], 'failed': True, 'data': track, 'error': "Track is not available in Reality Audio 360."}) return result track['selectedFormat'] = format @@ -561,6 +567,7 @@ def downloadTrackObj(dz, trackAPI, settings, bitrate, queueItem, extraTrack=None 'data': track } if socket: + queueItem['failed'] += 1 socket.emit("updateQueue", {'uuid': queueItem['uuid'], 'failed': True, 'data': track, 'error': "Track not available on deezer's servers and no alternative found!"}) return result else: @@ -570,6 +577,7 @@ def downloadTrackObj(dz, trackAPI, settings, bitrate, queueItem, extraTrack=None 'data': track } if socket: + queueItem['failed'] += 1 socket.emit("updateQueue", {'uuid': queueItem['uuid'], 'failed': True, 'data': track, 'error': "Track not available on deezer's servers!"}) return result if track['selectedFormat'] in [3, 1, 8]: @@ -580,6 +588,7 @@ def downloadTrackObj(dz, trackAPI, settings, bitrate, queueItem, extraTrack=None result['searched'] = f'{track["mainArtist"]["name"]} - {track["title"]}' print("Done!") if socket: + queueItem['downloaded'] += 1 socket.emit("updateQueue", {'uuid': queueItem['uuid'], 'downloaded': True}) return result @@ -596,6 +605,9 @@ def downloadTrackObj_wrap(dz, track, settings, bitrate, queueItem, socket): } } } + if socket: + queueItem['failed'] += 1 + socket.emit("updateQueue", {'uuid': queueItem['uuid'], 'failed': True}) return result def download(dz, queueItem, socket=None): @@ -617,6 +629,9 @@ def download(dz, queueItem, socket=None): } } } + if socket: + queueItem['failed'] += 1 + socket.emit("updateQueue", {'uuid': queueItem['uuid'], 'failed': True}) download_path = after_download_single(result, settings, queueItem) elif 'collection' in queueItem: print("Downloading collection") diff --git a/deemix/app/queuemanager.py b/deemix/app/queuemanager.py index dd606d7..6cd656c 100644 --- a/deemix/app/queuemanager.py +++ b/deemix/app/queuemanager.py @@ -206,7 +206,7 @@ def callbackQueueDone(result): nextItem(result['dz'], result['socket']) def getQueue(): - return (queue, queueList) + return (queue, queueList, currentItem) def removeFromQueue(uuid, socket=None): if uuid == currentItem: