diff --git a/app/tasks.py b/app/tasks.py index c4506dc..34c6ef2 100644 --- a/app/tasks.py +++ b/app/tasks.py @@ -113,8 +113,8 @@ def download_missing_tracks(self): app.logger.info("Starting track download job...") with app.app_context(): - spotdl_config = app.config['SPOTDL_CONFIG'] - cookie_file = spotdl_config['cookie_file'] + spotdl_config: dict = app.config['SPOTDL_CONFIG'] + cookie_file = spotdl_config.get('cookie_file', None) output_dir = spotdl_config['output'] client_id = app.config['SPOTIFY_CLIENT_ID'] client_secret = app.config['SPOTIFY_CLIENT_SECRET'] @@ -239,7 +239,7 @@ def download_missing_tracks(self): "--client-id", client_id, "--client-secret", client_secret ] - if os.path.exists(cookie_file): + if cookie_file and os.path.exists(cookie_file): app.logger.debug(f"Found {cookie_file}, using it for spotDL") command.append("--cookie-file") command.append(cookie_file) @@ -247,7 +247,8 @@ def download_missing_tracks(self): app.logger.debug(f"Using proxy: {app.config['SPOTDL_PROXY']}") command.append("--proxy") command.append(app.config['SPOTDL_PROXY']) - + + app.logger.info(f"Executing the spotDL command: {' '.join(command)}") result = subprocess.run(command, capture_output=True, text=True, timeout=90) if result.returncode == 0: track.downloaded = True diff --git a/config.py b/config.py index 8dc1b97..b64c6e6 100644 --- a/config.py +++ b/config.py @@ -1,6 +1,8 @@ import os import sys +import app + class Config: LOG_LEVEL = os.getenv('LOG_LEVEL', 'INFO').upper() SECRET_KEY = os.getenv('SECRET_KEY') @@ -37,16 +39,24 @@ class Config: QUALITY_SCORE_THRESHOLD = float(os.getenv('QUALITY_SCORE_THRESHOLD',1000.0)) # SpotDL specific configuration SPOTDL_CONFIG = { - 'cookie_file': '/jellyplist/cookies.txt', - # combine the path provided in MUSIC_STORAGE_BASE_PATH with the following path __jellyplist/{track-id} to get the value for output - 'threads': 12 } + # combine the path provided in MUSIC_STORAGE_BASE_PATH with the SPOTDL_OUTPUT_FORMAT to get the value for output if os.getenv('MUSIC_STORAGE_BASE_PATH'): - - output_path = os.path.join(MUSIC_STORAGE_BASE_PATH,SPOTDL_OUTPUT_FORMAT) - + # Ensure MUSIC_STORAGE_BASE_PATH ends with "__jellyplist" + if not MUSIC_STORAGE_BASE_PATH.endswith("__jellyplist"): + MUSIC_STORAGE_BASE_PATH += "__jellyplist" + + # Ensure SPOTDL_OUTPUT_FORMAT does not start with "/" + normalized_spotdl_output_format = SPOTDL_OUTPUT_FORMAT.lstrip("/").replace(" ", "_") + + # Join the paths + output_path = os.path.join(MUSIC_STORAGE_BASE_PATH, normalized_spotdl_output_format) + SPOTDL_CONFIG.update({'output': output_path}) + + if SPOTIFY_COOKIE_FILE: + SPOTDL_CONFIG.update({'cookie_file': SPOTIFY_COOKIE_FILE}) @classmethod def validate_env_vars(cls): diff --git a/readme.md b/readme.md index 7422ab3..cb64ecf 100644 --- a/readme.md +++ b/readme.md @@ -44,13 +44,13 @@ MUSIC_STORAGE_BASE_PATH = '/storage/media/music' # The base path where your musi # SPOTDL_PROXY = http://proxy:8080 # SPOTDL_OUTPUT_FORMAT = "/{artist}/{artists} - {title}" # Supported variables: {title}, {artist},{artists}, {album}, Will be joined with to get a complete path -# SEARCH_JELLYFIN_BEFORE_DOWNLOAD = false # defaults to true, before attempting to do a download with spotDL , the song will be searched first in the local library +# SEARCH_JELLYFIN_BEFORE_DOWNLOAD = false # defaults to true, before attempting to do a download with spotDL , the song will be searched first in the local library ("true" MAY INCURE PERFORMENCE ISSUES) # START_DOWNLOAD_AFTER_PLAYLIST_ADD = true # defaults to false, If a new Playlist is added, the Download Task will be scheduled immediately # FIND_BEST_MATCH_USE_FFPROBE = true # Use ffprobe to gather quality details from a file to calculate quality score. Otherwise jellyplist will use details provided by jellyfin. defaults to false. -#REFRESH_LIBRARIES_AFTER_DOWNLOAD_TASK = true # jellyplist will trigger a music library update on your Jellyfin server, in case you dont have `Realtime Monitoring` enabled on your Jellyfin library. Defaults to false. +#REFRESH_LIBRARIES_AFTER_DOWNLOAD_TASK = true # jellyplist will trigger a music library update on your Jellyfin server, in case you dont have `Realtime Monitoring` enabled on your Jellyfin library. Defaults to false. ("true" MAY INCURE PERFORMENCE ISSUES) # LOG_LEVEL = DEBUG # Defaults to INFO diff --git a/requirements.txt b/requirements.txt index 624a3d8..7b5020f 100644 --- a/requirements.txt +++ b/requirements.txt @@ -9,7 +9,7 @@ numpy==2.1.3 pyacoustid==1.3.0 redis==5.1.1 Requests==2.32.3 -spotdl==4.2.10 +spotdl==4.2.11 spotipy==2.24.0 SQLAlchemy==2.0.35 Unidecode==1.3.8