Broque Thomas
2003e58358
Add Spotify rate limit guards to all repair jobs
...
Repair jobs were making Spotify API calls without checking the global
rate limit ban, causing them to churn through every item getting rejected
one by one during a ban. Now all Spotify calls in repair jobs check
context.is_spotify_rate_limited() first and skip/fallback gracefully.
- Add is_spotify_rate_limited() helper to JobContext (base.py)
- Guard calls in track_number_repair, album_completeness,
missing_cover_art, and metadata_gap_filler
- Jobs fall through to iTunes/MusicBrainz fallbacks when rate-limited
2026-03-15 16:01:48 -07:00
Broque Thomas
ab21855af3
Enrich repair findings with album art, artist images & live job progress
...
- All 9 repair jobs now emit report_progress() for real-time card updates
(phase, log lines, per-item activity) via WebSocket repair:progress events
- Enrich finding details with album/artist thumb URLs across all repair jobs
(dead_file, duplicate, metadata_gap, album_completeness, missing_cover_art,
acoustid_scanner, track_number_repair, fake_lossless, orphan_file)
- Track number repair: return match_score from fuzzy matching, add suffix-based
DB lookup for album/artist art (handles cross-environment path mismatches)
- Fix Plex/Jellyfin relative thumb URLs in findings endpoint via fix_artist_image_url
- Labeled media cards in finding detail panels (album title + artist name under images)
- Dashboard tooltip shows current job name + per-job progress instead of stale stats
2026-03-15 14:08:26 -07:00
Broque Thomas
f08550140f
Add whistle logo to maintenance modal header & harden fix handlers
...
- Add whisoul.png to modal header with subtitle text and gradient background
- Responsive: smaller logo on mobile, hide subtitle
- Share _resolve_file_path in repair_worker for cross-environment path compat
- Use path resolution in orphan and duplicate file deletion
- Guard directory cleanup against removing the transfer folder itself
- Restore correct button label text on fix error recovery
2026-03-15 13:25:40 -07:00
Broque Thomas
7a706e8c11
Add fix actions for maintenance findings (dead files, orphans, duplicates, etc.)
...
- New fix_finding() dispatcher in repair_worker with per-type handlers:
dead_file (remove DB entry), orphan_file (delete from disk),
track_number_mismatch (update DB), missing_cover_art (apply artwork URL),
metadata_gap (apply found fields), duplicate_tracks (keep best quality)
- New POST /api/repair/findings/<id>/fix endpoint
- Frontend: contextual fix buttons per finding type, bulk "Fix Selected"
- Removed path_mismatch from fixable types (dry-run preview only)
2026-03-15 12:51:18 -07:00
Broque Thomas
61ed4086e0
Redesign maintenance findings/history tabs with dashboard & fix path resolution bugs
...
- Add findings dashboard with summary stats and per-job clickable filter chips
- Redesign findings cards with expandable detail panels and per-type renderers
- Redesign history tab with status dots, stat pills, and full timestamps
- Fix dead file cleaner false positives by using suffix-based path resolution
- Fix orphan file detector false positives by matching via path suffixes
- Add help text modal for each repair job card
- Enlarge maintenance modal (1100px wide, 90vh tall)
2026-03-15 12:20:02 -07:00
Broque Thomas
4635ea895b
include a '?' to include more details for each job.
2026-03-15 11:19:09 -07:00
Broque Thomas
dab94ce65d
update soulsync repair worker with new jobs
2026-03-15 10:18:50 -07:00
Broque Thomas
264e696fe3
Fix per-profile ListenBrainz playlist cache scoping and stale data recovery
2026-03-14 21:11:59 -07:00
Broque Thomas
8f0b9518bc
Add per-profile ListenBrainz support with personal settings modal
2026-03-14 20:12:19 -07:00
Broque Thomas
60261f2e91
Fix watchlist scan failing entirely when Spotify is rate limited by adding iTunes provider fallback and missing rate limit ban detection
2026-03-14 14:58:12 -07:00
Broque Thomas
cf917279c2
Harden metadata cache: prevent simplified data from overwriting full entries, fix connection leaks, and add inline TTL enforcement
2026-03-14 13:39:12 -07:00
Broque Thomas
0b8bfa1e6b
Scope automation-triggered watchlist scans to the calling profile & Fix watchlist scan silently skipping all albums due to metadata cache returning incomplete data
2026-03-14 13:23:03 -07:00
Broque Thomas
c3eecc88ad
Retry Tidal download at lower quality when hi-res returns garbage file
2026-03-14 10:54:33 -07:00
Broque Thomas
363b3d0922
Fix MusicBrainz API call in metadata gap filler job
2026-03-14 09:46:02 -07:00
Broque Thomas
945f86c643
Library Repair Worker: multi-job background maintenance daemon with 10 jobs, findings system, and management modal
2026-03-14 09:09:18 -07:00
Broque Thomas
6de3ab7cef
Add universal metadata cache for Spotify & iTunes API responses with browsable dashboard tool
2026-03-14 01:26:45 -07:00
Broque Thomas
c54e52e18d
Add Spotify Library discovery section, instrumental filter, custom exclusion terms & album download modal fixes
2026-03-14 00:21:44 -07:00
Broque Thomas
a5e72cff05
Add instrumental filter & custom exclusion terms to watchlist content filters
2026-03-13 23:09:12 -07:00
Broque Thomas
e3fdb12d78
Preserve watchlist scan timestamps for UI display instead of wiping on lookback changes
2026-03-13 22:46:41 -07:00
Broque Thomas
32f1cc946c
Improve watchlist cross-provider matching accuracy and add manual artist linking UI
2026-03-13 22:28:13 -07:00
Broque Thomas
e5a6ac7821
Strip all parentheticals in AcoustID title normalization
2026-03-13 21:28:18 -07:00
Broque Thomas
a557074d3c
Add Spotify rate limit modal with live countdown and ban duration escalation
2026-03-13 15:36:24 -07:00
Broque Thomas
de2cc6db7a
Detect rate limits in methods that swallow 429 exceptions so the modal appears
2026-03-13 14:00:23 -07:00
Broque Thomas
c9549e8a9a
Fix iTunes discovery playlists: synthetic popularity, EP inclusion, and seasonal iTunes support
2026-03-13 13:52:32 -07:00
Broque Thomas
7da7f3b112
Cache similar artist metadata at scan time to eliminate redundant Spotify API calls
2026-03-13 13:35:54 -07:00
Broque Thomas
55186c6a51
Add Deezer playlist sync tab with discovery, fix modal, and cache persistence
2026-03-13 12:29:49 -07:00
Broque Thomas
d2a241cc04
Fix Tidal playlist sync dropping remix/version info from track titles
2026-03-12 21:12:34 -07:00
Broque Thomas
6c4de45b32
fix acoustID match issue and css changes
2026-03-12 16:43:22 -07:00
Broque Thomas
ded906bef4
Fix false positive track matching & tag writing visibility for library files
2026-03-12 16:08:44 -07:00
Broque Thomas
66e9457d0e
Stop unnecessary Spotify API call every 60s from enrichment status polling
2026-03-12 12:06:25 -07:00
Broque Thomas
822568a2d5
Fix automated scans for non-Plex servers & incremental scan performance
2026-03-12 11:17:32 -07:00
Broque Thomas
dc9a8a3845
Fix wrong track downloads when album name matches a track title in hybrid mode
2026-03-12 10:40:33 -07:00
Broque Thomas
5db10b552d
Fix Tidal/Qobuz enrichment backfill failing on dict-type copyright and isrc fields
2026-03-12 10:26:35 -07:00
Broque Thomas
f77066f9a7
Fix Spotify rate limit loop causing indefinite API call cycle during ban
2026-03-12 09:49:07 -07:00
Broque Thomas
917c25afd9
Fix Tidal OAuth — override Accept header on token requests to application/json
2026-03-12 09:35:36 -07:00
Broque Thomas
691e026208
Fix Tidal API search — correct endpoint casing, JSON:API Accept header, and best-match selection
2026-03-11 22:51:51 -07:00
Broque Thomas
ecfa30c918
Fix Tidal V2 search endpoint, duration parsing, and library badge display
2026-03-11 22:08:25 -07:00
Broque Thomas
cc35864e7d
Tidal & Qobuz Enrichment Workers - Bug Fixes & Rate Limiting
2026-03-11 21:49:31 -07:00
Broque Thomas
ac2c710a1e
Tidal & Qobuz Background Enrichment Workers
2026-03-11 21:26:20 -07:00
Broque Thomas
70c32aa640
Hybrid Mode Redesign
2026-03-11 18:10:35 -07:00
Broque Thomas
fb04d0f4bc
Full qobuz support
2026-03-11 17:43:27 -07:00
Broque Thomas
4390036556
Include Tidal version field in track names — fixes remixes all resolving to base title
2026-03-11 15:51:20 -07:00
Broque Thomas
d329dd4fe8
Fix Tidal playlist endpoints redundantly re-fetching all playlists — use direct single-playlist fetch
2026-03-11 13:50:53 -07:00
Broque Thomas
27bd896540
Use largest available Spotify album artwork instead of medium size
2026-03-11 12:59:23 -07:00
Broque Thomas
2930b5334e
Fix Tidal playlist pagination rate limiting — exponential backoff, inter-page delay, and HTTPError propagation
2026-03-11 12:49:02 -07:00
Broque Thomas
d452cd0a55
Validate Tidal downloads and clean up unplayable hi-res stubs
2026-03-11 11:59:13 -07:00
Broque Thomas
bc22bdca07
Fix infinite Spotify rate limit loop from unguarded auth probes and swallowed errors
2026-03-11 11:07:48 -07:00
Broque Thomas
bde2be1cfa
Spotify rate limit re-trigger loop caused by periodic auth probes
2026-03-11 08:28:36 -07:00
Broque Thomas
0aa8950436
fix build a playlist functionality and update the ui
2026-03-11 07:52:58 -07:00
Broque Thomas
603db69b10
Fix Genius 429 backoff by re-raising rate limit errors from _make_request
2026-03-10 15:46:37 -07:00