Phoenix: Use regular code path to run built-in apps

Now launchApp() can always be awaited, we can run built-in apps using
the same code path for other apps, and eventually have SIGINT close
them.
This commit is contained in:
Sam Atkins 2024-04-17 13:37:49 +01:00
parent 3526d5d9eb
commit bec2d62e2f

View File

@ -23,20 +23,9 @@ const BUILT_IN_APPS = [
'explorer', 'explorer',
]; ];
export class PuterAppCommandProvider { const lookup_app = async (id) => {
async lookup (id) {
// Built-in apps will not be returned by the fetch query below, so we handle them separately.
if (BUILT_IN_APPS.includes(id)) { if (BUILT_IN_APPS.includes(id)) {
return { return { success: true, path: null };
name: id,
path: 'Built-in Puter app',
// TODO: Parameters and options?
async execute(ctx) {
const args = {}; // TODO: Passed-in parameters and options would go here
await puter.ui.launchApp(id, args);
}
};
} }
const request = await fetch(`${puter.APIOrigin}/drivers/call`, { const request = await fetch(`${puter.APIOrigin}/drivers/call`, {
@ -49,17 +38,22 @@ export class PuterAppCommandProvider {
}); });
const { success, result } = await request.json(); const { success, result } = await request.json();
return { success, path: result?.index_url };
};
export class PuterAppCommandProvider {
async lookup (id) {
const { success, path } = await lookup_app(id);
if (!success) return; if (!success) return;
const { name, index_url } = result;
return { return {
name, name: id,
path: index_url, path: path ?? 'Built-in Puter app',
// TODO: Parameters and options? // TODO: Parameters and options?
async execute(ctx) { async execute(ctx) {
const args = {}; // TODO: Passed-in parameters and options would go here const args = {}; // TODO: Passed-in parameters and options would go here
const child = await puter.ui.launchApp(name, args); const child = await puter.ui.launchApp(id, args);
// Wait for app to close. // Wait for app to close.
const app_close_promise = new Promise((resolve, reject) => { const app_close_promise = new Promise((resolve, reject) => {