From b50f6c8d9fbe79218da2604a76415c0e7f267bcf Mon Sep 17 00:00:00 2001 From: Broque Thomas Date: Sat, 13 Dec 2025 08:32:42 -0800 Subject: [PATCH] Add limit parameter to wishlist tracks API Introduces an optional 'limit' query parameter to the /api/wishlist/tracks endpoint for improved performance when fetching tracks. Updates the frontend to use this parameter, limiting requests to 50 tracks per category when fetching album and single covers. --- web_server.py | 14 +++++++++++--- webui/static/script.js | 5 +++-- 2 files changed, 14 insertions(+), 5 deletions(-) diff --git a/web_server.py b/web_server.py index 864818ae..4c4ecb3b 100644 --- a/web_server.py +++ b/web_server.py @@ -8810,13 +8810,15 @@ def get_wishlist_tracks(): Query Parameters: category (optional): 'singles' or 'albums' - filters tracks by album type + limit (optional): Maximum number of tracks to return (for performance) """ try: from core.wishlist_service import get_wishlist_service from database.music_database import MusicDatabase - # Get category filter from query params + # Get category filter and limit from query params category = request.args.get('category', None) # None = all tracks + limit = request.args.get('limit', type=int, default=None) # None = no limit # Clean duplicates ONLY if no active wishlist download is running # This prevents count mismatches during active downloads @@ -8879,10 +8881,16 @@ def get_wishlist_tracks(): elif category == 'albums' and is_album: filtered_tracks.append(track) - print(f"📊 Wishlist filter: {len(filtered_tracks)}/{len(sanitized_tracks)} tracks in '{category}' category") + # Apply limit early for performance + if limit and len(filtered_tracks) >= limit: + break + + print(f"📊 Wishlist filter: {len(filtered_tracks)}/{len(sanitized_tracks)} tracks in '{category}' category (limit: {limit or 'none'})") return jsonify({"tracks": filtered_tracks, "category": category}) - return jsonify({"tracks": sanitized_tracks}) + # Apply limit to non-filtered results + result_tracks = sanitized_tracks[:limit] if limit else sanitized_tracks + return jsonify({"tracks": result_tracks}) except Exception as e: print(f"Error getting wishlist tracks: {e}") return jsonify({"error": str(e)}), 500 diff --git a/webui/static/script.js b/webui/static/script.js index 2f72fe28..9971c96c 100644 --- a/webui/static/script.js +++ b/webui/static/script.js @@ -5160,8 +5160,9 @@ async function openWishlistOverviewModal() { } // Fetch album covers for mosaic backgrounds - const albumCoversPromise = fetch('/api/wishlist/tracks?category=albums').then(r => r.json()); - const singleCoversPromise = fetch('/api/wishlist/tracks?category=singles').then(r => r.json()); + // Limit to 50 tracks per category (enough to get 20 unique covers while being efficient) + const albumCoversPromise = fetch('/api/wishlist/tracks?category=albums&limit=50').then(r => r.json()); + const singleCoversPromise = fetch('/api/wishlist/tracks?category=singles&limit=50').then(r => r.json()); const [albumTracksData, singleTracksData] = await Promise.all([albumCoversPromise, singleCoversPromise]);