feat: data lifecycle rewrite, download clients, wanted list, and central catalog index
Build & publish Arch package / arch-package (push) Successful in 2m12s
Search index maintenance / maintain-index (push) Successful in 2h22m28s

Ships the fresh-start schema cleanup: rebuilt explore catalog index
pipeline (dump import, artifact fetch/build, incremental listen-count
refresh), a new download subsystem (Lidarr/Prowlarr/qBittorrent/SABnzbd/
slskd/yt-dlp providers, staging, reconciliation, wanted list), and the
supporting schema/query/store changes across backend and frontend.

Also includes two smaller follow-ups: bump the central index's
rebuild-after cadence from 90 to 180 days, and remove the Explore
"library only" online/offline toggle entirely (frontend-only, no
backend counterpart) rather than carry unused UI/state.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Y2Agd9af5hE7qzti2ackiS
This commit is contained in:
2026-08-06 17:12:01 -04:00
co-authored by Claude Sonnet 5
parent d0d86f85d5
commit e190fd75b9
165 changed files with 31088 additions and 5192 deletions
+2 -22
View File
@@ -23,6 +23,7 @@ import '@components/autotag-view/autotag-view.ts';
import '@components/first-run-wizard/first-run-wizard.ts';
import '@components/jobs/job-indicator.ts';
import '@components/jobs/jobs-view.ts';
import '@components/wanted-view/wanted-view.ts';
import '@awesome.me/webawesome/dist/styles/themes/default.css';
import '@awesome.me/webawesome/dist/components/icon/icon.js';
import { setBasePath } from '@awesome.me/webawesome/dist/webawesome.js';
@@ -36,7 +37,6 @@ import '@store/theme-store';
// Importing the keyboard shortcut service triggers initialization:
// registers the document keydown listener for global shortcuts.
import './src/services/keyboard-shortcut-service';
import { exploreSettings } from '@store/explore-settings';
import {
hasTrackPayload,
getDragPayload,
@@ -64,6 +64,7 @@ const VIEW_TAGS: Record<string, string> = {
playlists: 'playlist-view',
explore: 'explore-view',
autotag: 'autotag-view',
wanted: 'wanted-view',
jobs: 'jobs-view',
settings: 'config-page',
};
@@ -310,24 +311,3 @@ if (queueButton && queuePanel) {
// or timing assumptions needed.
void Player.EmitCurrentState();
void Queue.EmitCurrentState();
// ---------------------------------------------------------------------------
// Library Only toggle
// ---------------------------------------------------------------------------
const libraryOnlyToggle = document.getElementById('library-only-toggle');
if (libraryOnlyToggle) {
// Sync initial state.
if (exploreSettings.libraryOnly) {
libraryOnlyToggle.classList.add('active');
}
libraryOnlyToggle.addEventListener('click', () => {
exploreSettings.toggle();
libraryOnlyToggle.classList.toggle('active', exploreSettings.libraryOnly);
});
exploreSettings.subscribe(() => {
libraryOnlyToggle.classList.toggle('active', exploreSettings.libraryOnly);
});
}