feat(library): local lossless index, filters, and conserve dedicated page (#871)

* feat(library): local lossless index, filters, and conserve dedicated page

Add SQLite-backed lossless album browse and advanced-search filtering,
wire All Albums and artist/album lossless drill-down mode, and hide the
standalone /lossless-albums nav entry from sidebar visibility settings
(conserved route, default off).

* docs(release): note lossless local index in CHANGELOG and credits (PR #871)
This commit is contained in:
cucadmuh
2026-05-27 00:02:46 +03:00
committed by GitHub
parent 418b25914a
commit a8cfff0b62
65 changed files with 1615 additions and 138 deletions
@@ -12,6 +12,7 @@ const opts = (over: Partial<Parameters<typeof runLocalAdvancedSearch>[1]> = {})
bpmFrom: '',
bpmTo: '',
moodGroup: '',
losslessOnly: false,
resultType: 'all' as const,
...over,
});
@@ -61,6 +62,25 @@ describe('runLocalAdvancedSearch', () => {
expect(captured).toMatchObject({ request: { libraryScope: 'lib7' } });
});
it('passes lossless is_true filter to library_advanced_search', async () => {
ready();
let captured: unknown;
onInvoke('library_advanced_search', (args) => {
captured = args;
return {
artists: [],
albums: [],
tracks: [],
totals: { artists: 0, albums: 0, tracks: 0 },
source: 'local',
};
});
await runLocalAdvancedSearch('s1', opts({ losslessOnly: true }), 100);
expect(captured).toMatchObject({
request: { filters: [{ field: 'lossless', op: 'is_true' }] },
});
});
it('passes bpm between filter to library_advanced_search', async () => {
ready();
let captured: unknown;