Skip to content

Commit

Permalink
useLAN option, hook up replay to host
Browse files Browse the repository at this point in the history
also remove autoUSB and scrollToBottom options
  • Loading branch information
jmlee337 committed Jan 29, 2025
1 parent 8203ad3 commit eda7f6c
Show file tree
Hide file tree
Showing 7 changed files with 222 additions and 183 deletions.
28 changes: 20 additions & 8 deletions src/main/host.ts
Original file line number Diff line number Diff line change
Expand Up @@ -174,6 +174,12 @@ export function connectToHost(newAddress: string) {
};
}

export function disconnectFromHost() {
if (webSocket) {
webSocket.close();
}
}

export function getHost(): CopyRemote {
return { address, name };
}
Expand Down Expand Up @@ -275,7 +281,7 @@ export function openReplay(subdir: string, fileName: string) {
webSocket?.removeEventListener('message', listener);
if (error) {
reject(new Error(error));
} else if (Number.isFinite(fd)) {
} else if (Number.isInteger(fd)) {
resolve(fd);
}
}
Expand All @@ -293,7 +299,7 @@ export function openReplay(subdir: string, fileName: string) {
}

export function writeReplayData(fd: number, data: Buffer) {
return new Promise<void>((resolve, reject) => {
return new Promise<number>((resolve, reject) => {
if (!webSocket) {
reject();
return;
Expand All @@ -307,13 +313,15 @@ export function writeReplayData(fd: number, data: Buffer) {
return;
}

const { ordinal, error } = JSON.parse(event.data) as HostResponse;
const { ordinal, error, bytesWritten } = JSON.parse(
event.data,
) as HostResponse & { bytesWritten: number };
if (ordinal === requestOrdinal) {
webSocket?.removeEventListener('message', listener);
if (error) {
reject(new Error(error));
} else {
resolve();
} else if (Number.isInteger(bytesWritten)) {
resolve(bytesWritten);
}
}
};
Expand Down Expand Up @@ -564,9 +572,10 @@ export function startHostServer(): Promise<string> {
const filePath = path.join(writeDir, hostRequest.fileName);
const fileHandle = await open(filePath, 'w');
fdToFileHandle.set(fileHandle.fd, fileHandle);
const response: HostResponse = {
const response: HostResponse & { fd: number } = {
ordinal: hostRequest.ordinal,
error: '',
fd: fileHandle.fd,
};
newWebSocket.send(JSON.stringify(response));
} catch (e: unknown) {
Expand All @@ -590,10 +599,13 @@ export function startHostServer(): Promise<string> {
}

try {
await fileHandle.write(Buffer.from(hostRequest.data));
const response: HostResponse = {
const writeResponse = await fileHandle.write(
Buffer.from(hostRequest.data),
);
const response: HostResponse & { bytesWritten: number } = {
ordinal: hostRequest.ordinal,
error: '',
bytesWritten: writeResponse.bytesWritten,
};
newWebSocket.send(JSON.stringify(response));
} catch (e: unknown) {
Expand Down
74 changes: 22 additions & 52 deletions src/main/ipc.ts
Original file line number Diff line number Diff line change
Expand Up @@ -52,6 +52,7 @@ import {
} from './challonge';
import {
connectToHost,
disconnectFromHost,
getHost,
setCopyDir,
setMainWindow,
Expand All @@ -65,29 +66,9 @@ import {

export default function setupIPCs(mainWindow: BrowserWindow): void {
const store = new Store();
let autoDetectUsb = store.has('autoDetectUsb')
? (store.get('autoDetectUsb') as boolean)
: true;
let replayDirs: string[] = [];
const onInsertEjectFallback = (e: any) => {
if (replayDirs.length > 0) {
const currentDir = replayDirs[replayDirs.length - 1];
if (
(e.event === 'eject' || e.data.isAccessible) &&
(currentDir === e.data.key ||
currentDir.startsWith(`${e.data.key}${path.sep}`))
) {
mainWindow.webContents.send('usbstorage', currentDir);
}
}
};
const knownUsbs = new Map<string, boolean>();
const onInsert = (e: any) => {
if (!autoDetectUsb) {
onInsertEjectFallback(e);
return;
}

if (e.data.isAccessible) {
knownUsbs.set(e.data.key, true);
replayDirs.push(path.join(e.data.key, 'Slippi'));
Expand All @@ -98,11 +79,6 @@ export default function setupIPCs(mainWindow: BrowserWindow): void {
}
};
const onEject = (e: any) => {
if (!autoDetectUsb) {
onInsertEjectFallback(e);
return;
}

knownUsbs.delete(e.data.key);
replayDirs = replayDirs.filter(
(dir) =>
Expand Down Expand Up @@ -203,12 +179,14 @@ export default function setupIPCs(mainWindow: BrowserWindow): void {
writeDisplayNames: boolean,
context: Context | undefined,
) => {
if (!copyDir) {
const host = getHost();
if (!host.address && !host.name && !copyDir) {
throw new Error('copy dir not set');
}

return writeReplays(
copyDir,
host,
fileNames,
output,
replays,
Expand Down Expand Up @@ -271,6 +249,9 @@ export default function setupIPCs(mainWindow: BrowserWindow): void {
connectToHost(address),
);

ipcMain.removeHandler('disconnectFromHost');
ipcMain.handle('disconnectFromHost', () => disconnectFromHost);

ipcMain.removeHandler('startHostServer');
ipcMain.handle('startHostServer', startHostServer);

Expand Down Expand Up @@ -574,35 +555,24 @@ export default function setupIPCs(mainWindow: BrowserWindow): void {
},
);

ipcMain.removeHandler('getAutoDetectUsb');
ipcMain.handle('getAutoDetectUsb', () => autoDetectUsb);

ipcMain.removeHandler('setAutoDetectUsb');
ipcMain.handle(
'setAutoDetectUsb',
(event: IpcMainInvokeEvent, newAutoDetectUsb: boolean) => {
store.set('autoDetectUsb', newAutoDetectUsb);
autoDetectUsb = newAutoDetectUsb;
},
);

ipcMain.removeHandler('getScrollToBottom');
ipcMain.handle('getScrollToBottom', () => {
if (store.has('scrollToBottom')) {
return store.get('scrollToBottom') as boolean;
ipcMain.removeHandler('getUseLAN');
ipcMain.handle('getUseLAN', () => {
if (store.has('useLAN')) {
return store.get('useLAN') as boolean;
}
store.set('useLAN', false);
return false;
});
ipcMain.removeHandler('setUseLAN');
ipcMain.handle('setUseLAN', (event, newUseLAN: boolean) => {
store.set('useLAN', newUseLAN);
if (!newUseLAN) {
stopListening();
stopBroadcasting();
stopHostServer();
}
store.set('scrollToBottom', true);
return true;
});

ipcMain.removeHandler('setScrollToBottom');
ipcMain.handle(
'setScrollToBottom',
(event: IpcMainInvokeEvent, newScrollToBottom: boolean) => {
store.set('scrollToBottom', newScrollToBottom);
},
);

ipcMain.removeHandler('getUseEnforcer');
ipcMain.handle('getUseEnforcer', () => {
if (store.has('useEnforcer')) {
Expand Down
13 changes: 5 additions & 8 deletions src/main/preload.ts
Original file line number Diff line number Diff line change
Expand Up @@ -68,6 +68,8 @@ const electronHandler = {
},
connectToHost: (address: string): Promise<void> =>
ipcRenderer.invoke('connectToHost', address),
disconnectFromHost: (): Promise<void> =>
ipcRenderer.invoke('disconnectFromHost'),
onCopyHost: (
callback: (event: IpcRendererEvent, host: CopyRemote) => void,
) => {
Expand Down Expand Up @@ -151,14 +153,9 @@ const electronHandler = {
getManualNames: (): Promise<string[]> => ipcRenderer.invoke('getManualNames'),
setManualNames: (names: string[]): Promise<void> =>
ipcRenderer.invoke('setManualNames', names),
getAutoDetectUsb: (): Promise<boolean> =>
ipcRenderer.invoke('getAutoDetectUsb'),
setAutoDetectUsb: (autoDetectUsb: boolean): Promise<void> =>
ipcRenderer.invoke('setAutoDetectUsb', autoDetectUsb),
getScrollToBottom: (): Promise<boolean> =>
ipcRenderer.invoke('getScrollToBottom'),
setScrollToBottom: (scrollToBottom: boolean): Promise<void> =>
ipcRenderer.invoke('setScrollToBottom', scrollToBottom),
getUseLAN: (): Promise<boolean> => ipcRenderer.invoke('getUseLAN'),
setUseLAN: (useLAN: boolean): Promise<void> =>
ipcRenderer.invoke('setUseLAN', useLAN),
getUseEnforcer: (): Promise<boolean> => ipcRenderer.invoke('getUseEnforcer'),
setUseEnforcer: (useEnforcer: boolean): Promise<void> =>
ipcRenderer.invoke('setUseEnforcer', useEnforcer),
Expand Down
Loading

0 comments on commit eda7f6c

Please sign in to comment.