diff --git a/electron/index.js b/electron/index.js index 14a19a64..5df4219f 100644 --- a/electron/index.js +++ b/electron/index.js @@ -1,9 +1,8 @@ /* eslint-disable quotes,no-undef */ -const { app, BrowserWindow, Menu, MenuItem, session } = require("electron"); +const { app, BrowserWindow, Menu, MenuItem, ipcMain, shell } = require("electron"); const path = require("path"); const url = require("url"); -const { ipcMain, shell } = require("electron"); const fs = require("fs"); const steam = require("./steam"); const asyncLock = require("async-lock"); @@ -287,10 +286,14 @@ async function performFsJob(job) { } } -ipcMain.on("fs-job", async (event, arg) => { - const result = await performFsJob(arg); - event.reply("fs-response", { id: arg.id, result }); -}); +ipcMain.handle( + "fs-job", + (event, arg) => + new Promise(async (resolve, reject) => { + const result = await performFsJob(arg); + resolve(result); + }) +); steam.init(isDev); steam.listen(); diff --git a/electron/package.json b/electron/package.json index 893e3609..6aec6ab9 100644 --- a/electron/package.json +++ b/electron/package.json @@ -10,12 +10,10 @@ "start": "electron --disable-direct-composition --in-process-gpu ." }, "devDependencies": { - "electron": "10.4.0" + "electron": "10.4.0", + "async-lock": "^1.2.8" }, "optionalDependencies": { "shapez.io-private-artifacts": "github:tobspr/shapez.io-private-artifacts#abi-v85" - }, - "dependencies": { - "async-lock": "^1.2.8" } } diff --git a/electron/yarn.lock b/electron/yarn.lock index 8c5b1dec..cdeefc2c 100644 --- a/electron/yarn.lock +++ b/electron/yarn.lock @@ -503,10 +503,6 @@ serialize-error@^7.0.1: dependencies: type-fest "^0.13.1" -"shapez.io-private-artifacts@github:tobspr/shapez.io-private-artifacts#abi-v85": - version "0.1.0" - resolved "git+ssh://git@github.com/tobspr/shapez.io-private-artifacts.git#63adf7e0ea4b90c2a29053ce1f0ec9d573b3ac0a" - sprintf-js@^1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.1.2.tgz#da1765262bf8c0f571749f2ad6c26300207ae673" diff --git a/src/js/platform/electron/storage.js b/src/js/platform/electron/storage.js index 41ed1746..bf4ed9ac 100644 --- a/src/js/platform/electron/storage.js +++ b/src/js/platform/electron/storage.js @@ -7,24 +7,6 @@ const logger = createLogger("electron-storage"); export class StorageImplElectron extends StorageInterface { constructor(app) { super(app); - - /** @type {Object.} */ - this.jobs = {}; - this.jobId = 0; - - getIPCRenderer().on("fs-response", (event, arg) => { - const id = arg.id; - if (!this.jobs[id]) { - logger.warn("Got unhandled FS response, job not known:", id); - return; - } - const { resolve, reject } = this.jobs[id]; - if (arg.result.success) { - resolve(arg.result.data); - } else { - reject(arg.result.error); - } - }); } initialize() { @@ -33,43 +15,53 @@ export class StorageImplElectron extends StorageInterface { writeFileAsync(filename, contents) { return new Promise((resolve, reject) => { - // ipcMain - const jobId = ++this.jobId; - this.jobs[jobId] = { resolve, reject }; - - getIPCRenderer().send("fs-job", { - type: "write", - filename, - contents, - id: jobId, - }); + getIPCRenderer() + .invoke("fs-job", { + type: "write", + filename, + contents, + }) + .then(result => { + if (result.success) { + resolve(result.data); + } else { + reject(result.error); + } + }); }); } readFileAsync(filename) { return new Promise((resolve, reject) => { - // ipcMain - const jobId = ++this.jobId; - this.jobs[jobId] = { resolve, reject }; - - getIPCRenderer().send("fs-job", { - type: "read", - filename, - id: jobId, - }); + getIPCRenderer() + .invoke("fs-job", { + type: "read", + filename, + }) + .then(result => { + if (result.success) { + resolve(result.data); + } else { + reject(result.error); + } + }); }); } deleteFileAsync(filename) { return new Promise((resolve, reject) => { - // ipcMain - const jobId = ++this.jobId; - this.jobs[jobId] = { resolve, reject }; - getIPCRenderer().send("fs-job", { - type: "delete", - filename, - id: jobId, - }); + getIPCRenderer() + .invoke("fs-job", { + type: "delete", + filename, + }) + .then(result => { + if (result.success) { + resolve(result.data); + } else { + reject(result.error); + } + }); }); } }