This commit is contained in:
2026-10-17 19:29:49 +07:00
parent dc0d82d88a
commit a386f3d9e5
14 changed files with 1852 additions and 421 deletions
+33 -8
View File
@@ -3,7 +3,7 @@ import { createReadStream } from 'node:fs'
import { stat } from 'node:fs/promises'
import { join } from 'node:path'
import { Readable } from 'node:stream'
import { Controller } from './controller.js'
import { Controller, parseCommand } from './controller.js'
import { parseRange } from './range.js'
import { PackageStore } from './package-store.js'
import { packageMediaResponse } from './package-media.js'
@@ -69,16 +69,13 @@ function show(displayId: number) {
selectedDisplay = display.id
output = new BrowserWindow({ ...windowOptions(), ...display.bounds, show: false })
secure(output)
controller.output(true)
const window = output
output.on('closed', () => {
if (output !== window) return
output = null
selectedDisplay = null
controller.report({
id: controller.state.command?.id ?? '',
status: 'error',
error: 'Окно показа закрыто',
})
controller.output(false)
})
output.once('ready-to-show', () => {
if (!window.isDestroyed()) {
@@ -190,10 +187,38 @@ app
if (typeof id !== 'number') throw new Error('Некорректный дисплей')
show(id)
})
let selectingPackage = false
ipcMain.handle('packages', (event) => {
requireControl(event)
return packages
.list()
.map((pkg) => ({ key: pkg.key, version: pkg.version, name: pkg.package.game.name }))
})
ipcMain.handle('select-package', async (event, key: unknown) => {
requireControl(event)
if (selectingPackage) throw new Error('Подождите проверки пакета')
if (key !== null && typeof key !== 'string') throw new Error('Некорректный пакет')
selectingPackage = true
try {
controller.selectPackage(key === null ? null : await packages.verify(key))
return controller.state
} catch (error) {
if (key === controller.state.catalog.key) controller.selectPackage(null)
throw error
} finally {
selectingPackage = false
}
})
ipcMain.handle('command', (event, command: unknown) => {
requireControl(event)
if (!output) throw new Error('Сначала откройте окно показа')
controller.command(command)
if (selectingPackage) throw new Error('Подождите проверки пакета')
const parsed = parseCommand(command)
if (
!output &&
['play', 'pause', 'resume', 'stop', 'replay', 'seek', 'next'].includes(parsed.action)
)
throw new Error('Сначала откройте окно показа')
controller.command(parsed)
})
ipcMain.on('report', (event, report: unknown) => {
if (