| import { app, BrowserWindow } from 'electron'; |
| import path from 'path'; |
| import { fileURLToPath } from 'url'; |
| import yargs from 'yargs'; |
| import { serverEvents, EVENT_NAMES } from '../server-events.js'; |
|
|
| const cliArguments = yargs(process.argv) |
| .usage('Usage: <your-start-script> [options]') |
| .option('width', { |
| type: 'number', |
| default: 800, |
| describe: 'The width of the window', |
| }) |
| .option('height', { |
| type: 'number', |
| default: 600, |
| describe: 'The height of the window', |
| }) |
| .parseSync(); |
|
|
| |
| let appUrl; |
|
|
| function createTavernInternWindow() { |
| if (!appUrl) { |
| console.error('The server has not started yet.'); |
| return; |
| } |
| new BrowserWindow({ |
| height: cliArguments.height, |
| width: cliArguments.width, |
| }).loadURL(appUrl); |
| } |
|
|
| function startServer() { |
| return new Promise((_resolve, _reject) => { |
| serverEvents.addListener(EVENT_NAMES.SERVER_STARTED, ({ url }) => { |
| appUrl = url.toString(); |
| createTavernInternWindow(); |
| }); |
| const sillyTavernRoot = path.resolve(path.dirname(fileURLToPath(import.meta.url)), '../..'); |
| process.chdir(sillyTavernRoot); |
|
|
| import('../server-global.js'); |
| }); |
| } |
|
|
| app.whenReady().then(() => { |
| app.on('activate', () => { |
| if (BrowserWindow.getAllWindows().length === 0) { |
| createTavernInternWindow(); |
| } |
| }); |
|
|
| startServer(); |
| }); |
|
|
| app.on('window-all-closed', () => { |
| if (process.platform !== 'darwin') { |
| app.quit(); |
| } |
| }); |
|
|