Fixed download cancelling issue and made track formats number clearer

This commit is contained in:
RemixDev 2020-10-02 19:20:23 +02:00
parent 431a558467
commit f2caa297f5
4 changed files with 63 additions and 48 deletions

View File

@ -40,6 +40,17 @@ class LyricsStatus():
PARTIALLY_NO_ADVICE = 7 PARTIALLY_NO_ADVICE = 7
"""Partially No Advice Available (Album "lyrics" only)""" """Partially No Advice Available (Album "lyrics" only)"""
class TrackFormats():
"""Number associtation for formats"""
FLAC = 9
MP3_320 = 3
MP3_128 = 1
MP4_RA3 = 15
MP4_RA2 = 14
MP4_RA1 = 13
DEFAULT = 8
LOCAL = 0
class Deezer: class Deezer:
def __init__(self): def __init__(self):
self.api_url = "http://www.deezer.com/ajax/gw-light.php" self.api_url = "http://www.deezer.com/ajax/gw-light.php"

View File

@ -18,7 +18,7 @@ from deemix.app.queueitem import QISingle, QICollection
from deemix.app.track import Track, AlbumDoesntExsists from deemix.app.track import Track, AlbumDoesntExsists
from deemix.utils import changeCase from deemix.utils import changeCase
from deemix.utils.pathtemplates import generateFilename, generateFilepath, settingsRegexAlbum, settingsRegexArtist, settingsRegexPlaylistFile from deemix.utils.pathtemplates import generateFilename, generateFilepath, settingsRegexAlbum, settingsRegexArtist, settingsRegexPlaylistFile
from deemix.api.deezer import USER_AGENT_HEADER from deemix.api.deezer import USER_AGENT_HEADER, TrackFormats
from deemix.utils.taggers import tagID3, tagFLAC from deemix.utils.taggers import tagID3, tagFLAC
from Cryptodome.Cipher import Blowfish from Cryptodome.Cipher import Blowfish
@ -32,14 +32,14 @@ TEMPDIR = Path(gettempdir()) / 'deemix-imgs'
if not TEMPDIR.is_dir(): makedirs(TEMPDIR) if not TEMPDIR.is_dir(): makedirs(TEMPDIR)
extensions = { extensions = {
9: '.flac', TrackFormats.FLAC: '.flac',
0: '.mp3', TrackFormats.LOCAL: '.mp3',
3: '.mp3', TrackFormats.MP3_320: '.mp3',
1: '.mp3', TrackFormats.MP3_128: '.mp3',
8: '.mp3', TrackFormats.DEFAULT: '.mp3',
15: '.mp4', TrackFormats.MP4_RA3: '.mp4',
14: '.mp4', TrackFormats.MP4_RA2: '.mp4',
13: '.mp4' TrackFormats.MP4_RA1: '.mp4'
} }
errorMessages = { errorMessages = {
@ -115,21 +115,23 @@ class DownloadJob:
self.playlistURLs = [] self.playlistURLs = []
def start(self): def start(self):
if self.queueItem.cancel: if not self.queueItem.cancel:
self.interface.send('currentItemCancelled', self.queueItem.uuid) if isinstance(self.queueItem, QISingle):
self.interface.send("removedFromQueue", self.queueItem.uuid) result = self.downloadWrapper(self.queueItem.single)
return None if result: self.singleAfterDownload(result)
if isinstance(self.queueItem, QISingle): elif isinstance(self.queueItem, QICollection):
result = self.downloadWrapper(self.queueItem.single) tracks = [None] * len(self.queueItem.collection)
if result: self.singleAfterDownload(result) pool = eventlet.GreenPool(size=self.settings['queueConcurrency'])
elif isinstance(self.queueItem, QICollection): for pos, track in enumerate(self.queueItem.collection, start=0):
tracks = [None] * len(self.queueItem.collection) tracks[pos] = pool.spawn(self.downloadWrapper, track)
pool = eventlet.GreenPool(size=self.settings['queueConcurrency']) pool.waitall()
for pos, track in enumerate(self.queueItem.collection, start=0): self.collectionAfterDownload(tracks)
tracks[pos] = pool.spawn(self.downloadWrapper, track) if self.interface:
pool.waitall() if self.queueItem.cancel:
self.collectionAfterDownload(tracks) self.interface.send('currentItemCancelled', self.queueItem.uuid)
if self.interface: self.interface.send("finishDownload", self.queueItem.uuid) self.interface.send("removedFromQueue", self.queueItem.uuid)
else:
self.interface.send("finishDownload", self.queueItem.uuid)
return self.extrasPath return self.extrasPath
def singleAfterDownload(self, result): def singleAfterDownload(self, result):
@ -565,9 +567,9 @@ class DownloadJob:
# Adding tags # Adding tags
if (not trackAlreadyDownloaded or self.settings['overwriteFile'] in ['t', 'y']) and not track.localTrack: if (not trackAlreadyDownloaded or self.settings['overwriteFile'] in ['t', 'y']) and not track.localTrack:
logger.info(f"[{track.mainArtist['name']} - {track.title}] Applying tags to the track") logger.info(f"[{track.mainArtist['name']} - {track.title}] Applying tags to the track")
if track.selectedFormat in [3, 1, 8]: if track.selectedFormat in [TrackFormats.MP3_320, TrackFormats.MP3_128, TrackFormats.DEFAULT]:
tagID3(writepath, track, self.settings['tags']) tagID3(writepath, track, self.settings['tags'])
elif track.selectedFormat == 9: elif track.selectedFormat == TrackFormats.FLAC:
try: try:
tagFLAC(writepath, track, self.settings['tags']) tagFLAC(writepath, track, self.settings['tags'])
except (FLACNoHeaderError, FLACError): except (FLACNoHeaderError, FLACError):
@ -588,20 +590,20 @@ class DownloadJob:
return result return result
def getPreferredBitrate(self, track): def getPreferredBitrate(self, track):
if track.localTrack: return 0 if track.localTrack: return TrackFormats.LOCAL
shouldFallback = self.settings['fallbackBitrate'] shouldFallback = self.settings['fallbackBitrate']
falledBack = False falledBack = False
formats_non_360 = { formats_non_360 = {
9: "FLAC", TrackFormats.FLAC: "FLAC",
3: "MP3_320", TrackFormats.MP3_320: "MP3_320",
1: "MP3_128", TrackFormats.MP3_128: "MP3_128",
} }
formats_360 = { formats_360 = {
15: "MP4_RA3", TrackFormats.MP4_RA3: "MP4_RA3",
14: "MP4_RA2", TrackFormats.MP4_RA2: "MP4_RA2",
13: "MP4_RA1", TrackFormats.MP4_RA1: "MP4_RA1",
} }
is360format = int(self.bitrate) in formats_360 is360format = int(self.bitrate) in formats_360
@ -646,7 +648,7 @@ class DownloadJob:
}, },
}) })
if is360format: raise TrackNot360 if is360format: raise TrackNot360
return 8 return TrackFormats.DEFAULT
def streamTrack(self, stream, track, start=0): def streamTrack(self, stream, track, start=0):
if self.queueItem.cancel: raise DownloadCancelled if self.queueItem.cancel: raise DownloadCancelled

View File

@ -1,5 +1,6 @@
import re import re
import string import string
from deemix.api.deezer import TrackFormats
def generateReplayGainString(trackGain): def generateReplayGainString(trackGain):
return "{0:.2f} dB".format((float(trackGain) + 18.4) * -1) return "{0:.2f} dB".format((float(trackGain) + 18.4) * -1)
@ -7,17 +8,17 @@ def generateReplayGainString(trackGain):
def getBitrateInt(txt): def getBitrateInt(txt):
txt = str(txt).lower() txt = str(txt).lower()
if txt in ['flac', 'lossless', '9']: if txt in ['flac', 'lossless', '9']:
return 9 return TrackFormats.FLAC
elif txt in ['mp3', '320', '3']: elif txt in ['mp3', '320', '3']:
return 3 return TrackFormats.MP3_320
elif txt in ['128', '1']: elif txt in ['128', '1']:
return 1 return TrackFormats.MP3_128
elif txt in ['360', '360_hq', '15']: elif txt in ['360', '360_hq', '15']:
return 15 return TrackFormats.MP4_RA3
elif txt in ['360_mq', '14']: elif txt in ['360_mq', '14']:
return 14 return TrackFormats.MP4_RA2
elif txt in ['360_lq', '13']: elif txt in ['360_lq', '13']:
return 13 return TrackFormats.MP4_RA1
else: else:
return None return None

View File

@ -2,16 +2,17 @@ import re
from os.path import sep as pathSep from os.path import sep as pathSep
from pathlib import Path from pathlib import Path
from unicodedata import normalize from unicodedata import normalize
from deemix.api.deezer import TrackFormats
bitrateLabels = { bitrateLabels = {
15: "360 HQ", TrackFormats.MP4_RA3: "360 HQ",
14: "360 MQ", TrackFormats.MP4_RA2: "360 MQ",
13: "360 LQ", TrackFormats.MP4_RA1: "360 LQ",
9: "FLAC", TrackFormats.FLAC : "FLAC",
3: "320", TrackFormats.MP3_320: "320",
1: "128", TrackFormats.MP3_128: "128",
8: "128", TrackFormats.DEFAULT: "128",
0: "MP3" TrackFormats.LOCAL : "MP3"
} }
def fixName(txt, char='_'): def fixName(txt, char='_'):