Repository navigation
settings cleanup; un-ship Lidarr + Navidrome-DB cleanup; fix false 'installed' state; scale caps - #41
Merged
Conversation
…eanup, installed-state fix, scale caps
One PR. Answers: yes, removing the built-in Lidarr/Navidrome-DB-cleanup is
possible — they're un-shipped (catalog-only) per choice, rebuildable later as
plugins without core changes.
Settings cleanup (templates/settings.html, app.py, static/app.js):
- Removed the Lidarr Integration card + its API-key copy/rotate UI and the
/api/settings/rotate-key route.
- Removed dead legacy JS (navidrome test/scan/fix-splits handlers, copy/
rotate key) and the stale "queries Deezer" copy.
- Library Maintenance copy no longer claims Navidrome split repair.
- "Plugins & Extensibility" hub no longer hardcodes a plugin inventory
(stale by design); it describes essential vs Marketplace generically.
Un-ship (stop bundling; keep installable from the fnack-plugins catalog):
- Removed fnack.lidarr, fnack.clean-navidrome-artists and
fnack.fix-navidrome-splits from bundled_plugins/ (15 vendored remain).
- Removed the shipped Navidrome DB-direct split repair: navidrome plugin's
run_split_repair + consolidate_split_albums/run_auto_split_repair deleted,
/api/navidrome/fix-splits route removed, maintenance no longer invokes it.
DB cleanup stays possible via the catalog plugins / a future plugin.
fnack-plugins navidrome plugin synced + repackaged; v1.0.0 release asset
clobbered (sha verified).
- Context helpers (queue_lidarr_grab, search_albums, ...) stay — the catalog
plugins still use them.
Installed-state fix (plugins/registry.py + startup reconciliation):
- Marketplace "installed" is now derived from PHYSICALLY present plugin dirs
(bundled or /config/plugins), not orphaned InstalledPlugin rows — plugins
from older images that no longer ship no longer appear "installed from the
official repo" when their code is absent.
- Startup removes orphan InstalledPlugin rows (present-only reconciliation).
Scale (targeted; full dashboard pagination is a follow-up):
- /api/artists always returns {total, artists, truncated} with a default
page of 1000 — an unbounded bare array can never be produced; `q=` does
server-side name filtering.
- Dashboard fetches page 1 and the grid filter now searches server-side
across the whole library (debounced) instead of shipping every artist;
count label + no-match vs empty states.
- download_jobs gains (status, created_at) and (status, updated_at)
composite indexes (model + migration) so the queue page stays indexed.
Tests: architecture 23/23 (navidrome/media-server/phase3 tests updated to
assert the un-shipped invariant), smoke PASSED, schema-migration PASSED.
Live: stale rows reconciled (InstalledPlugin 5 = the 4 essential +
marketplace-installed musicbrainz), Marketplace marks only real installs as
installed, un-shipped catalog plugins install/load/uninstall cleanly, artists
API returns the paginated shape, Settings page loads without the removed
sections.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
One PR answering all four asks. Yes — removing the built-in Lidarr API thing is possible (and the Navidrome-DB cleanup too): both are un-shipped per your choice (kept installable from the fnack-plugins catalog, free to rebuild later as your own plugins — no core change needed).
Settings cleanup
/api/settings/rotate-keyroute.Un-ship (catalog-only, still installable)
fnack.lidarr,fnack.clean-navidrome-artists,fnack.fix-navidrome-splitsremoved frombundled_plugins/(15 vendored remain). Still fully listed in the fnack-plugins Marketplace — verified install/load/uninstall live.run_split_repair/consolidate_split_albumsdeleted,/api/navidrome/fix-splitsroute removed, maintenance no longer invokes it. Navidrome plugin keeps media.scan/health/connection_test. fnack-plugins synced + repackaged (release asset clobbered, sha verified).queue_lidarr_grab,search_albums, …) stay."Installed from official repo even when not" — fixed
InstalledPluginrows — plugins an older image auto-installed but which no longer ship no longer show as installed.InstalledPlugindropped to the 5 actually present (4 essential + marketplace-installed musicbrainz).Scale (targeted pass)
/api/artistsalways returns{total, artists, truncated}with a default 1000-artist page — no unbounded payloads;q=filters server-side.download_jobsgains(status, created_at)+(status, updated_at)composite indexes (model + migration) so the queue page stays indexed at millions of rows.Verification
Architecture 23/23 (navidrome/media-server/phase3 tests updated to assert the un-shipped invariant — not weakened), smoke PASSED, schema-migration PASSED. Live: reconciled rows, correct Marketplace badges, un-shipped plugins installable, paginated artists API, cleaned Settings page.
Follow-up commit
6fcf911: removed the core Library Maintenance schedule / "Run Maintenance Now" from Performance & Automation (settings UI + key + auto-spawn at boot/periodic +/api/maintenance/run). Library cleanup is now plugin-maintained (library.task plugins / future plugins); core scripts + tag_normalization_service stay so plugins can call them. No fnack-plugins changes. Failed-song auto-retry settings retained. Verified live: no maintenance controls, route 404, no boot spawn.