@@ -181,6 +181,11 @@ def download_missing_tracks(self):
|
|||||||
}
|
}
|
||||||
finally:
|
finally:
|
||||||
release_lock(lock_key)
|
release_lock(lock_key)
|
||||||
|
if app.config['REFRESH_LIBRARIES_AFTER_DOWNLOAD_TASK']:
|
||||||
|
libraries = jellyfin.get_libraries(jellyfin_admin_token)
|
||||||
|
for lib in libraries:
|
||||||
|
if lib['CollectionType'] == 'music':
|
||||||
|
jellyfin.refresh_library(jellyfin_admin_token, lib['ItemId'])
|
||||||
else:
|
else:
|
||||||
app.logger.info("Skipping task. Another instance is already running.")
|
app.logger.info("Skipping task. Another instance is already running.")
|
||||||
return {'status': 'Task skipped, another instance is running'}
|
return {'status': 'Task skipped, another instance is running'}
|
||||||
|
|||||||
@@ -13,6 +13,7 @@ class Config:
|
|||||||
JELLYPLIST_DB_USER = os.getenv('JELLYPLIST_DB_USER')
|
JELLYPLIST_DB_USER = os.getenv('JELLYPLIST_DB_USER')
|
||||||
JELLYPLIST_DB_PASSWORD = os.getenv('JELLYPLIST_DB_PASSWORD')
|
JELLYPLIST_DB_PASSWORD = os.getenv('JELLYPLIST_DB_PASSWORD')
|
||||||
START_DOWNLOAD_AFTER_PLAYLIST_ADD = os.getenv('START_DOWNLOAD_AFTER_PLAYLIST_ADD',"true").lower() == 'true' # If a new Playlist is added, the Download Task will be scheduled immediately
|
START_DOWNLOAD_AFTER_PLAYLIST_ADD = os.getenv('START_DOWNLOAD_AFTER_PLAYLIST_ADD',"true").lower() == 'true' # If a new Playlist is added, the Download Task will be scheduled immediately
|
||||||
|
REFRESH_LIBRARIES_AFTER_DOWNLOAD_TASK = os.getenv('REFRESH_LIBRARIES_AFTER_DOWNLOAD_TASK',"false").lower() == 'true'
|
||||||
CACHE_TYPE = 'redis'
|
CACHE_TYPE = 'redis'
|
||||||
CACHE_REDIS_PORT = 6379
|
CACHE_REDIS_PORT = 6379
|
||||||
CACHE_REDIS_HOST = 'redis'
|
CACHE_REDIS_HOST = 'redis'
|
||||||
@@ -20,9 +21,6 @@ class Config:
|
|||||||
CACHE_DEFAULT_TIMEOUT = 3600
|
CACHE_DEFAULT_TIMEOUT = 3600
|
||||||
REDIS_URL = os.getenv('REDIS_URL','redis://redis:6379/0')
|
REDIS_URL = os.getenv('REDIS_URL','redis://redis:6379/0')
|
||||||
SEARCH_JELLYFIN_BEFORE_DOWNLOAD = os.getenv('SEARCH_JELLYFIN_BEFORE_DOWNLOAD',"true").lower() == 'true'
|
SEARCH_JELLYFIN_BEFORE_DOWNLOAD = os.getenv('SEARCH_JELLYFIN_BEFORE_DOWNLOAD',"true").lower() == 'true'
|
||||||
|
|
||||||
|
|
||||||
SEARCH_JELLYFIN_BEFORE_DOWNLOAD = True
|
|
||||||
# SpotDL specific configuration
|
# SpotDL specific configuration
|
||||||
SPOTDL_CONFIG = {
|
SPOTDL_CONFIG = {
|
||||||
'cookie_file': '/jellyplist/cookies.txt',
|
'cookie_file': '/jellyplist/cookies.txt',
|
||||||
@@ -36,6 +34,7 @@ class Config:
|
|||||||
'JELLYFIN_SERVER_URL': cls.JELLYFIN_SERVER_URL,
|
'JELLYFIN_SERVER_URL': cls.JELLYFIN_SERVER_URL,
|
||||||
'JELLYFIN_ADMIN_USER': cls.JELLYFIN_ADMIN_USER,
|
'JELLYFIN_ADMIN_USER': cls.JELLYFIN_ADMIN_USER,
|
||||||
'JELLYFIN_ADMIN_PASSWORD': cls.JELLYFIN_ADMIN_PASSWORD,
|
'JELLYFIN_ADMIN_PASSWORD': cls.JELLYFIN_ADMIN_PASSWORD,
|
||||||
|
|
||||||
'SPOTIFY_CLIENT_ID': cls.SPOTIFY_CLIENT_ID,
|
'SPOTIFY_CLIENT_ID': cls.SPOTIFY_CLIENT_ID,
|
||||||
'SPOTIFY_CLIENT_SECRET': cls.SPOTIFY_CLIENT_SECRET,
|
'SPOTIFY_CLIENT_SECRET': cls.SPOTIFY_CLIENT_SECRET,
|
||||||
'JELLYPLIST_DB_HOST' : cls.JELLYPLIST_DB_HOST,
|
'JELLYPLIST_DB_HOST' : cls.JELLYPLIST_DB_HOST,
|
||||||
|
|||||||
@@ -172,6 +172,34 @@ class JellyfinClient:
|
|||||||
else:
|
else:
|
||||||
raise Exception(f"Failed to get playlists: {response.content}")
|
raise Exception(f"Failed to get playlists: {response.content}")
|
||||||
|
|
||||||
|
def get_libraries(self, session_token: str):
|
||||||
|
url = f'{self.base_url}/Library/VirtualFolders'
|
||||||
|
params = {
|
||||||
|
|
||||||
|
}
|
||||||
|
response = requests.get(url, headers=self._get_headers(session_token=session_token), params=params , timeout = 10)
|
||||||
|
if response.status_code == 200:
|
||||||
|
return response.json()
|
||||||
|
else:
|
||||||
|
raise Exception(f"Failed to get playlists: {response.content}")
|
||||||
|
|
||||||
|
def refresh_library(self, session_token: str, library_id: str) -> bool:
|
||||||
|
url = f'{self.base_url}/Items/{library_id}/Refresh'
|
||||||
|
|
||||||
|
params = {
|
||||||
|
"Recursive": "true",
|
||||||
|
"ImageRefreshMode": "Default",
|
||||||
|
"MetadataRefreshMode": "Default",
|
||||||
|
"ReplaceAllImages": "false",
|
||||||
|
"RegenerateTrickplay": "false",
|
||||||
|
"ReplaceAllMetadata": "false"
|
||||||
|
}
|
||||||
|
response = requests.post(url, headers=self._get_headers(session_token=session_token), params=params , timeout = 10)
|
||||||
|
if response.status_code == 204:
|
||||||
|
return True
|
||||||
|
else:
|
||||||
|
raise Exception(f"Failed to update library: {response.content}")
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
def search_music_tracks(self, session_token: str, search_query: str):
|
def search_music_tracks(self, session_token: str, search_query: str):
|
||||||
|
|||||||
Reference in New Issue
Block a user