feat(frontend): add library paged types, syncStatus/triggerSync/admin API methods
This commit is contained in:
@@ -19,6 +19,9 @@ import type {
|
||||
ProviderTestResult,
|
||||
ConfigSnapshot,
|
||||
ScheduleHistoryEntry,
|
||||
LibrarySyncLogEntry,
|
||||
PagedLibraryResponse,
|
||||
AdminSettings,
|
||||
} from "@/lib/types";
|
||||
|
||||
const API_BASE =
|
||||
@@ -235,6 +238,35 @@ export const api = {
|
||||
if (provider) params.set("provider", provider);
|
||||
return request<LibraryItemResponse[]>(`/library/items?${params}`, { token });
|
||||
},
|
||||
|
||||
syncStatus: (token: string): Promise<LibrarySyncLogEntry[]> =>
|
||||
request('/library/sync/status', { token }),
|
||||
|
||||
triggerSync: (token: string): Promise<void> =>
|
||||
request('/library/sync', { method: 'POST', token }),
|
||||
|
||||
itemsPage: (
|
||||
token: string,
|
||||
filter: Partial<{
|
||||
q: string; type: string; series: string[]; genres: string[]; collection: string;
|
||||
provider: string; decade: number; min_duration: number; max_duration: number;
|
||||
offset: number; limit: number;
|
||||
}>
|
||||
): Promise<PagedLibraryResponse> => {
|
||||
const params = new URLSearchParams();
|
||||
if (filter.q) params.set('q', filter.q);
|
||||
if (filter.type) params.set('type', filter.type);
|
||||
if (filter.series) filter.series.forEach(s => params.append('series[]', s));
|
||||
if (filter.genres) filter.genres.forEach(g => params.append('genres[]', g));
|
||||
if (filter.collection) params.set('collection', filter.collection);
|
||||
if (filter.provider) params.set('provider', filter.provider);
|
||||
if (filter.decade != null) params.set('decade', String(filter.decade));
|
||||
if (filter.min_duration != null) params.set('min_duration', String(filter.min_duration));
|
||||
if (filter.max_duration != null) params.set('max_duration', String(filter.max_duration));
|
||||
params.set('offset', String(filter.offset ?? 0));
|
||||
params.set('limit', String(filter.limit ?? 50));
|
||||
return request(`/library/items?${params}`, { token });
|
||||
},
|
||||
},
|
||||
|
||||
files: {
|
||||
@@ -266,6 +298,17 @@ export const api = {
|
||||
activity: (token: string) =>
|
||||
request<ActivityEvent[]>("/admin/activity", { token }),
|
||||
|
||||
getSettings: (token: string): Promise<AdminSettings> =>
|
||||
request('/admin/settings', { token }),
|
||||
|
||||
updateSettings: (token: string, patch: Partial<AdminSettings>): Promise<AdminSettings> =>
|
||||
request('/admin/settings', {
|
||||
method: 'PUT',
|
||||
token,
|
||||
body: JSON.stringify(patch),
|
||||
headers: { 'Content-Type': 'application/json' },
|
||||
}),
|
||||
|
||||
providers: {
|
||||
getProviders: (token: string) =>
|
||||
request<ProviderConfig[]>("/admin/providers", { token }),
|
||||
|
||||
Reference in New Issue
Block a user