1
0
mirror of https://github.com/tobspr/shapez.io.git synced 2025-06-13 13:04:03 +00:00

Changed electron fs-job to invoke, for simplefying storage

(And it helps for the modloader)
This commit is contained in:
DJ1TJOO 2021-03-14 16:13:40 +01:00
parent 5a3da57f10
commit ecd4d36f87
4 changed files with 48 additions and 59 deletions

View File

@ -1,9 +1,8 @@
/* eslint-disable quotes,no-undef */ /* 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 path = require("path");
const url = require("url"); const url = require("url");
const { ipcMain, shell } = require("electron");
const fs = require("fs"); const fs = require("fs");
const steam = require("./steam"); const steam = require("./steam");
const asyncLock = require("async-lock"); const asyncLock = require("async-lock");
@ -287,10 +286,14 @@ async function performFsJob(job) {
} }
} }
ipcMain.on("fs-job", async (event, arg) => { ipcMain.handle(
"fs-job",
(event, arg) =>
new Promise(async (resolve, reject) => {
const result = await performFsJob(arg); const result = await performFsJob(arg);
event.reply("fs-response", { id: arg.id, result }); resolve(result);
}); })
);
steam.init(isDev); steam.init(isDev);
steam.listen(); steam.listen();

View File

@ -10,12 +10,10 @@
"start": "electron --disable-direct-composition --in-process-gpu ." "start": "electron --disable-direct-composition --in-process-gpu ."
}, },
"devDependencies": { "devDependencies": {
"electron": "10.4.0" "electron": "10.4.0",
"async-lock": "^1.2.8"
}, },
"optionalDependencies": { "optionalDependencies": {
"shapez.io-private-artifacts": "github:tobspr/shapez.io-private-artifacts#abi-v85" "shapez.io-private-artifacts": "github:tobspr/shapez.io-private-artifacts#abi-v85"
},
"dependencies": {
"async-lock": "^1.2.8"
} }
} }

View File

@ -503,10 +503,6 @@ serialize-error@^7.0.1:
dependencies: dependencies:
type-fest "^0.13.1" 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: sprintf-js@^1.1.2:
version "1.1.2" version "1.1.2"
resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.1.2.tgz#da1765262bf8c0f571749f2ad6c26300207ae673" resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.1.2.tgz#da1765262bf8c0f571749f2ad6c26300207ae673"

View File

@ -7,24 +7,6 @@ const logger = createLogger("electron-storage");
export class StorageImplElectron extends StorageInterface { export class StorageImplElectron extends StorageInterface {
constructor(app) { constructor(app) {
super(app); super(app);
/** @type {Object.<number, {resolve:Function, reject: Function}>} */
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() { initialize() {
@ -33,42 +15,52 @@ export class StorageImplElectron extends StorageInterface {
writeFileAsync(filename, contents) { writeFileAsync(filename, contents) {
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
// ipcMain getIPCRenderer()
const jobId = ++this.jobId; .invoke("fs-job", {
this.jobs[jobId] = { resolve, reject };
getIPCRenderer().send("fs-job", {
type: "write", type: "write",
filename, filename,
contents, contents,
id: jobId, })
.then(result => {
if (result.success) {
resolve(result.data);
} else {
reject(result.error);
}
}); });
}); });
} }
readFileAsync(filename) { readFileAsync(filename) {
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
// ipcMain getIPCRenderer()
const jobId = ++this.jobId; .invoke("fs-job", {
this.jobs[jobId] = { resolve, reject };
getIPCRenderer().send("fs-job", {
type: "read", type: "read",
filename, filename,
id: jobId, })
.then(result => {
if (result.success) {
resolve(result.data);
} else {
reject(result.error);
}
}); });
}); });
} }
deleteFileAsync(filename) { deleteFileAsync(filename) {
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
// ipcMain getIPCRenderer()
const jobId = ++this.jobId; .invoke("fs-job", {
this.jobs[jobId] = { resolve, reject };
getIPCRenderer().send("fs-job", {
type: "delete", type: "delete",
filename, filename,
id: jobId, })
.then(result => {
if (result.success) {
resolve(result.data);
} else {
reject(result.error);
}
}); });
}); });
} }