Added playlist cover download, even when not saved as compilation
Added %explicit% to playlist folder template This fixes #41
This commit is contained in:
parent
f47f4b4979
commit
e478e5b031
|
@ -593,38 +593,42 @@ def downloadTrackObj(dz, trackAPI, settings, bitrate, queueItem, extraTrack=None
|
|||
'error': "Track is not available in Reality Audio 360."})
|
||||
return result
|
||||
track['selectedFormat'] = format
|
||||
if settings['tags']['savePlaylistAsCompilation'] and "_EXTRA_PLAYLIST" in trackAPI:
|
||||
if "_EXTRA_PLAYLIST" in trackAPI:
|
||||
track['playlist'] = {}
|
||||
if 'dzcdn.net' in trackAPI["_EXTRA_PLAYLIST"]['picture_small']:
|
||||
track['album']['picUrl'] = trackAPI["_EXTRA_PLAYLIST"]['picture_small'][:-24] + "/{}x{}-{}".format(
|
||||
track['playlist']['picUrl'] = trackAPI["_EXTRA_PLAYLIST"]['picture_small'][:-24] + "/{}x{}-{}".format(
|
||||
settings['embeddedArtworkSize'], settings['embeddedArtworkSize'],
|
||||
'none-100-0-0.png' if settings['PNGcovers'] else f'000000-{settings["jpegImageQuality"]}-0-0.jpg')
|
||||
else:
|
||||
track['album']['picUrl'] = trackAPI["_EXTRA_PLAYLIST"]['picture_xl']
|
||||
track['album']['title'] = trackAPI["_EXTRA_PLAYLIST"]['title']
|
||||
track['album']['mainArtist'] = {
|
||||
track['playlist']['picUrl'] = trackAPI["_EXTRA_PLAYLIST"]['picture_xl']
|
||||
track['playlist']['title'] = trackAPI["_EXTRA_PLAYLIST"]['title']
|
||||
track['playlist']['mainArtist'] = {
|
||||
'id': trackAPI["_EXTRA_PLAYLIST"]['various_artist']['id'],
|
||||
'name': trackAPI["_EXTRA_PLAYLIST"]['various_artist']['name'],
|
||||
'pic': trackAPI["_EXTRA_PLAYLIST"]['various_artist']['picture_small'][
|
||||
trackAPI["_EXTRA_PLAYLIST"]['various_artist']['picture_small'].find('artist/') + 7:-24]
|
||||
}
|
||||
if settings['albumVariousArtists']:
|
||||
track['album']['artist'] = {"Main": [trackAPI["_EXTRA_PLAYLIST"]['various_artist']['name'], ]}
|
||||
track['album']['artists'] = [trackAPI["_EXTRA_PLAYLIST"]['various_artist']['name'], ]
|
||||
track['playlist']['artist'] = {"Main": [trackAPI["_EXTRA_PLAYLIST"]['various_artist']['name'], ]}
|
||||
track['playlist']['artists'] = [trackAPI["_EXTRA_PLAYLIST"]['various_artist']['name'], ]
|
||||
else:
|
||||
track['album']['artist'] = {"Main": []}
|
||||
track['album']['artists'] = []
|
||||
track['playlist']['artist'] = {"Main": []}
|
||||
track['playlist']['artists'] = []
|
||||
track['trackNumber'] = trackAPI["POSITION"]
|
||||
track['album']['trackTotal'] = trackAPI["_EXTRA_PLAYLIST"]['nb_tracks']
|
||||
track['album']['recordType'] = "Compilation"
|
||||
track['album']['barcode'] = ""
|
||||
track['album']['label'] = ""
|
||||
track['album']['date'] = {
|
||||
track['playlist']['trackTotal'] = trackAPI["_EXTRA_PLAYLIST"]['nb_tracks']
|
||||
track['playlist']['recordType'] = "Compilation"
|
||||
track['playlist']['barcode'] = ""
|
||||
track['playlist']['label'] = ""
|
||||
track['playlist']['explicit'] = trackAPI['_EXTRA_PLAYLIST']['explicit']
|
||||
track['playlist']['date'] = {
|
||||
'day': trackAPI["_EXTRA_PLAYLIST"]["creation_date"][8:10],
|
||||
'month': trackAPI["_EXTRA_PLAYLIST"]["creation_date"][5:7],
|
||||
'year': trackAPI["_EXTRA_PLAYLIST"]["creation_date"][0:4]
|
||||
}
|
||||
track['discNumber'] = "1"
|
||||
track['album']['discTotal'] = "1"
|
||||
track['playlist']['discTotal'] = "1"
|
||||
if settings['tags']['savePlaylistAsCompilation'] and "playlist" in track:
|
||||
track['album'] = {**track['album'], **track['playlist']}
|
||||
else:
|
||||
if 'date' in track['album']:
|
||||
track['date'] = track['album']['date']
|
||||
|
@ -728,6 +732,18 @@ def downloadTrackObj(dz, trackAPI, settings, bitrate, queueItem, extraTrack=None
|
|||
if extrasPath:
|
||||
result['extrasPath'] = extrasPath
|
||||
result['playlistPosition'] = writepath[len(extrasPath):]
|
||||
if "playlist" in track:
|
||||
if 'dzcdn.net' in track['playlist']['picUrl']:
|
||||
result['playlistURL'] = track['playlist']['picUrl'].replace(
|
||||
f"{settings['embeddedArtworkSize']}x{settings['embeddedArtworkSize']}",
|
||||
f"{settings['localArtworkSize']}x{settings['localArtworkSize']}")
|
||||
else:
|
||||
result['playlistURL'] = track['playlist']['picUrl']
|
||||
track['playlist']['id'] = "pl_" + str(trackAPI['_EXTRA_PLAYLIST']['id'])
|
||||
track['playlist']['genre'] = ["Compilation", ]
|
||||
track['playlist']['bitrate'] = format
|
||||
track['playlist']['dateString'] = formatDate(track['playlist']['date'], settings['dateFormat'])
|
||||
result['playlistCover'] = f"{settingsRegexAlbum(settings['coverImageTemplate'], track['playlist'], settings, trackAPI['_EXTRA_PLAYLIST'])}.{'png' if settings['PNGcovers'] else 'jpg'}"
|
||||
|
||||
track['downloadUrl'] = dz.get_track_stream_url(track['id'], track['MD5'], track['mediaVersion'],
|
||||
track['selectedFormat'])
|
||||
|
@ -895,6 +911,8 @@ def download(dz, queueItem, interface=None):
|
|||
def after_download(tracks, settings, queueItem):
|
||||
extrasPath = None
|
||||
playlist = [None] * len(tracks)
|
||||
playlistCover = None
|
||||
playlistURL = None
|
||||
errors = ""
|
||||
searched = ""
|
||||
for index in range(len(tracks)):
|
||||
|
@ -909,6 +927,9 @@ def after_download(tracks, settings, queueItem):
|
|||
searched += result['searched'] + "\r\n"
|
||||
if not extrasPath and 'extrasPath' in result:
|
||||
extrasPath = result['extrasPath']
|
||||
if not playlistCover and 'playlistCover' in result:
|
||||
playlistCover = result['playlistCover']
|
||||
playlistURL = result['playlistURL']
|
||||
if settings['saveArtwork'] and 'albumPath' in result:
|
||||
downloadImage(result['albumURL'], result['albumPath'], settings['overwriteFile'])
|
||||
if settings['saveArtworkArtist'] and 'artistPath' in result:
|
||||
|
@ -922,6 +943,8 @@ def after_download(tracks, settings, queueItem):
|
|||
if settings['logErrors'] and errors != "":
|
||||
with open(os.path.join(extrasPath, 'errors.txt'), 'wb') as f:
|
||||
f.write(errors.encode('utf-8'))
|
||||
if settings['saveArtwork'] and playlistCover and not settings['tags']['savePlaylistAsCompilation']:
|
||||
downloadImage(playlistURL, os.path.join(extrasPath, playlistCover), settings['overwriteFile'])
|
||||
if settings['logSearched'] and searched != "":
|
||||
with open(os.path.join(extrasPath, 'searched.txt'), 'wb') as f:
|
||||
f.write(searched.encode('utf-8'))
|
||||
|
|
|
@ -187,11 +187,15 @@ def generateQueueItem(dz, sp, url, settings, bitrate=None, albumAPI=None, interf
|
|||
totalSize = len(playlistTracksAPI)
|
||||
result['collection'] = []
|
||||
for pos, trackAPI in enumerate(playlistTracksAPI, start=1):
|
||||
if 'EXPLICIT_TRACK_CONTENT' in trackAPI and 'EXPLICIT_LYRICS_STATUS' in trackAPI['EXPLICIT_TRACK_CONTENT'] and trackAPI['EXPLICIT_TRACK_CONTENT']['EXPLICIT_LYRICS_STATUS'] in [1,4]:
|
||||
playlistAPI['explicit'] = True
|
||||
trackAPI['_EXTRA_PLAYLIST'] = playlistAPI
|
||||
trackAPI['POSITION'] = pos
|
||||
trackAPI['SIZE'] = totalSize
|
||||
trackAPI['FILENAME_TEMPLATE'] = settings['playlistTracknameTemplate']
|
||||
result['collection'].append(trackAPI)
|
||||
if not 'explicit' in playlistAPI:
|
||||
playlistAPI['explicit'] = False
|
||||
|
||||
elif type == "artist":
|
||||
artistAPI = dz.get_artist(id)
|
||||
|
|
|
@ -227,11 +227,15 @@ class SpotifyHelper:
|
|||
}
|
||||
else:
|
||||
deezerTrack = dz.get_track_gw(trackID)
|
||||
if 'EXPLICIT_LYRICS' in deezerTrack and deezerTrack['EXPLICIT_LYRICS'] == "1":
|
||||
playlistAPI['explicit'] = True
|
||||
deezerTrack['_EXTRA_PLAYLIST'] = playlistAPI
|
||||
deezerTrack['POSITION'] = pos
|
||||
deezerTrack['SIZE'] = totalSize
|
||||
deezerTrack['FILENAME_TEMPLATE'] = settings['playlistTracknameTemplate']
|
||||
result['collection'].append(deezerTrack)
|
||||
if not 'explicit' in playlistAPI:
|
||||
playlistAPI['explicit'] = False
|
||||
with open(path.join(self.configFolder, 'spotifyCache.json'), 'w') as spotifyCache:
|
||||
json.dump(cache, spotifyCache)
|
||||
return result
|
||||
|
|
|
@ -158,8 +158,13 @@ def settingsRegex(filename, track, settings, playlist=None):
|
|||
def settingsRegexAlbum(foldername, album, settings, playlist=None):
|
||||
if playlist and settings['tags']['savePlaylistAsCompilation']:
|
||||
foldername = foldername.replace("%album_id%", "pl_" + str(playlist['id']))
|
||||
foldername = foldername.replace("%genre%", "Compilation")
|
||||
else:
|
||||
foldername = foldername.replace("%album_id%", str(album['id']))
|
||||
if len(album['genre']) > 0:
|
||||
foldername = foldername.replace("%genre%", fixName(album['genre'][0], settings['illegalCharacterReplacer']))
|
||||
else:
|
||||
foldername = foldername.replace("%genre%", "Unknown")
|
||||
foldername = foldername.replace("%album%", fixName(album['title'], settings['illegalCharacterReplacer']))
|
||||
foldername = foldername.replace("%artist%",
|
||||
fixName(album['mainArtist']['name'], settings['illegalCharacterReplacer']))
|
||||
|
@ -171,10 +176,6 @@ def settingsRegexAlbum(foldername, album, settings, playlist=None):
|
|||
foldername = foldername.replace("%upc%", album['barcode'])
|
||||
foldername = foldername.replace("%explicit%", "(Explicit)" if album['explicit'] else "")
|
||||
foldername = foldername.replace("%label%", fixName(album['label'], settings['illegalCharacterReplacer']))
|
||||
if len(album['genre']) > 0:
|
||||
foldername = foldername.replace("%genre%", fixName(album['genre'][0], settings['illegalCharacterReplacer']))
|
||||
else:
|
||||
foldername = foldername.replace("%genre%", "Unknown")
|
||||
foldername = foldername.replace("%year%", str(album['date']['year']))
|
||||
foldername = foldername.replace("%date%", album['dateString'])
|
||||
foldername = foldername.replace("%bitrate%", bitrateLabels[int(album['bitrate'])])
|
||||
|
@ -198,6 +199,7 @@ def settingsRegexPlaylist(foldername, playlist, settings):
|
|||
foldername = foldername.replace("%owner_id%", str(playlist['creator']['id']))
|
||||
foldername = foldername.replace("%year%", str(playlist['creation_date'][:4]))
|
||||
foldername = foldername.replace("%date%", str(playlist['creation_date'][:10]))
|
||||
foldername = foldername.replace("%explicit%", "(Explicit)" if playlist['explicit'] else "")
|
||||
foldername = foldername.replace('\\', pathSep).replace('/', pathSep)
|
||||
return antiDot(fixLongName(foldername))
|
||||
|
||||
|
|
Loading…
Reference in New Issue