1
0
Fork 0
mirror of https://gitlab.com/futo-org/fcast.git synced 2025-08-05 00:37:02 +00:00

Electron: Initial support for most of protocol v3

This commit is contained in:
Michael Hollister 2025-06-03 14:29:25 -05:00
parent a83f92d874
commit 72d5c10918
13 changed files with 764 additions and 216 deletions

View file

@ -1,6 +1,7 @@
/* eslint-disable @typescript-eslint/ban-ts-comment */
/* eslint-disable @typescript-eslint/no-explicit-any */
import { Logger, LoggerType } from 'common/Logger';
import { EventMessage } from 'common/Packets';
const logger = new Logger('MainWindow', LoggerType.FRONTEND);
// Cannot directly pass the object to the renderer for some reason...
@ -23,6 +24,10 @@ declare global {
}
let preloadData: Record<string, any> = {};
preloadData.subscribedKeys = {
keyDown: new Set<string>(),
keyUp: new Set<string>(),
};
// @ts-ignore
if (TARGET === 'electron') {
@ -32,13 +37,20 @@ if (TARGET === 'electron') {
electronAPI.ipcRenderer.on("device-info", (_event, value: any) => {
preloadData.deviceInfo = value;
})
electronAPI.ipcRenderer.on("event-subscribed-keys-update", (_event, value: { keyDown: Set<string>, keyUp: Set<string> }) => {
logger.info('MAIN WINDOW Updated key subscriptions', value);
preloadData.subscribedKeys.keyDown = value.keyDown;
preloadData.subscribedKeys.keyUp = value.keyUp;
})
electronAPI.contextBridge.exposeInMainWorld('targetAPI', {
onDeviceInfo: (callback: any) => electronAPI.ipcRenderer.on('device-info', callback),
getDeviceInfo: () => preloadData.deviceInfo,
getSessions: () => electronAPI.ipcRenderer.invoke('get-sessions'),
getSubscribedKeys: () => preloadData.subscribedKeys,
onConnect: (callback: any) => electronAPI.ipcRenderer.on('connect', callback),
onDisconnect: (callback: any) => electronAPI.ipcRenderer.on('disconnect', callback),
emitEvent: (message: EventMessage) => electronAPI.ipcRenderer.send('emit-event', message),
logger: loggerInterface,
});

View file

@ -3,6 +3,7 @@ import QRCode from 'modules/qrcode';
import * as connectionMonitor from '../ConnectionMonitor';
import { onQRCodeRendered } from 'src/main/Renderer';
import { toast, ToastIcon } from '../components/Toast';
import { EventMessage, EventType, KeyEvent } from 'common/Packets';
const connectionStatusText = document.getElementById('connection-status-text');
const connectionStatusSpinner = document.getElementById('connection-spinner');
@ -199,3 +200,14 @@ function renderQRCode(url: string) {
onQRCodeRendered();
}
document.addEventListener('keydown', (event: KeyboardEvent) => {
if (window.targetAPI.getSubscribedKeys().keyDown.has(event.key)) {
window.targetAPI.emitEvent(new EventMessage(Date.now(), new KeyEvent(EventType.KeyDown, event.key, event.repeat, false)));
}
});
document.addEventListener('keyup', (event: KeyboardEvent) => {
if (window.targetAPI.getSubscribedKeys().keyUp.has(event.key)) {
window.targetAPI.emitEvent(new EventMessage(Date.now(), new KeyEvent(EventType.KeyUp, event.key, event.repeat, false)));
}
});