From 0e09aa16fe404f416f112bffa2a399ea49cc8b6f Mon Sep 17 00:00:00 2001 From: Nicolet Date: Fri, 7 Feb 2025 00:55:52 -0600 Subject: [PATCH] eject button (with debug console.log) #91 --- src/main/ipc.ts | 42 ++++++++++++++++++++++++++---------------- src/main/preload.ts | 1 + src/renderer/App.tsx | 12 ++++++++++++ 3 files changed, 39 insertions(+), 16 deletions(-) diff --git a/src/main/ipc.ts b/src/main/ipc.ts index 99e2ffd..f83766d 100644 --- a/src/main/ipc.ts +++ b/src/main/ipc.ts @@ -146,30 +146,40 @@ export default function setupIPCs(mainWindow: BrowserWindow): void { return chosenReplaysDir; }); + const maybeEject = (currentDir: string) => { + const key = Array.from(knownUsbs.keys()).find((usbKey) => + currentDir.startsWith(usbKey), + ); + if (key) { + return new Promise((resolve, reject) => { + eject(key, (error: Error, stdout: string | Buffer) => { + if (error) { + reject(error); + } else { + console.log(`ejected ${key}`); + console.log(stdout); + resolve(true); + } + }); + }); + } + return Promise.resolve(false); + }; + ipcMain.removeHandler('deleteReplaysDir'); ipcMain.handle('deleteReplaysDir', async () => { if (replayDirs.length > 0) { const currentDir = replayDirs[replayDirs.length - 1]; await rm(currentDir, { recursive: true }); - const key = Array.from(knownUsbs.keys()).find( - (usbKey) => - currentDir === usbKey || - currentDir.startsWith(`${usbKey}${path.sep}`), - ); - if (key) { - await new Promise((resolve, reject) => { - eject(key, (error: Error) => { - if (error) { - reject(error); - } else { - resolve(); - } - }); - }); - } + await maybeEject(currentDir); } }); + ipcMain.removeHandler('maybeEject'); + ipcMain.handle('maybeEject', () => + maybeEject(replayDirs[replayDirs.length - 1]), + ); + ipcMain.removeHandler('getReplaysInDir'); ipcMain.handle('getReplaysInDir', async () => { if (replayDirs.length === 0) { diff --git a/src/main/preload.ts b/src/main/preload.ts index a701e89..5238abc 100644 --- a/src/main/preload.ts +++ b/src/main/preload.ts @@ -27,6 +27,7 @@ const electronHandler = { chooseReplaysDir: (): Promise => ipcRenderer.invoke('chooseReplaysDir'), deleteReplaysDir: (): Promise => ipcRenderer.invoke('deleteReplaysDir'), + maybeEject: (): Promise => ipcRenderer.invoke('maybeEject'), getReplaysInDir: (): Promise<{ replays: Replay[]; invalidReplays: InvalidReplay[]; diff --git a/src/renderer/App.tsx b/src/renderer/App.tsx index a8cd863..93eb93f 100644 --- a/src/renderer/App.tsx +++ b/src/renderer/App.tsx @@ -28,6 +28,7 @@ import { DeleteForever, DeleteForeverOutlined, Edit, + Eject, FolderOpen, HourglassTop, Refresh, @@ -1450,6 +1451,17 @@ function Hello() { value={dir || 'Set replays folder...'} style={{ flexGrow: 1 }} /> + {dir && ( + + { + await window.electron.maybeEject(); + }} + > + + + + )} {dir && dirExists && !gettingReplays &&