53 Commits

Author SHA1 Message Date
shaunrd0 23c9125ad8 Personal fork of habirabbu/musicseerr — multi-instance + inline downloads + lidarr-request
Backend CI / Lint (push) Waiting to run
Backend CI / Tests (push) Waiting to run
Squashes 26 incremental fork commits (Apr–May 2026) onto upstream main as a single
diff for cleaner cross-fork comparison. Original history preserved on the
pre-squash-backup tag locally.

Feature additions
─────────────────

• Inline single-track download via yt-dlp-worker proxy
  New routes: POST /api/v1/track-download/search (source: youtube | spotify),
  POST /api/v1/track-download, GET /api/v1/track-download/{id}. Frontend
  TrackDownloadButton in album track list AND popular-songs row, with a per-button
  source picker. Per-user rate limits live in the worker's SQLite store. On
  completion the backend fires Lidarr RefreshArtist + Plex library refresh +
  cache invalidation, and the popular-songs list auto-refreshes.

• Per-instance library pinning via MUSICSEERR_LIBRARY env
  Backend stamps the library label server-side (music / music-personal /
  music-shared); clients cannot override. Drives an instance-segregated
  deployment of three musicseerr containers sharing one source tree.

• Lidarr-request flow (single-track requests via Lidarr indexers)
  New routes: POST /api/v1/lidarr-request, GET /api/v1/lidarr-request/status.
  Per-album asyncio.Lock keyed on album_mbid so rapid-clicks on the same album
  serialize correctly. Cross-release track matcher with foreignTrackId →
  foreignRecordingId → position+disc → exact-title → substring fallback chain,
  evaluated per release (recording UUIDs frequently differ between album,
  single, and deluxe edition releases of the same song). Flips
  artist.monitored = True on request so Lidarr's WantedAlbums query reaches
  the track. Full Lidarr-chain gate (artist AND album AND track) for the
  status endpoint to avoid false-positive REQUESTED display. Persistent UI
  state so button icons survive refresh and cross-album navigation.

• Privacy: show_now_playing toggle in Settings → Home
  Default off. Plex /status/sessions returns active audio sessions across the
  whole server with no library-section filter, so a shared instance leaks
  every household member's listening activity. The merged store still emits
  the user's local MusicSeerr playback bar; only server-derived sessions
  (Plex / Jellyfin / Navidrome) are gated.

• Per-button visibility prefs for the track-row action cluster
  Settings → Preferences → Download Options / Playback Buttons. Per-context
  (popular_songs / album_page) force-off flags layered on top of the existing
  source-availability gate.

• UX: wrap action cluster on mobile, hide LidarrRequestButton in tight
  layouts, cross-album status-leak fix in AlbumTrackList ($effect keyed on
  album.musicbrainz_id to rebuild lookup; map keyed by
  "{albumMbid}:{position}:{disc}").

Test coverage
─────────────

Backend pytest: full suite green (2031/2031 as of squash). New: schema-default
tests for HomeSettings, lidarr_request_service cross-release matcher
regression test, singleton-registry expected-count bump to 59. Frontend
vitest: SettingsHome.svelte.spec covers new toggle, nowPlayingSessions
.svelte.spec covers the privacy gate (no fetch when off; fetches when on).
2026-05-29 23:55:54 +00:00
Harvey e70a76f489 Failed to verify fix + reactivity & polling fixes for multi downloads 2026-04-19 03:18:50 +01:00
Harvey a63008c298 make lint + improve makefile 2026-04-18 23:12:53 +01:00
Harvey 4f4591fb96 plex deadlock + version showing stale + "disco" screen after docker update fixes 2026-04-18 23:03:13 +01:00
Harvey 10c593b254 Add Funding yml 2026-04-18 14:18:56 +01:00
Harvey 789be2c77d Add to dockerhub 2026-04-18 14:14:40 +01:00
Harvey 4736ed4668 What's new version fix 2026-04-18 02:42:01 +01:00
Harvey 2d98c5f17d fix lint 2026-04-18 02:36:57 +01:00
Harvey 2032f8385c Update whats new modal logic 2026-04-18 02:34:24 +01:00
Harvey 3cef59f257 Fix music source hero cards 2026-04-18 02:29:38 +01:00
Harvey 02c34cbe6f Couple of Discover page tweaks 2026-04-18 01:24:50 +01:00
Harvey 28f76c8db3 run checks 2026-04-18 01:05:41 +01:00
Harvey 89405d1c78 Download albums/tracks from local files (#56)
* download albums/tracks from local files

* checks
2026-04-17 23:59:05 +00:00
Harvey 351f31dff6 quick fix - user agent + rate limit cap 2026-04-18 00:58:37 +01:00
Harvey 7fd6bb83bd Discover page improvements + playlists albums changes (#55)
* MUS-42 Discover page improvements + playlist/album changes + various discovery fixes + tanstack query stuuff + placeholder image fix

* fix formatter truncate

* fix tests

* make lint

* fix make ci errors

* address copilot
2026-04-17 23:46:52 +00:00
Harvey d4d38e5392 Artist playback + Artist downloads + release pref fix + Lyrics button fix + preference toggles 2026-04-16 23:11:22 +01:00
Harvey 3a393161f7 Allow adding custom musicbrainz api endpoint (#53)
* allow adding custom musicbrainz api endpoints

* make format
2026-04-16 12:53:14 +00:00
Harvey 1e7da40fef Version Info + Notifier (#51) 2026-04-16 00:51:24 +01:00
Harvey d24e26fb32 In library rework + Monitored/Unmonitored statuses (#50)
* In library rework + Monitored/Unmonitored statuses

* address comments + format
2026-04-16 00:51:13 +01:00
Harvey 6ca23bc725 make format 2026-04-14 12:35:12 +01:00
Harvey 407fd18b69 Various FE fixes 2026-04-14 12:33:02 +01:00
Harvey fd2be0ddd5 new backend pagination approach (#49)
* new backend pagination approach

* prettier
2026-04-14 09:59:08 +01:00
Harvey a69a26852e Cut down unnecessary logging (#48)
* Cut down unnecessary logging

* fix format etc

* fix checks

* fix tests
2026-04-14 00:02:38 +01:00
Harvey 0f25ebc26d Plex Integration + Music Source Integration Improvements (#37)
* plex integration

* The big one - Full Music Source page rework + Playlist importing + Full Plex Integration + Discovery Options + More Like This/Surprise Me/Instant Mix + More...

* Music source track page - Play all / shuffle fixes

* lint

* format

* fix type checks

* format
2026-04-13 23:39:01 +01:00
Arno 90b7b67a10 refactor: tanstack query - artist page (#42)
* refactored artist page

* remove unnecessary types

* remove log

* remove old artistCache

* fixed reviewed suggestions

* invalidate artist queries when changing release prefs
2026-04-13 23:34:49 +01:00
Arno e523f2ccca refactor: musicSource in popular, trending & your-top pages (#45)
* refactor: musicSource in popular page

* refactor: remove musicSourceStore from trending and yourTop pages

* replace original SourceSwitcher
2026-04-13 13:53:57 +01:00
Harvey 3cf6b6cf9b last.fm settings issue fix (#47)
* last.fm settings issue fix

* format + add make format
2026-04-13 13:28:59 +01:00
Arno 63ccf03dac refactor: Prototype of tanstack-query (#34)
* move getApiUrl to api folder

* adjust imports

* tanstack-query example with homeData

* small adjustments

* fix key collision

* new MusicSource persistent mechanism example

* add error handling & set sveltekit to SPA mode

* remove unnecessary ssr test
2026-04-11 13:46:07 +01:00
david-almagro e74ff3b3c4 fix: lastfm form hiding before being able to save (#38) 2026-04-10 00:04:20 +01:00
Harvey 21e1abc2b5 chore: update Unraid template category and add UMASK config 2026-04-08 14:45:25 +01:00
Harvey 4d78000673 hotfix: remove playwright from ci 2026-04-08 02:18:58 +01:00
Harvey 4ca1fdfd41 workflow improvements 2026-04-08 02:13:54 +01:00
Harvey 31e0412232 favicon + ci workflow + makefile changes (#33)
* favicon + ci workflow + makefile changes

* fix lint

* run workflows on any branch/pr

* fix workflow
2026-04-08 02:06:17 +01:00
Harvey df779c9e6d Mus 19 library sync completing with issues (#29)
* fix: Sync issues - AudioDB warmig +  automatic sync skips

* progress ui/ux + discovery and album fixes

* artist fixes

* several request level fixes and improvements

* handle request fails + artist refresh + resilience fixes

* fix format

* fix stop sync fail + last.fn mbid issues + failures/validation reworks
2026-04-08 00:29:36 +01:00
Harvey 343bafd7f4 feat: Requests / Add to Library Rework - Unmonitored album default + … (#25)
* feat: Requests / Add to Library Rework - Unmonitored album default + Resilience

* checking for source + refresh album logic

* artist monitoring + auto downloading + various request fixes

* synchronous album requests

* format
2026-04-06 23:08:58 +01:00
Arno a3e0b2f65a chore: Svelte 5 migration & lint & type fixes (#24)
* fix formatting

* apply svelte-5 migration script

* use derived.by

* format again

* fix lint errors

* fix check errors

* fix unnecessary use of dismissedVersion

* add frontend CI

* set working dir to frontend

* fix working dir?

* and fix script names

* revert debug change

* add concurrency block & adjust pnpm cache-dependency-path
2026-04-06 12:45:43 +01:00
jma1ice de3cf7531f Request api racing fixes (#19)
* * added artist to lidarr/album.py payload to prevent lidarr error
* added images: [] to lidarr/album.py payload to prevent lidarr NOT NULL constraint
* moved _wait_for_artist_commands_to_complete() to before album is indexed to avoid race
* removed check for releases in album_is_indexed as not all albums return from lidarr with releases
* focused in error message on metadata profile exclusions to give more accurate error messaging
* increased poll time for album_is_indexed to 5 seconds to reduce load on lidarr
* added handling for when cmd_artist_ids is a single int instead of a list

* * replaced original `_wait_for_artist_commands_to_complete` and moved earlier call into `if not album_obj`
* replaced original clean Metadata Profile error messaging and added `logger.debug()` for raw error message from Lidarr
2026-04-05 17:31:18 +01:00
Harvey 6855adc0af hotfix: prevent duplicate artist discovery precache execution (#23) 2026-04-05 17:21:30 +01:00
Arno 87d56c2171 chore: switch from npm to pnpm (#20)
* chore: switch from npm to pnpm

* fix more references

* fixed some more stragglers

* add missing exec
2026-04-05 16:22:26 +01:00
Arno 70809b3d7d chore: adjustments for local development without containers (#21)
* chore: adjustments for local development without containers

* update Contributing.md

* remove dev section from readme and link to contributing doc

* move settings import to runtime
2026-04-05 16:18:56 +01:00
Harvey e84f2d6127 feat: robust library sync with adaptive watchdog, resume-on-failure &… (#22)
* feat: robust library sync with adaptive watchdog, resume-on-failure & parallel pre-warming

* update copy
2026-04-05 15:36:42 +01:00
Nat Welch e76ed59b44 fix: add timeout (#16)
* fix: add timeout

* review adjustments
2026-04-05 03:13:37 +01:00
Harvey 48c0a94a47 fix: increase sync time default/max + minimizable sync notif (#12) 2026-04-05 02:52:28 +01:00
Harvey 687a925545 Mus 10 issue playing music from jellyfin (#11)
* fix: proxy Jellyfin audio streams through backend to fix Docker playback

* fix: supportsShuffle on Jellyfin
2026-04-04 17:03:17 +01:00
Harvey d2893b93f2 fix: catch CircuitOpenError in stats fallback (#10) 2026-04-04 15:43:12 +01:00
Harvey c696eae987 fix: navidrome subsonic api errors incorrectly tripping circuit breaker (#9) 2026-04-04 15:32:52 +01:00
Harvey c141b9fcdf Unraid/Nas Entrypoint.sh hardening + unraid xml template (#4)
* Unraid/Nas Entrypoint.sh hardening + unraid xml template

* further entrypoint.sh hardening
2026-04-04 13:45:00 +01:00
Harvey eed1ce700d fix: resolve Lidarr library scan failures after settings change 2026-04-04 01:10:59 +01:00
Harvey 491947ecab fix - count circuit breaker failures per logical call NOT per retry + actionable errors and placeholder in lidarr connection test 2026-04-03 23:49:50 +01:00
Harvey d65e1a7971 update discord link 2026-04-03 17:59:15 +01:00