feat(search): add workspace global search with M3U support

Moves global search into a routed workspace view, adds M3U live/radio results, lazy pagination, and DB-backed matching improvements.
This commit is contained in:
4gray authored and GitHub committed 2026-06-20 23:05:48 +02:00
1 parent ffc07146fe
commit 89916af9d8
65 files changed
+3010 -391

No files matched your search

@@ -42,6 +42,15 @@ describe('workspace-shell-route.utils', () => {
usesQuerySearch: true,
})
);
expect(parseWorkspaceShellRoute('/workspace/search?q=matrix')).toEqual(
expect.objectContaining({
kind: 'global-search',
context: null,
contextPanel: 'none',
searchMode: 'remote-search',
usesQuerySearch: true,
})
);
expect(parseWorkspaceShellRoute('/workspace/downloads')).toEqual(
expect.objectContaining({
kind: 'downloads',
@@ -8,6 +8,7 @@ export type WorkspaceShellPageKind =
| 'downloads'
| 'global-favorites'
| 'global-recent'
| 'global-search'
| 'portal'
| 'settings'
| 'sources'
@@ -194,6 +195,10 @@ function resolveRouteSearchMode(
return 'local-filter';
}
if (kind === 'global-search') {
return 'remote-search';
}
if (kind === 'portal') {
return resolvePortalSearchMode(context, section);
}
@@ -288,9 +293,11 @@ export function parseWorkspaceShellRoute(url: string): WorkspaceShellRoute {
? 'global-favorites'
: page === 'global-recent'
? 'global-recent'
: page === 'downloads'
? 'downloads'
: 'unknown';
: page === 'search'
? 'global-search'
: page === 'downloads'
? 'downloads'
: 'unknown';
const searchMode = resolveRouteSearchMode(kind, null, null);
return {