Лицензия, редактор, пульт и сборка

- 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:
Ivan Fontosh
2026-04-19 20:11:24 +08:00
parent 5e7dc5ea19
commit 2fa20da94d
40 changed files with 2629 additions and 211 deletions
+25
View File
@@ -1,3 +1,4 @@
import type { LicenseSnapshot } from '../license/licenseSnapshot';
import type {
AssetId,
EffectsEvent,
@@ -61,6 +62,13 @@ export const ipcChannels = {
dispatch: 'video.dispatch',
stateChanged: 'video.stateChanged',
},
license: {
getStatus: 'license.getStatus',
setToken: 'license.setToken',
clearToken: 'license.clearToken',
acceptEula: 'license.acceptEula',
statusChanged: 'license.statusChanged',
},
} as const;
export type IpcInvokeMap = {
@@ -196,6 +204,22 @@ export type IpcInvokeMap = {
req: { event: VideoPlaybackEvent };
res: { ok: true };
};
[ipcChannels.license.getStatus]: {
req: Record<string, never>;
res: LicenseSnapshot;
};
[ipcChannels.license.setToken]: {
req: { token: string };
res: LicenseSnapshot;
};
[ipcChannels.license.clearToken]: {
req: Record<string, never>;
res: LicenseSnapshot;
};
[ipcChannels.license.acceptEula]: {
req: { version: number };
res: { ok: true };
};
};
export type SessionState = {
@@ -207,6 +231,7 @@ export type IpcEventMap = {
[ipcChannels.session.stateChanged]: { state: SessionState };
[ipcChannels.effects.stateChanged]: { state: EffectsState };
[ipcChannels.video.stateChanged]: { state: VideoPlaybackState };
[ipcChannels.license.statusChanged]: Record<string, never>;
};
export type ScenePatch = {