From 03fbce494b8aacb3270be24b0b35b245aa174104 Mon Sep 17 00:00:00 2001 From: ItsLap <74074061+ItsLap@users.noreply.github.com> Date: Sun, 26 May 2024 22:02:58 +0200 Subject: [PATCH] Add App Store PML support! --- pkgs/apps/AppStore.js | 26 +++++++++++++++------ pkgs/lib/FileMappings.js | 49 +++++++++++++++++++++++++++------------- pkgs/ui/Desktop.js | 4 ++-- 3 files changed, 54 insertions(+), 25 deletions(-) diff --git a/pkgs/apps/AppStore.js b/pkgs/apps/AppStore.js index 6b75ada..efd9673 100644 --- a/pkgs/apps/AppStore.js +++ b/pkgs/apps/AppStore.js @@ -243,19 +243,28 @@ export default { async function installApp(pkg, app, force = false) { let appNameSafe = makeAppNameSafe(pkg); + let fileExtension = "." + app.assets.path.split(".").pop(); + if (fileExtension === ".js") fileExtension = ".app"; + await fetch( `${host}pkgs/${pkg}/${app.assets.path}?t=` + performance.now() ) .then(async (e) => { - console.log(await vfs.whatIs(`${asFilePath}/${appNameSafe}.app`)); + console.log( + await vfs.whatIs(`${asFilePath}/${appNameSafe}${fileExtension}`) + ); if ( - (await vfs.whatIs(`${asFilePath}/${appNameSafe}.app`)) === - null || + (await vfs.whatIs( + `${asFilePath}/${appNameSafe}${fileExtension}` + )) === null || force == true ) { let result = await e.text(); - await vfs.writeFile(`${asFilePath}/${appNameSafe}.app`, result); + await vfs.writeFile( + `${asFilePath}/${appNameSafe}${fileExtension}`, + result + ); const img = await new Promise((resolve, reject) => { fetch(`${host}pkgs/${pkg}/${app.assets.icon}`) @@ -280,13 +289,16 @@ export default { pages.appPage(app, pkg); } else if ( - (await vfs.whatIs(`${asFilePath}/${appNameSafe}.app`)) === - "file" + (await vfs.whatIs( + `${asFilePath}/${appNameSafe}${fileExtension}` + )) === "file" ) { await Root.Core.startPkg( "data:text/javascript," + encodeURIComponent( - await vfs.readFile(`${asFilePath}/${appNameSafe}.app`) + await vfs.readFile( + `${asFilePath}/${appNameSafe}${fileExtension}` + ) ), false, true diff --git a/pkgs/lib/FileMappings.js b/pkgs/lib/FileMappings.js index 06b850a..23e7ba3 100644 --- a/pkgs/lib/FileMappings.js +++ b/pkgs/lib/FileMappings.js @@ -192,7 +192,10 @@ export default { c.startPkg(shrtFile.fullName, true, true); }, }; - } else if (ext === "app" && path.startsWith("Registry/AppStore/")) { + } else if ( + (ext === "app" && path.startsWith("Registry/AppStore/")) || + (ext === "pml" && path.startsWith("Registry/AppStore/")) + ) { const asExists = await vfs.whatIs( "Registry/AppStore/_AppStoreIndex.json" ); @@ -214,21 +217,35 @@ export default { if (window.__DEBUG === true) console.log(fileName, as); if (fileName in as) { - return { - name: as[fileName].name, - icon: ``, - fullName: as[fileName].shortDescription, - ctxMenuApp: undefined, - invalid: false, - async onClick() { - C.startPkg( - "data:text/javascript," + - encodeURIComponent(await vfs.readFile(path)), - false, - false - ); - }, - }; + if (ext === "app") { + return { + name: as[fileName].name, + icon: ``, + fullName: as[fileName].shortDescription, + ctxMenuApp: undefined, + invalid: false, + async onClick() { + C.startPkg( + "data:text/javascript," + + encodeURIComponent(await vfs.readFile(path)), + false, + false + ); + }, + }; + } else { + return { + name: as[fileName].name, + icon: ``, + fullName: as[fileName].shortDescription, + ctxMenuApp: undefined, + invalid: false, + async onClick() { + let x = await c.startPkg("apps:PML", true, true); + x.proc.send({ type: "loadFile", path }); + }, + }; + } } else { return { name: "App Store App (unknown)", diff --git a/pkgs/ui/Desktop.js b/pkgs/ui/Desktop.js index 825a4cc..8810059 100644 --- a/pkgs/ui/Desktop.js +++ b/pkgs/ui/Desktop.js @@ -370,7 +370,7 @@ export default { return { type: "desktop", item: f.item }; }); const installedApps = (await vfs.list("Root/Pluto/apps")) - .filter((f) => f.item.endsWith(".app")) + .filter((f) => f.item.endsWith(".app") || f.item.endsWith(".pml")) .map((f) => { return { type: "installed", item: f.item }; }); @@ -381,7 +381,7 @@ export default { if (asExists !== null) { console.log(asExists); asApps = (await vfs.list("Registry/AppStore")) - .filter((f) => f.item.endsWith(".app")) + .filter((f) => f.item.endsWith(".app") || f.item.endsWith(".pml")) .map((f) => { return { type: "appStore", item: f.item }; });