diff --git a/src/lib/installPlugin.js b/src/lib/installPlugin.js
index 13385c37b..3dc8bc299 100644
--- a/src/lib/installPlugin.js
+++ b/src/lib/installPlugin.js
@@ -77,7 +77,7 @@ export default async function installPlugin(
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"]);
}
@@ -86,6 +86,25 @@ export default async function installPlugin(
await zip.files["plugin.json"].async("text"),
);
+ /** patch main in manifest */
+ if (!zip.files[pluginJson.main]) {
+ pluginJson.main = "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"]);
+ }
+
if (!isDependency && pluginJson.dependencies) {
const manifests = await resolveDepsManifest(pluginJson.dependencies);
diff --git a/src/lib/loadPlugin.js b/src/lib/loadPlugin.js
index dd968758d..cc0b0d13f 100644
--- a/src/lib/loadPlugin.js
+++ b/src/lib/loadPlugin.js
@@ -8,8 +8,21 @@ 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");
+
+ 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(
diff --git a/src/pages/plugin/plugin.js b/src/pages/plugin/plugin.js
index 82202cf52..ef4aa9ba9 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(
diff --git a/src/pages/plugins/plugins.js b/src/pages/plugins/plugins.js
index a817a5913..ff4ba9039 100644
--- a/src/pages/plugins/plugins.js
+++ b/src/pages/plugins/plugins.js
@@ -331,7 +331,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 bcb901916..e069d784b 100644
--- a/src/sidebarApps/extensions/index.js
+++ b/src/sidebarApps/extensions/index.js
@@ -268,7 +268,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;