feat(discover): wire A4 search + A5 downloads to backend

Adds DownloadJob/ExternalSearchResult/SourceInfo contract types + mappers, the downloads + search RTKQ endpoints, and the SearchDownloadPage (search external sources, per-result download states) and DownloadsManagerPage (active/history, progress, retry/cancel, poll-while-active). en/ru i18n. Snapshot also bundles in-progress queue/metadata-editor/storage UI work.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
Senko-san
2026-06-14 14:04:43 +03:00
parent cdcacc56d1
commit 231887c3b7
23 changed files with 1168 additions and 91 deletions
+7 -1
View File
@@ -20,7 +20,13 @@ beforeEach(() => {
function apiStateWith(queries: Record<string, unknown>) {
return {
api: { queries, mutations: {}, provided: {}, subscriptions: {}, config: {} },
api: {
queries,
mutations: {},
provided: {},
subscriptions: {},
config: {},
},
} as unknown as RootState;
}
+3 -3
View File
@@ -7,9 +7,9 @@ import {
} from '../public/sw-core.js';
test('trackIdFromUrl extracts the content id from a stream URL', () => {
expect(
trackIdFromUrl('https://host/api/v1/stream/abc123?token=xyz'),
).toBe('abc123');
expect(trackIdFromUrl('https://host/api/v1/stream/abc123?token=xyz')).toBe(
'abc123',
);
expect(trackIdFromUrl('https://host/api/v1/library/albums')).toBeNull();
});