Commit graph

904 commits

Author SHA1 Message Date
Broque Thomas
ddd2ebdb13 Improve YouTube download handling and shutdown safety
Adjusts matching weights for YouTube sources to rely more on title and duration, adds a shutdown callback to the YouTube client to prevent new downloads during shutdown, and enhances post-processing to reliably resolve actual YouTube file paths. Improves error handling for file removal, ensures no new batch downloads start during shutdown, and refines download monitoring to trigger post-processing on completed YouTube downloads. Also increases YouTube download retries and improves logging for debugging.
2026-01-05 18:08:43 -08:00
Broque Thomas
af2265a68a Improve YouTube download handling and add Spotify search API
Enhanced download status and post-processing logic to properly handle YouTube downloads alongside Soulseek transfers. Improved file organization for simple downloads, moving singles without album info directly to the Transfer root. Added a new generic Spotify search API endpoint. Updated frontend logic to correctly display YouTube download titles and results, and improved filename parsing for YouTube tracks.
2026-01-04 20:16:08 -08:00
Broque Thomas
c9939ac418 Update script.js 2026-01-04 15:14:49 -08:00
Broque Thomas
381e43c76b Update youtube_client.py 2026-01-04 15:02:41 -08:00
Broque Thomas
58f7fdb005 style youtube cards 2026-01-04 14:56:05 -08:00
Broque Thomas
61e822bf6f Add robust YouTube streaming support and improve format checks
Enhances streaming logic to better support YouTube as a download source, including improved filename handling, fuzzy file matching, and search query generation. Updates format checks in the frontend to skip them for YouTube (always MP3). Refactors backend to use a unified download status API for both Soulseek and YouTube, and improves service test messaging based on the active download mode.
2026-01-04 12:30:35 -08:00
Broque Thomas
88f08c2d0e Update web_server.py 2026-01-04 00:53:02 -08:00
Broque Thomas
c94b1d2f5b Add hybrid Soulseek/YouTube download orchestration - TESTING
Introduces a DownloadOrchestrator class to route downloads between Soulseek and YouTube based on user-configurable modes (Soulseek only, YouTube only, Hybrid with fallback). Updates web server and UI to support new download source settings, including hybrid mode options and YouTube confidence threshold. Refactors YouTube client for thread-safe download management and bot detection bypass. Ensures quality filtering is skipped for YouTube results and improves file matching and post-processing logic for YouTube downloads.
2026-01-03 22:20:36 -08:00
Broque Thomas
ce67e64ff7 Update youtube_client.py 2026-01-03 14:57:43 -08:00
Broque Thomas
eaf33f6f6d just testing things 2026-01-03 13:10:37 -08:00
Broque Thomas
a62f2c34b9 Add Discover page help button and guide
Introduces a help button to the Discover page UI, styled for visibility and accessibility. Adds comprehensive help content explaining all Discover page features, including MusicMap integration, playlist types, seasonal content, and sync/download options.
2026-01-02 21:16:53 -08:00
Broque Thomas
e9a1797687 Add toggle button for download manager panel
Introduces a toggle button in the downloads header to show or hide the download manager side panel. The toggle state is persisted in localStorage, and responsive styles are added for better usability on small screens. Updates HTML structure, JavaScript initialization, and CSS for the new toggle functionality and improved mobile experience.
2026-01-02 11:20:22 -08:00
Broque Thomas
a8935ae8f5 Add $year variable support to file path templates
Introduces the $year variable for album, single, and playlist path templates, allowing users to include the release year in file organization. Updates the backend to extract and provide the year, adjusts the web UI to document the new variable, and updates validation logic to recognize $year as valid in templates.
2026-01-02 08:24:43 -08:00
Broque Thomas
3bd8c4f94c Update docker-compose.yml 2026-01-01 10:00:53 -08:00
Broque Thomas
61a698aefa Move database files to /app/data and use env var for path
Updated Dockerfile, entrypoint.sh, and Python code to store database files in /app/data instead of /app/database, avoiding conflicts with the Python package. The database path is now configurable via the DATABASE_PATH environment variable, improving flexibility for container deployments.
2026-01-01 09:53:39 -08:00
Broque Thomas
238788ca78 Add error handling to wishlist rescheduling
Wrapped calls to schedule_next_wishlist_processing in try/except blocks to prevent timer thread termination if scheduling fails. This improves robustness and ensures continuity of automatic wishlist processing cycles even in the event of scheduling errors.
2026-01-01 09:24:09 -08:00
Broque Thomas
105c53df35 Update README.md 2025-12-31 09:47:59 -08:00
Broque Thomas
8eb41a545c Update README.md 2025-12-31 09:39:17 -08:00
Broque Thomas
b426d9d1e4 Enhance search UI with dynamic glow and premium design
Increases Spotify search result limits for artists and albums. Adds dynamic glow effects to artist, album, and track cards in the UI using image-based colors. Significantly upgrades the CSS for enhanced dropdowns, cards, and lists with a premium, vibrant, and responsive design.
2025-12-30 22:29:50 -08:00
Broque Thomas
2d61b0d076 Update to v1.2 with enhanced search and matching
Bumps SoulSync version to 1.2, introducing a unified multi-source search system, a major overhaul of the matching engine for improved accuracy, and significant wishlist and quality-of-life improvements. Updates version info and UI elements to reflect the new release and its features.
2025-12-30 19:47:54 -08:00
Broque Thomas
6699740759 Update README.md 2025-12-30 19:34:30 -08:00
Broque Thomas
d64bcaf7ab Update web_server.py 2025-12-30 13:21:29 -08:00
Broque Thomas
ca130e5000 Update script.js 2025-12-30 11:43:43 -08:00
Broque Thomas
a07019851e Update web_server.py 2025-12-30 10:39:22 -08:00
Broque Thomas
c6d3475185 Update web_server.py 2025-12-30 10:34:20 -08:00
Broque Thomas
420044387e Add streaming for enhanced search tracks
Introduces a backend API endpoint and frontend logic to allow users to stream individual tracks directly from enhanced search results. Updates the UI to include a play button for each track, adjusts the search mode toggle to default to enhanced search, and refines related styles for improved user experience.
2025-12-29 18:13:50 -08:00
Broque Thomas
0bd1cab9e2 Improve enhanced search results toggle UX
Updated the enhanced search button to toggle showing/hiding previous results, with dynamic icon and text changes. Prevented duplicate event listeners by ensuring single initialization. Improved dropdown visibility logic and user feedback when no results are available.
2025-12-29 15:54:47 -08:00
Broque Thomas
0743070c84 Update style.css 2025-12-29 15:07:52 -08:00
Broque Thomas
8f15dc039d Convert track duration to milliseconds in search results
Updated the duration field in TrackResult to store duration in milliseconds instead of seconds, matching Spotify's expected format. This ensures consistency when integrating with services that use millisecond-based durations.
2025-12-29 14:54:28 -08:00
Broque Thomas
d20609c33b Add search bubble snapshot and download tracking system
Implements a persistent search bubble system for tracking album and track downloads in enhanced search. Adds backend API endpoints for saving and hydrating search bubble snapshots, frontend state management for search download bubbles, UI for displaying and managing active/completed downloads, and associated styles for search bubble cards. This enables users to resume and manage search downloads across page refreshes.
2025-12-29 14:33:59 -08:00
Broque Thomas
a431ec0bd6 Improve enhanced search UI and increase track results
Increased the number of tracks returned by enhanced search from 10 to 20. Updated CSS for enhanced search sections and artist cards to improve visual appearance, spacing, and responsiveness, including larger artist images, new backgrounds, and better layout for various screen sizes.
2025-12-29 12:37:05 -08:00
Broque Thomas
926de6d833 Update style.css 2025-12-29 12:14:21 -08:00
Broque Thomas
1d4fc3b96e include duration in unified search single results. 2025-12-29 11:02:37 -08:00
Broque Thomas
7272860696 Improve artist detail navigation and logging
Updated artist selection actions to log navigation events and use more direct navigation functions. Navigating to library artist details now uses navigateToArtistDetail, and Spotify artist details use selectArtistForDetail after a short delay, improving consistency and user experience.
2025-12-29 10:17:41 -08:00
Broque Thomas
a167a00a0a Add enhanced search with categorized dropdown UI
Implements an enhanced search endpoint in the backend that unifies Spotify and local database results, returning categorized artists, albums, and tracks. Updates the frontend with a new dropdown overlay for live search, debounced input, categorized result rendering, and direct integration with the main results area for album/track selection. Adds new CSS for the dropdown and result cards, and updates the Track dataclass to include image URLs for richer UI display.
2025-12-29 09:56:32 -08:00
Broque Thomas
14a5944ae1 Add enhanced search mode UI and retry logic for downloads
Introduces a search mode toggle in the downloads UI, allowing users to switch between basic and enhanced search modes. Adds new HTML structure, JavaScript logic, and CSS styles for the enhanced search interface (currently placeholder functionality). In the backend, implements a retry system for file discovery after download completion to handle race conditions, with cleanup of stale retry attempts to prevent memory leaks.
2025-12-28 22:24:23 -08:00
Broque Thomas
5d29131530 Add configurable Soulseek search timeout and buffer
Introduces 'search_timeout' and 'search_timeout_buffer' options to Soulseek settings in the config, backend, and web UI. The backend now uses these values to control search duration and polling, allowing users to fine-tune how long searches run and how long to wait for late results.
2025-12-28 21:02:01 -08:00
Broque Thomas
a2bdb93498 Improve matching logic and wishlist album display
Enhanced the music matching engine to use stricter version handling, rebalance title/artist/duration weights, and raise confidence thresholds to reduce false positives. Updated string normalization to better handle separators and special characters. In the web UI, improved album ID sanitization and added a placeholder for missing album images in the wishlist view.
2025-12-28 19:23:50 -08:00
Broque Thomas
31903990fa ensure listenbrainz is saved to db 2025-12-18 09:19:39 -08:00
Broque Thomas
cbe44faa1b Update web_server.py 2025-12-16 11:11:20 -08:00
Broque Thomas
b4e4d6f07a Update style.css 2025-12-15 21:39:40 -08:00
Broque Thomas
4c9f7f3b58 Fix wishlist modal overlay and enable vertical scrolling
Ensures the loading overlay is always hidden when opening the wishlist modal, including on error or early return. Updates CSS to allow vertical scrolling in the modal while keeping horizontal overflow hidden.
2025-12-15 11:21:17 -08:00
Broque Thomas
3c7659feac Improve wishlist track sorting robustness
Refactored the sorting logic to handle cases where 'spotify_data' may be a JSON string or have varying structures. This ensures consistent sorting by artist and track name, even with malformed or unexpected data formats.
2025-12-14 12:21:36 -08:00
Broque Thomas
b50f6c8d9f 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.
2025-12-13 08:32:42 -08:00
Broque Thomas
e9c9021db0 Add animated mosaic backgrounds to wishlist categories
Introduces a dynamic mosaic grid background with scrolling album covers for the wishlist category cards in the overview modal. Adds supporting JavaScript functions to extract unique cover images and generate the mosaic HTML, and updates CSS to style and animate the mosaic, including fallbacks and hover effects for improved visual appeal.
2025-12-12 23:02:28 -08:00
Broque Thomas
fca3e641dc Improve artist name extraction in wishlist selection
Enhanced the logic for extracting artist name and ID to handle both object and string formats from Spotify API and sanitized data. Added fallbacks to ensure artist information is correctly retrieved from multiple possible data structures.
2025-12-12 21:19:29 -08:00
Broque Thomas
4587022877 Remove source prefixes from playlist names
Eliminates hardcoded source prefixes (e.g., [Tidal], [YouTube], [Beatport], [ListenBrainz]) from playlist names in both backend and frontend code. Source detection is now handled via virtualPlaylistId prefixes, improving consistency and simplifying playlist name handling throughout the application.
2025-12-12 12:36:45 -08:00
Broque Thomas
8f30f0ab91 Enhance matched downloads with full Spotify metadata
Adds robust track-to-track matching for album and single downloads, enabling enhanced metadata enrichment using Spotify data. Updates both backend and frontend to support matching Soulseek tracks to Spotify tracks, sending full Spotify track objects for improved organization and post-processing. Simplifies context handling for simple downloads and removes legacy flags, ensuring more accurate and consistent metadata for matched downloads.
2025-12-12 07:13:53 -08:00
Broque Thomas
20d9ac6ec4 move search page downloads to transfer folder 2025-12-11 17:35:20 -08:00
Broque Thomas
c6c0a30ced Improve Spotify auth instructions for remote access
Adds detection for remote access during Spotify authentication and provides step-by-step instructions for users connecting remotely, including guidance on modifying the callback URL. Enhances user experience with styled HTML and a copy-to-clipboard button for the host IP.
2025-12-11 14:21:56 -08:00