feat: Implemented launching and downloading of roms
This is just an initial implementation lots of kings to iron out
This commit is contained in:
parent
ef08fa6114
commit
f15bf9a1e0
117 changed files with 37776 additions and 1073 deletions
|
|
@ -2,6 +2,8 @@ import { RunBunServer } from './server';
|
|||
import { RunAPIServer } from './api/rpc';
|
||||
import { spawnBrowser } from './utils/browser-spawner';
|
||||
import { BuildParams } from './utils/browser-params';
|
||||
import { cleanup as appCleanup, events } from './api/app';
|
||||
import os from 'node:os';
|
||||
|
||||
const api = RunAPIServer();
|
||||
let bunServer: { stop: () => void; url: URL; } | undefined;
|
||||
|
|
@ -13,43 +15,80 @@ if (!Bun.env.PUBLIC_ACCESS)
|
|||
|
||||
async function cleanup ()
|
||||
{
|
||||
await appCleanup();
|
||||
bunServer?.stop();
|
||||
await api.apiServer.stop();
|
||||
await api.cleanup();
|
||||
process.exit(0);
|
||||
}
|
||||
|
||||
try
|
||||
if (Bun.env.FORCE_BROWSER)
|
||||
{
|
||||
const webviewWorker = new Worker(process.env.IS_BINARY ? "./webview-worker.ts" : new URL("./webview-worker", import.meta.url).href, {
|
||||
await runBrowser();
|
||||
} else
|
||||
{
|
||||
try
|
||||
{
|
||||
await runWebview();
|
||||
} catch (error)
|
||||
{
|
||||
await runBrowser();
|
||||
}
|
||||
}
|
||||
|
||||
async function runWebview ()
|
||||
{
|
||||
const webviewWorker = new Worker(Bun.env.IS_BINARY ? `./webview/${os.platform()}.ts` : new URL(`./webview/${os.platform()}`, import.meta.url).href, {
|
||||
smol: true,
|
||||
});
|
||||
webviewWorker.addEventListener('error', console.error);
|
||||
await new Promise(resolve => webviewWorker.addEventListener('close', resolve));
|
||||
|
||||
await new Promise((resolve, reject) =>
|
||||
{
|
||||
webviewWorker.addEventListener('error', e =>
|
||||
{
|
||||
console.error(e.message);
|
||||
reject(e.error);
|
||||
});
|
||||
|
||||
webviewWorker.addEventListener('message', (e) =>
|
||||
{
|
||||
if (e.data === 'destroyed')
|
||||
{
|
||||
resolve(true);
|
||||
}
|
||||
});
|
||||
|
||||
events.on('exitapp', () =>
|
||||
{
|
||||
resolve(true);
|
||||
});
|
||||
});
|
||||
await cleanup();
|
||||
}
|
||||
catch (error)
|
||||
|
||||
async function runBrowser ()
|
||||
{
|
||||
console.error(error);
|
||||
|
||||
const browserParams = await BuildParams();
|
||||
|
||||
if (!browserParams)
|
||||
{
|
||||
console.error("Could not find valid browser");
|
||||
process.exit();
|
||||
}
|
||||
await cleanup();
|
||||
} else
|
||||
{
|
||||
const browser = spawnBrowser({
|
||||
browser: browserParams.browser.type,
|
||||
args: browserParams.args,
|
||||
env: browserParams.env,
|
||||
detached: false,
|
||||
execPath: browserParams.browser.path,
|
||||
source: browserParams.browser.source,
|
||||
ipc (message)
|
||||
{
|
||||
console.log(message);
|
||||
},
|
||||
onExit: cleanup
|
||||
});
|
||||
|
||||
const browser = spawnBrowser({
|
||||
browser: browserParams.browser.type,
|
||||
args: browserParams.args,
|
||||
env: browserParams.env,
|
||||
detached: true,
|
||||
execPath: browserParams.browser.path,
|
||||
source: browserParams.browser.source,
|
||||
ipc (message)
|
||||
{
|
||||
console.log(message);
|
||||
},
|
||||
onExit: cleanup
|
||||
});
|
||||
events.on('exitapp', () => browser.kill(15));
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue