Лицензия, редактор, пульт и сборка
- Main: license service, IPC, router; закрытие окон; yauzl закрытие zip (EMFILE), zipRead тест - Editor: стабильный projectState без мигания, логотип и меню, строки UI, LayoutShell overlay - Control: ластик для всех типов эффектов, затухание/нарастание музыки при смене сцены - Сборка: vite, build/dev scripts, obfuscate-main и build-env скрипты с тестами; package.json Made-with: Cursor
This commit is contained in:
+26
-4
@@ -1,6 +1,6 @@
|
||||
import { ipcMain } from 'electron';
|
||||
|
||||
import type { IpcInvokeMap } from '../../shared/ipc/contracts';
|
||||
import { ipcChannels, type IpcInvokeMap } from '../../shared/ipc/contracts';
|
||||
|
||||
type Handler<K extends keyof IpcInvokeMap> = (
|
||||
payload: IpcInvokeMap[K]['req'],
|
||||
@@ -8,11 +8,33 @@ type Handler<K extends keyof IpcInvokeMap> = (
|
||||
|
||||
const handlers = new Map<string, (payload: unknown) => Promise<unknown>>();
|
||||
|
||||
export function registerHandler<K extends keyof IpcInvokeMap>(channel: K, handler: Handler<K>) {
|
||||
handlers.set(channel as string, async (payload: unknown) => handler(payload as IpcInvokeMap[K]['req']));
|
||||
let licenseAssert: (() => void) | undefined;
|
||||
|
||||
export function setLicenseAssert(fn: () => void): void {
|
||||
licenseAssert = fn;
|
||||
}
|
||||
|
||||
export function installIpcRouter() {
|
||||
function channelRequiresLicense(channel: string): boolean {
|
||||
if (channel.startsWith('license.')) return false;
|
||||
if (channel.startsWith('app.')) return false;
|
||||
if (channel === ipcChannels.windows.closeMultiWindow) return false;
|
||||
if (channel === ipcChannels.windows.togglePresentationFullscreen) return false;
|
||||
return true;
|
||||
}
|
||||
|
||||
export function registerHandler<K extends keyof IpcInvokeMap>(channel: K, handler: Handler<K>) {
|
||||
const channelStr = channel as string;
|
||||
const wrap = channelRequiresLicense(channelStr);
|
||||
const inner = async (payload: unknown) => {
|
||||
if (wrap) {
|
||||
licenseAssert?.();
|
||||
}
|
||||
return handler(payload as IpcInvokeMap[K]['req']);
|
||||
};
|
||||
handlers.set(channelStr, inner);
|
||||
}
|
||||
|
||||
export function installIpcRouter(): void {
|
||||
for (const [channel, handler] of handlers.entries()) {
|
||||
ipcMain.handle(channel, async (_event, payload: unknown) => handler(payload));
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user