From 88d04beec3d3e4ebb27473a1cd2e72eef8ef17e1 Mon Sep 17 00:00:00 2001 From: alMukaafih Date: Sun, 24 Nov 2024 19:19:23 +0100 Subject: [PATCH 1/5] fix: Acode ignoring main, readme and icon fields in plugin manifest --- src/lib/installPlugin.js | 8 +++++++- src/lib/loadPlugin.js | 6 +++++- src/pages/plugin/plugin.js | 4 ++-- 3 files changed, 14 insertions(+), 4 deletions(-) diff --git a/src/lib/installPlugin.js b/src/lib/installPlugin.js index f0eeeac11..b00d9b3c0 100644 --- a/src/lib/installPlugin.js +++ b/src/lib/installPlugin.js @@ -57,7 +57,7 @@ export default async function installPlugin(id, name, purchaseToken) { const zip = new JSZip(); await zip.loadAsync(plugin); - if (!zip.files["plugin.json"] || !zip.files["main.js"]) { + if (!zip.files["plugin.json"]) { throw new Error(strings["invalid plugin"]); } @@ -65,6 +65,12 @@ export default async function installPlugin(id, name, purchaseToken) { await zip.files["plugin.json"].async("text"), ); + if (!zip.files[pluginJson.main] && zip.files["main.js"]) { + pluginJson.main = "main.js"; + } else if (!zip.files[pluginJson.main] && !zip.files["main.js"]) { + throw new Error(strings["invalid plugin"]); + } + if (!pluginDir) { pluginJson.source = pluginUrl; id = pluginJson.id; diff --git a/src/lib/loadPlugin.js b/src/lib/loadPlugin.js index 63ff666c8..8a898cebf 100644 --- a/src/lib/loadPlugin.js +++ b/src/lib/loadPlugin.js @@ -8,8 +8,12 @@ export default async function loadPlugin(pluginId, justInstalled = false) { const baseUrl = await helpers.toInternalUri(Url.join(PLUGIN_DIR, pluginId)); const cacheFile = Url.join(CACHE_STORAGE, pluginId); + const pluginJson = await fsOperation( + Url.join(PLUGIN_DIR, pluginId, "plugin.json"), + ).readFile("json"); + return new Promise((resolve, reject) => { - const $script = ; + const $script = ; $script.onerror = (error) => { reject(new Error(`Failed to load script for plugin ${pluginId}`)); diff --git a/src/pages/plugin/plugin.js b/src/pages/plugin/plugin.js index ff9013bb9..d139f5de0 100644 --- a/src/pages/plugin/plugin.js +++ b/src/pages/plugin/plugin.js @@ -77,10 +77,10 @@ export default async function PluginInclude( ).readFile("json"); const { author } = installedPlugin; const description = await fsOperation( - Url.join(PLUGIN_DIR, id, "readme.md"), + Url.join(PLUGIN_DIR, id, installedPlugin.readme), ).readFile("utf8"); const iconUrl = await helpers.toInternalUri( - Url.join(PLUGIN_DIR, id, "icon.png"), + Url.join(PLUGIN_DIR, id, installedPlugin.icon), ); const iconData = await fsOperation(iconUrl).readFile(); const icon = URL.createObjectURL( From 36feb175fa2dad65170fd51324e1a85d406638f7 Mon Sep 17 00:00:00 2001 From: alMukaafih Date: Fri, 27 Dec 2024 16:30:59 +0100 Subject: [PATCH 2/5] removed hardcoded values, used manifest file values --- src/lib/installPlugin.js | 17 +++++++++++++++-- src/pages/plugins/plugins.js | 2 +- src/sidebarApps/extensions/index.js | 2 +- 3 files changed, 17 insertions(+), 4 deletions(-) diff --git a/src/lib/installPlugin.js b/src/lib/installPlugin.js index b00d9b3c0..656f283ed 100644 --- a/src/lib/installPlugin.js +++ b/src/lib/installPlugin.js @@ -65,9 +65,22 @@ export default async function installPlugin(id, name, purchaseToken) { await zip.files["plugin.json"].async("text"), ); - if (!zip.files[pluginJson.main] && zip.files["main.js"]) { + /** patch main in manifest */ + if (!zip.files[pluginJson.main]) { pluginJson.main = "main.js"; - } else if (!zip.files[pluginJson.main] && !zip.files["main.js"]) { + } + + /** patch icon in manifest */ + if (!zip.files[pluginJson.icon]) { + pluginJson.icon = "icon.png"; + } + + /** patch readme in manifest */ + if (!zip.files[pluginJson.readme]) { + pluginJson.readme = "readme.md"; + } + + if (!zip.files[pluginJson.main]) { throw new Error(strings["invalid plugin"]); } diff --git a/src/pages/plugins/plugins.js b/src/pages/plugins/plugins.js index c080f661f..0996531be 100644 --- a/src/pages/plugins/plugins.js +++ b/src/pages/plugins/plugins.js @@ -299,7 +299,7 @@ export default function PluginsInclude(updates) { if (!((updates && updates.includes(id)) || !updates)) return; const url = Url.join(item.url, "plugin.json"); const plugin = await fsOperation(url).readFile("json"); - const iconUrl = getLocalRes(id, "icon.png"); + const iconUrl = getLocalRes(id, plugin.icon); plugin.icon = await helpers.toInternalUri(iconUrl); plugin.installed = true; plugins.installed.push(plugin); diff --git a/src/sidebarApps/extensions/index.js b/src/sidebarApps/extensions/index.js index 14e57d4be..2a4412df5 100644 --- a/src/sidebarApps/extensions/index.js +++ b/src/sidebarApps/extensions/index.js @@ -214,7 +214,7 @@ async function listInstalledPlugins() { const id = Url.basename(item.url); const url = Url.join(item.url, "plugin.json"); const plugin = await fsOperation(url).readFile("json"); - const iconUrl = getLocalRes(id, "icon.png"); + const iconUrl = getLocalRes(id, plugin.icon); plugin.icon = await helpers.toInternalUri(iconUrl); plugin.installed = true; return plugin; From a0acbb8076a72b9d47bd0ea53b4f43c5b68a4b09 Mon Sep 17 00:00:00 2001 From: Mubarak Aloaye Date: Sat, 28 Dec 2024 16:47:55 +0100 Subject: [PATCH 3/5] Update installPlugin.js --- src/lib/installPlugin.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/lib/installPlugin.js b/src/lib/installPlugin.js index 95eb79654..3dc8bc299 100644 --- a/src/lib/installPlugin.js +++ b/src/lib/installPlugin.js @@ -103,7 +103,7 @@ export default async function installPlugin( if (!zip.files[pluginJson.main]) { throw new Error(strings["invalid plugin"]); - } + } if (!isDependency && pluginJson.dependencies) { const manifests = await resolveDepsManifest(pluginJson.dependencies); From f097e845165f845df20f89525c0b7cbd53d83a85 Mon Sep 17 00:00:00 2001 From: alMukaafih Date: Mon, 30 Dec 2024 12:25:46 +0100 Subject: [PATCH 4/5] Update loadPlugin.js --- src/lib/loadPlugin.js | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/src/lib/loadPlugin.js b/src/lib/loadPlugin.js index 797107f2d..cc0b0d13f 100644 --- a/src/lib/loadPlugin.js +++ b/src/lib/loadPlugin.js @@ -12,8 +12,17 @@ export default async function loadPlugin(pluginId, justInstalled = false) { Url.join(PLUGIN_DIR, pluginId, "plugin.json"), ).readFile("json"); + let mainUrl; + if ( + await fsOperation(Url.join(PLUGIN_DIR, pluginId, pluginJson.main)).exists() + ) { + mainUrl = Url.join(baseUrl, pluginJson.main); + } else { + mainUrl = Url.join(baseUrl, "main.js"); + } + return new Promise((resolve, reject) => { - const $script = ; + const $script = ; $script.onerror = (error) => { reject( From 1ff70a52470102387676096911f8ecb6b5248819 Mon Sep 17 00:00:00 2001 From: alMukaafih Date: Fri, 17 Jan 2025 17:06:56 +0100 Subject: [PATCH 5/5] removed fs test for plugin.main, use try/catch instead --- src/lib/loadPlugin.js | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/src/lib/loadPlugin.js b/src/lib/loadPlugin.js index cc0b0d13f..687dd5a28 100644 --- a/src/lib/loadPlugin.js +++ b/src/lib/loadPlugin.js @@ -12,19 +12,8 @@ export default async function loadPlugin(pluginId, justInstalled = false) { Url.join(PLUGIN_DIR, pluginId, "plugin.json"), ).readFile("json"); - let mainUrl; - if ( - await fsOperation(Url.join(PLUGIN_DIR, pluginId, pluginJson.main)).exists() - ) { - mainUrl = Url.join(baseUrl, pluginJson.main); - } else { - mainUrl = Url.join(baseUrl, "main.js"); - } - return new Promise((resolve, reject) => { - const $script = ; - - $script.onerror = (error) => { + const onerror = (error) => { reject( new Error( `Failed to load script for plugin ${pluginId}: ${error.message || error}`, @@ -32,7 +21,7 @@ export default async function loadPlugin(pluginId, justInstalled = false) { ); }; - $script.onload = async () => { + const onload = async () => { const $page = Page("Plugin"); $page.show = () => { actionStack.push({ @@ -64,6 +53,17 @@ export default async function loadPlugin(pluginId, justInstalled = false) { } }; - document.head.append($script); + const $script = ; + $script.onload = onload; + $script.onerror = onerror; + + try { + document.head.append($script); + } catch (_) { + const $script = ; + $script.onload = onload; + $script.onerror = onerror; + document.head.append($script); + } }); }