feat: implement drive import functionality

This commit is contained in:
2025-11-12 06:18:06 +11:00
parent 69d98c1f1a
commit c2df7198bd
9 changed files with 752 additions and 35 deletions

View File

@@ -5,6 +5,7 @@ import type {
AudioBufferPayload,
AudioFileSummary,
CategoryRecord,
LibraryImportResult,
LibraryScanSummary,
SplitSegmentRequest,
TagUpdatePayload
@@ -26,9 +27,18 @@ const api: RendererApi = {
async rescanLibrary(): Promise<LibraryScanSummary> {
return ipcRenderer.invoke(IPC_CHANNELS.libraryScan);
},
async selectImportFolder(): Promise<string | null> {
return ipcRenderer.invoke(IPC_CHANNELS.dialogSelectImportFolder);
},
async listSystemDrives(): Promise<string[]> {
return ipcRenderer.invoke(IPC_CHANNELS.systemListDrives);
},
async listAudioFiles(): Promise<AudioFileSummary[]> {
return ipcRenderer.invoke(IPC_CHANNELS.libraryList);
},
async importExternalSources(paths: string[]): Promise<LibraryImportResult> {
return ipcRenderer.invoke(IPC_CHANNELS.libraryImport, paths);
},
/** Retrieves a single audio file summary by id, returning null when the record no longer exists. */
async getAudioFileById(fileId: number): Promise<AudioFileSummary | null> {
return ipcRenderer.invoke(IPC_CHANNELS.libraryGetById, fileId);
@@ -87,8 +97,8 @@ const api: RendererApi = {
): Promise<void> {
return ipcRenderer.invoke(IPC_CHANNELS.libraryUpdateMetadata, fileId, metadata);
},
onMenuAction(channel: string, callback: () => void): () => void {
const listener = () => callback();
onMenuAction(channel: string, callback: (payload?: unknown) => void): () => void {
const listener = (_event: Electron.IpcRendererEvent, payload?: unknown) => callback(payload);
ipcRenderer.on(channel, listener);
return () => ipcRenderer.removeListener(channel, listener);
}