mirror of
https://gitlab.com/RemixDev/deemix-py.git
synced 2024-12-29 11:06:14 +00:00
f530a4e89f
Removed saveDownloadQueue and tagsLanguage from lib settings Revert embedded cover change Fixed bitrate fallback check Use overwriteFile setting when downloading embedded covers Fixed bitrate fallback not working Fixed some issues to make the lib work Implemented spotify plugin back Better handling of albums upcs Fixed queue item not cancelling correctly Code parity with deemix-js Code cleanup with pylint Even more rework on the library More work on the library (WIP) Total rework of the library (WIP) Some rework done on types Added start queue function Made nextitem work on a thread Removed dz as first parameter Started queuemanager refactoring Removed eventlet Co-authored-by: RemixDev <RemixDev64@gmail.com> Reviewed-on: https://git.freezer.life/RemixDev/deemix-py/pulls/4 Co-Authored-By: RemixDev <remixdev@noreply.localhost> Co-Committed-By: RemixDev <remixdev@noreply.localhost>
138 lines
4.7 KiB
Python
138 lines
4.7 KiB
Python
import json
|
|
from pathlib import Path
|
|
from os import makedirs
|
|
from deezer import TrackFormats
|
|
import deemix.utils.localpaths as localpaths
|
|
|
|
class OverwriteOption():
|
|
"""Should the lib overwrite files?"""
|
|
OVERWRITE = 'y' # Yes, overwrite the file
|
|
DONT_OVERWRITE = 'n' # No, don't overwrite the file
|
|
DONT_CHECK_EXT = 'e' # No, and don't check for extensions
|
|
KEEP_BOTH = 'b' # No, and keep both files
|
|
ONLY_TAGS = 't' # Overwrite only the tags
|
|
|
|
class FeaturesOption():
|
|
"""What should I do with featured artists?"""
|
|
NO_CHANGE = "0" # Do nothing
|
|
REMOVE_TITLE = "1" # Remove from track title
|
|
REMOVE_TITLE_ALBUM = "3" # Remove from track title and album title
|
|
MOVE_TITLE = "2" # Move to track title
|
|
|
|
DEFAULTS = {
|
|
"downloadLocation": str(localpaths.getMusicFolder()),
|
|
"tracknameTemplate": "%artist% - %title%",
|
|
"albumTracknameTemplate": "%tracknumber% - %title%",
|
|
"playlistTracknameTemplate": "%position% - %artist% - %title%",
|
|
"createPlaylistFolder": True,
|
|
"playlistNameTemplate": "%playlist%",
|
|
"createArtistFolder": False,
|
|
"artistNameTemplate": "%artist%",
|
|
"createAlbumFolder": True,
|
|
"albumNameTemplate": "%artist% - %album%",
|
|
"createCDFolder": True,
|
|
"createStructurePlaylist": False,
|
|
"createSingleFolder": False,
|
|
"padTracks": True,
|
|
"paddingSize": "0",
|
|
"illegalCharacterReplacer": "_",
|
|
"queueConcurrency": 3,
|
|
"maxBitrate": str(TrackFormats.MP3_320),
|
|
"fallbackBitrate": True,
|
|
"fallbackSearch": False,
|
|
"logErrors": True,
|
|
"logSearched": False,
|
|
"overwriteFile": OverwriteOption.DONT_OVERWRITE,
|
|
"createM3U8File": False,
|
|
"playlistFilenameTemplate": "playlist",
|
|
"syncedLyrics": False,
|
|
"embeddedArtworkSize": 800,
|
|
"embeddedArtworkPNG": False,
|
|
"localArtworkSize": 1400,
|
|
"localArtworkFormat": "jpg",
|
|
"saveArtwork": True,
|
|
"coverImageTemplate": "cover",
|
|
"saveArtworkArtist": False,
|
|
"artistImageTemplate": "folder",
|
|
"jpegImageQuality": 80,
|
|
"dateFormat": "Y-M-D",
|
|
"albumVariousArtists": True,
|
|
"removeAlbumVersion": False,
|
|
"removeDuplicateArtists": False,
|
|
"featuredToTitle": FeaturesOption.NO_CHANGE,
|
|
"titleCasing": "nothing",
|
|
"artistCasing": "nothing",
|
|
"executeCommand": "",
|
|
"tags": {
|
|
"title": True,
|
|
"artist": True,
|
|
"album": True,
|
|
"cover": True,
|
|
"trackNumber": True,
|
|
"trackTotal": False,
|
|
"discNumber": True,
|
|
"discTotal": False,
|
|
"albumArtist": True,
|
|
"genre": True,
|
|
"year": True,
|
|
"date": True,
|
|
"explicit": False,
|
|
"isrc": True,
|
|
"length": True,
|
|
"barcode": True,
|
|
"bpm": True,
|
|
"replayGain": False,
|
|
"label": True,
|
|
"lyrics": False,
|
|
"syncedLyrics": False,
|
|
"copyright": False,
|
|
"composer": False,
|
|
"involvedPeople": False,
|
|
"source": False,
|
|
"savePlaylistAsCompilation": False,
|
|
"useNullSeparator": False,
|
|
"saveID3v1": True,
|
|
"multiArtistSeparator": "default",
|
|
"singleAlbumArtist": False,
|
|
"coverDescriptionUTF8": False
|
|
}
|
|
}
|
|
|
|
def save(settings, configFolder=None):
|
|
configFolder = Path(configFolder or localpaths.getConfigFolder())
|
|
makedirs(configFolder, exist_ok=True) # Create config folder if it doesn't exsist
|
|
|
|
with open(configFolder / 'config.json', 'w') as configFile:
|
|
json.dump(settings, configFile, indent=2)
|
|
|
|
def load(configFolder=None):
|
|
configFolder = Path(configFolder or localpaths.getConfigFolder())
|
|
makedirs(configFolder, exist_ok=True) # Create config folder if it doesn't exsist
|
|
if not (configFolder / 'config.json').is_file(): save(DEFAULTS, configFolder) # Create config file if it doesn't exsist
|
|
|
|
# Read config file
|
|
with open(configFolder / 'config.json', 'r') as configFile:
|
|
settings = json.load(configFile)
|
|
|
|
if check(settings) > 0: save(settings, configFolder) # Check the settings and save them if something changed
|
|
return settings
|
|
|
|
def check(settings):
|
|
changes = 0
|
|
for i_set in DEFAULTS:
|
|
if not i_set in settings or not isinstance(settings[i_set], type(DEFAULTS[i_set])):
|
|
settings[i_set] = DEFAULTS[i_set]
|
|
changes += 1
|
|
for i_set in DEFAULTS['tags']:
|
|
if not i_set in settings['tags'] or not isinstance(settings['tags'][i_set], type(DEFAULTS['tags'][i_set])):
|
|
settings['tags'][i_set] = DEFAULTS['tags'][i_set]
|
|
changes += 1
|
|
if settings['downloadLocation'] == "":
|
|
settings['downloadLocation'] = DEFAULTS['downloadLocation']
|
|
changes += 1
|
|
for template in ['tracknameTemplate', 'albumTracknameTemplate', 'playlistTracknameTemplate', 'playlistNameTemplate', 'artistNameTemplate', 'albumNameTemplate', 'playlistFilenameTemplate', 'coverImageTemplate', 'artistImageTemplate', 'paddingSize']:
|
|
if settings[template] == "":
|
|
settings[template] = DEFAULTS[template]
|
|
changes += 1
|
|
return changes
|