From 501e1eea9d61a788c464ae716863c9dd25f1a1fc Mon Sep 17 00:00:00 2001 From: Justin Donofrio Date: Tue, 14 Jan 2025 01:47:53 -0500 Subject: [PATCH] Add restart download workers button to web ui --- src/onthespot/api/spotify.py | 4 +-- src/onthespot/downloader.py | 2 +- .../resources/web/download_queue.html | 13 +++++++++ src/onthespot/resources/web/style.css | 1 + src/onthespot/runtimedata.py | 3 ++ src/onthespot/web.py | 28 +++++++++++++++---- 6 files changed, 43 insertions(+), 8 deletions(-) diff --git a/src/onthespot/api/spotify.py b/src/onthespot/api/spotify.py index 8506357..e32cde8 100644 --- a/src/onthespot/api/spotify.py +++ b/src/onthespot/api/spotify.py @@ -46,7 +46,7 @@ def run(self): # Circular Import from ..accounts import get_account_token while self.is_running: - time.sleep(3) + time.sleep(5) try: token = get_account_token('spotify').tokens() except (AttributeError, IndexError): @@ -568,7 +568,7 @@ def spotify_get_track_metadata(token, item_id): info['release_year'] = track_data.get('tracks', [{}])[0].get('album', {}).get('release_date', '').split("-")[0] #info['track_number'] = track_data.get('tracks', [{}])[0].get('track_number', '') - info['track_number'] = track_number + info['track_number'] = track_number info['total_tracks'] = track_data.get('tracks', [{}])[0].get('album', {}).get('total_tracks', '') info['disc_number'] = track_data.get('tracks', [{}])[0].get('disc_number', '') info['total_discs'] = sorted([trk.get('disc_number', 0) for trk in album_data.get('tracks', {}).get('items', [])])[-1] if 'tracks' in album_data else 1 diff --git a/src/onthespot/downloader.py b/src/onthespot/downloader.py index 3cc2141..beed354 100644 --- a/src/onthespot/downloader.py +++ b/src/onthespot/downloader.py @@ -326,7 +326,7 @@ def run(self): ).json() try: - print(track_data) + logger.debug(track_data) url = track_data['data'][0]['media'][0]['sources'][0]['url'] except KeyError as e: # Fallback to lowest quality diff --git a/src/onthespot/resources/web/download_queue.html b/src/onthespot/resources/web/download_queue.html index 4ca7010..93dc180 100644 --- a/src/onthespot/resources/web/download_queue.html +++ b/src/onthespot/resources/web/download_queue.html @@ -23,6 +23,7 @@

Total Items: 0 | Progress: 0%

+
@@ -218,6 +219,18 @@ }); } + function restartWorkers() { + fetch('/restart_workers', { + method: 'POST' + }) + .then(response => response.json()) + .then(data => { + if (data.success) { + console.log('Clear completed successful'); + } + }); + } + function handleDelete(local_id) { fetch(`/delete/${local_id}`, { method: 'DELETE', diff --git a/src/onthespot/resources/web/style.css b/src/onthespot/resources/web/style.css index 3799010..d342df9 100644 --- a/src/onthespot/resources/web/style.css +++ b/src/onthespot/resources/web/style.css @@ -71,6 +71,7 @@ th { button { padding: 12px 20px; + margin-left: 10px; border: none; border-radius: 10px; background-color: #1DB954; diff --git a/src/onthespot/runtimedata.py b/src/onthespot/runtimedata.py index 6cb1068..91b8ba3 100755 --- a/src/onthespot/runtimedata.py +++ b/src/onthespot/runtimedata.py @@ -31,6 +31,9 @@ pending_lock = threading.Lock() download_queue_lock = threading.Lock() +queue_workers = [] +download_workers = [] + init_tray = False diff --git a/src/onthespot/web.py b/src/onthespot/web.py index dfb3104..63b2872 100644 --- a/src/onthespot/web.py +++ b/src/onthespot/web.py @@ -20,7 +20,7 @@ from .downloader import DownloadWorker, RetryWorker from .otsconfig import config_dir, config from .parse_item import parsingworker, parse_url -from .runtimedata import get_logger, account_pool, pending, download_queue, download_queue_lock, pending_lock +from .runtimedata import get_logger, account_pool, pending, download_queue, download_queue_lock, pending_lock, download_workers, queue_workers from .search import get_search_results logger = get_logger("web") @@ -173,6 +173,22 @@ def clear_items(): return jsonify(success=True) +@app.route('/restart_workers', methods=['POST']) +@login_required +def restart_workers(): + for download_worker in download_workers: + download_worker.stop() + + download_workers.clear() + + for i in range(config.get('maximum_download_workers')): + download_worker = DownloadWorker() + download_worker.start() + download_workers.append(download_worker) + + return jsonify(success=True) + + @app.route('/download_queue') @login_required def download_queue_page(): @@ -267,13 +283,15 @@ def main(): thread.daemon = True thread.start() - for i in range(config.get('maximum_queue_workers')): + for _ in range(config.get('maximum_queue_workers')): queue_worker = QueueWorker() queue_worker.start() + queue_workers.append(queue_worker) - for i in range(config.get('maximum_download_workers')): - downloadworker = DownloadWorker() - downloadworker.start() + for _ in range(config.get('maximum_download_workers')): + download_worker = DownloadWorker() + download_worker.start() + download_workers.append(download_worker) if config.get('enable_retry_worker'): retryworker = RetryWorker()