diff options
author | Jan200101 <sentrycraft123@gmail.com> | 2024-08-13 22:44:24 +0200 |
---|---|---|
committer | Jan200101 <sentrycraft123@gmail.com> | 2024-08-13 22:44:24 +0200 |
commit | 64107e982faf196537b403eb6319796914d7585e (patch) | |
tree | c4b682004069c2fc8cea0b78843a958c18f5c7ce | |
parent | 56f2cb84412252ae0a90076b861f3b1be32be01d (diff) | |
download | Viper-64107e982faf196537b403eb6319796914d7585e.tar.gz Viper-64107e982faf196537b403eb6319796914d7585e.zip |
chore: rework protocol mod installs to use renderer package list
This is achieved by sending an IPC event to the renderer and waiting for a reply once
Since this is async we return from the function after sending the event and recursively invoke it once the reply arrives
The package data is returned a a JSON String because Electron is unable to copy the Object over IPC
-rw-r--r-- | src/app/js/browser.js | 2 | ||||
-rw-r--r-- | src/app/js/mods.js | 6 | ||||
-rw-r--r-- | src/modules/protocol.js | 27 |
3 files changed, 32 insertions, 3 deletions
diff --git a/src/app/js/browser.js b/src/app/js/browser.js index 3415ebf..153c7b5 100644 --- a/src/app/js/browser.js +++ b/src/app/js/browser.js @@ -477,6 +477,8 @@ browser.mod_el = (properties) => { browserEntries.appendChild(entry); } +browser.packages = () => { return packages; } + let recent_toasts = {}; function add_recent_toast(name, timeout = 3000) { if (recent_toasts[name]) {return} diff --git a/src/app/js/mods.js b/src/app/js/mods.js index f463ddb..b257753 100644 --- a/src/app/js/mods.js +++ b/src/app/js/mods.js @@ -328,4 +328,10 @@ ipcRenderer.on("mods", (event, mods_obj) => { mods.load(mods_obj); }) +ipcRenderer.on("packages", (event) => { + // Its not possible to send over the package object directly, so we serialize it + const packages = JSON.stringify(browser.packages()); + event.sender.send("packages-reply", [packages]); +}) + module.exports = mods; diff --git a/src/modules/protocol.js b/src/modules/protocol.js index 8b6cfc6..e8701b2 100644 --- a/src/modules/protocol.js +++ b/src/modules/protocol.js @@ -1,12 +1,33 @@ const { app, ipcMain } = require("electron"); +const win = require("../win"); const requests = require("./requests"); const version = require("./version"); +var packages = undefined; async function install_mod(domain, author, package_name, version) { - let package_data = JSON.parse(await requests.get( - domain, `/api/experimental/package/${author}/${package_name}/${version}/` - )); + if (packages == undefined) + { + ipcMain.once("packages-reply", (event, packages_string) => { + packages = JSON.parse(packages_string); + install_mod(domain, author, package_name, version); + }); + + win().send("packages"); + return; + } + + const package = packages.find((package) => { return package.owner == author && package.name == package_name; }) + if (!package) { + console.error("Couldn't find package") + return; + } + + const package_data = package.versions.find((package_version) => { return package_version.version_number == version; }) + if (!package_data) { + console.error("Couldn't find package_version") + return; + } for (const dep of package_data.dependencies) { let fragments = dep.split("-"); |