Implemented savePlaylistAsCompilation
Updated README with more information
This commit is contained in:
@ -31,7 +31,6 @@
|
||||
"artistImageTemplate": "folder",
|
||||
"PNGcovers": false,
|
||||
"dateFormat": "Y-M-D",
|
||||
"savePlaylistAsCompilation": false,
|
||||
"removeAlbumVersion": false,
|
||||
"featuredToTitle": "0",
|
||||
"titleCasing": "nothing",
|
||||
@ -61,6 +60,7 @@
|
||||
"copyright": false,
|
||||
"composer": false,
|
||||
"involvedPeople": false,
|
||||
"savePlaylistAsCompilation": false,
|
||||
"useNullSeparator": false,
|
||||
"saveID3v1": true,
|
||||
"multitagSeparator": "default"
|
||||
|
@ -12,6 +12,7 @@ from concurrent.futures import ThreadPoolExecutor
|
||||
from Cryptodome.Cipher import Blowfish
|
||||
from time import sleep
|
||||
import re
|
||||
import traceback
|
||||
|
||||
TEMPDIR = os.path.join(gettempdir(), 'deemix-imgs')
|
||||
if not os.path.isdir(TEMPDIR):
|
||||
@ -288,9 +289,6 @@ def getTrackData(dz, trackAPI_gw, trackAPI = None, albumAPI_gw = None, albumAPI
|
||||
}
|
||||
track['album']['genre'] = []
|
||||
|
||||
if 'date' in track['album']:
|
||||
track['date'] = track['album']['date']
|
||||
|
||||
if not trackAPI:
|
||||
trackAPI = dz.get_track(track['id'])
|
||||
track['bpm'] = trackAPI['bpm']
|
||||
@ -467,9 +465,34 @@ def downloadTrackObj(dz, trackAPI, settings, bitrate, queueItem, extraTrack=None
|
||||
return result
|
||||
track['selectedFormat'] = format
|
||||
track['selectedFilesize'] = filesize
|
||||
track['album']['bitrate'] = format
|
||||
track['album']['picUrl'] = "https://e-cdns-images.dzcdn.net/images/cover/{}/{}x{}-000000-80-0-0.{}".format(track['album']['pic'], settings['embeddedArtworkSize'], settings['embeddedArtworkSize'], 'png' if settings['PNGcovers'] else 'jpg')
|
||||
track['dateString'] = formatDate(track['date'], settings['dateFormat'])
|
||||
if settings['tags']['savePlaylistAsCompilation'] and "_EXTRA_PLAYLIST" in trackAPI:
|
||||
track['album']['picUrl'] = trackAPI["_EXTRA_PLAYLIST"]['picture_small'].replace("56x56", f"{settings['embeddedArtworkSize']}x{settings['embeddedArtworkSize']}").replace(".jpg", '.png' if settings['PNGcovers'] else '.jpg')
|
||||
track['album']['title'] = trackAPI["_EXTRA_PLAYLIST"]['title']
|
||||
track['album']['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]
|
||||
}
|
||||
track['album']['artist'] = {"Main": [trackAPI["_EXTRA_PLAYLIST"]['various_artist']['name'], ]}
|
||||
track['album']['artists'] = [trackAPI["_EXTRA_PLAYLIST"]['various_artist']['name'], ]
|
||||
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'] = {
|
||||
'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"
|
||||
else:
|
||||
if 'date' in track['album']:
|
||||
track['date'] = track['album']['date']
|
||||
track['album']['picUrl'] = "https://e-cdns-images.dzcdn.net/images/cover/{}/{}x{}-000000-80-0-0.{}".format(track['album']['pic'], settings['embeddedArtworkSize'], settings['embeddedArtworkSize'], 'png' if settings['PNGcovers'] else 'jpg')
|
||||
track['album']['bitrate'] = format
|
||||
track['album']['dateString'] = formatDate(track['album']['date'], settings['dateFormat'])
|
||||
|
||||
# Check if user wants the feat in the title
|
||||
@ -531,7 +554,7 @@ def downloadTrackObj(dz, trackAPI, settings, bitrate, queueItem, extraTrack=None
|
||||
# Save local album art
|
||||
if coverPath:
|
||||
result['albumURL'] = track['album']['picUrl'].replace(f"{settings['embeddedArtworkSize']}x{settings['embeddedArtworkSize']}", f"{settings['localArtworkSize']}x{settings['localArtworkSize']}")
|
||||
result['albumPath'] = os.path.join(coverPath, f"{settingsRegexAlbum(settings['coverImageTemplate'], track['album'], settings)}.{'png' if settings['PNGcovers'] else 'jpg'}")
|
||||
result['albumPath'] = os.path.join(coverPath, f"{settingsRegexAlbum(settings['coverImageTemplate'], track['album'], settings, trackAPI)}.{'png' if settings['PNGcovers'] else 'jpg'}")
|
||||
|
||||
# Save artist art
|
||||
if artistPath:
|
||||
@ -610,6 +633,7 @@ def downloadTrackObj_wrap(dz, track, settings, bitrate, queueItem, interface):
|
||||
try:
|
||||
result = downloadTrackObj(dz, track, settings, bitrate, queueItem, interface=interface)
|
||||
except Exception as e:
|
||||
traceback.print_exc()
|
||||
result = {'error': {
|
||||
'message': str(e),
|
||||
'data': {
|
||||
@ -725,5 +749,5 @@ def after_download_single(track, settings, queueItem):
|
||||
return track['extrasPath']
|
||||
|
||||
class downloadCancelled(Exception):
|
||||
"""Base class for exceptions in this module."""
|
||||
pass
|
||||
"""Base class for exceptions in this module."""
|
||||
pass
|
||||
|
@ -91,6 +91,7 @@ def generateQueueItem(dz, sp, url, settings, bitrate=None, albumAPI=None, interf
|
||||
elif type == "playlist":
|
||||
playlistAPI = dz.get_playlist(id)
|
||||
playlistTracksAPI = dz.get_playlist_tracks_gw(id)
|
||||
playlistAPI['various_artist'] = dz.get_artist(5080)
|
||||
|
||||
result['title'] = playlistAPI['title']
|
||||
result['artist'] = playlistAPI['creator']['name']
|
||||
@ -158,7 +159,7 @@ def generateQueueItem(dz, sp, url, settings, bitrate=None, albumAPI=None, interf
|
||||
interface.send("toast", {'msg': f"Converting spotify tracks to deezer tracks", 'icon': 'loading', 'dismiss': False, 'id': 'spotifyplaylist_'+str(id)})
|
||||
playlist = sp.convert_spotify_playlist(dz, id, settings)
|
||||
playlist['bitrate'] = bitrate
|
||||
playlist['uuid'] = f"{result['type']}_{id}_{bitrate}"
|
||||
playlist['uuid'] = f"{playlist['type']}_{id}_{bitrate}"
|
||||
result = playlist
|
||||
if interface:
|
||||
interface.send("toast", {'msg': f"Spotify playlist converted", 'icon': 'done', 'dismiss': True, 'id': 'spotifyplaylist_'+str(id)})
|
||||
|
@ -60,7 +60,7 @@ class SpotifyHelper:
|
||||
deezer_obj = {
|
||||
'checksum': spotify_obj['snapshot_id'],
|
||||
'collaborative': spotify_obj['collaborative'],
|
||||
'creation_date': "???-??-??",
|
||||
'creation_date': "????-00-00",
|
||||
'creator': {'id': spotify_obj['owner']['id'], 'name': spotify_obj['owner']['display_name'], 'tracklist': spotify_obj['owner']['href'], 'type': "user"},
|
||||
'description': spotify_obj['description'],
|
||||
'duration': 0,
|
||||
@ -117,7 +117,7 @@ class SpotifyHelper:
|
||||
dz_album = 0
|
||||
return dz_album
|
||||
|
||||
def convert_spotify_playlist(self, sp, dz, playlist_id, settings):
|
||||
def convert_spotify_playlist(self, dz, playlist_id, settings):
|
||||
if not self.spotifyEnabled:
|
||||
raise spotifyFeaturesNotEnabled
|
||||
spotify_playlist = self.sp.playlist(playlist_id)
|
||||
@ -137,6 +137,7 @@ class SpotifyHelper:
|
||||
else:
|
||||
result['cover'] = "https://e-cdns-images.dzcdn.net/images/cover/d41d8cd98f00b204e9800998ecf8427e/75x75-000000-80-0-0.jpg"
|
||||
playlistAPI = self._convert_playlist_structure(spotify_playlist)
|
||||
playlistAPI['various_artist'] = dz.get_artist(5080)
|
||||
tracklist = spotify_playlist['tracks']['items']
|
||||
result['collection'] = []
|
||||
while spotify_playlist['tracks']['next']:
|
||||
|
Reference in New Issue
Block a user