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 };
});