Files
TrueGrowth/vendor/aigcpanel/electron/mapi/storage/main.ts
Jammy 52636c91ae
Some checks failed
CI / main (push) Has been cancelled
CI / release-e2e (push) Has been cancelled
Track bundled vendor runtime sources
2026-07-07 10:05:50 +08:00

128 lines
2.8 KiB
TypeScript

import { AppEnv, waitAppEnvReady } from "../env";
import fs from "node:fs";
import { ipcMain } from "electron";
import nodePath from "node:path";
let data = {};
const userDataRoot = () => {
return nodePath.join(AppEnv.userData, "storage");
};
const dataRoot = () => {
return nodePath.join(AppEnv.dataRoot, "storage");
};
const filePath = (group: string) => {
let p = nodePath.join(userDataRoot(), `${group}.json`);
if (fs.existsSync(p)) {
return p;
}
return nodePath.join(dataRoot(), `${group}.json`);
};
const load = (group: string) => {
try {
const p = filePath(group);
let json = fs.readFileSync(p).toString();
json = JSON.parse(json);
data[group] = json || {};
} catch (e) {
data[group] = {};
}
};
const loadIfNeed = (group: string) => {
if (!(group in data)) {
load(group);
}
};
const save = (group: string) => {
const path = filePath(group);
const dir = nodePath.dirname(path);
if (!fs.existsSync(dir)) {
fs.mkdirSync(dir, { recursive: true });
}
fs.writeFileSync(path, JSON.stringify(data[group], null, 4));
};
const all = async (group: string) => {
await waitAppEnvReady();
loadIfNeed(group);
return data[group];
};
const get = async (group: string, key: string, defaultValue: any) => {
await waitAppEnvReady();
loadIfNeed(group);
if (!(key in data[group])) {
data[group][key] = defaultValue;
save(group);
}
return data[group][key];
};
const set = async (group: string, key: string, value: any) => {
await waitAppEnvReady();
loadIfNeed(group);
data[group][key] = value;
save(group);
};
const read = async (group: string, defaultValue: any) => {
await waitAppEnvReady();
loadIfNeed(group);
if (!(group in data)) {
data[group] = defaultValue;
save(group);
}
return data[group];
};
const write = async (group: string, value: any) => {
await waitAppEnvReady();
loadIfNeed(group);
data[group] = value;
save(group);
};
ipcMain.handle("storage:all", async (event, group: string) => {
return await all(group);
});
ipcMain.handle(
"storage:get",
async (event, group: string, key: string, defaultValue: any) => {
return await get(group, key, defaultValue);
},
);
ipcMain.handle(
"storage:set",
async (event, group: string, key: string, value: any) => {
return await set(group, key, value);
},
);
ipcMain.handle(
"storage:read",
async (event, group: string, defaultValue: any) => {
return await read(group, defaultValue);
},
);
ipcMain.handle("storage:write", async (event, group: string, value: any) => {
return await write(group, value);
});
export const StorageMain = {
all,
get,
set,
read,
write,
};
export default StorageMain;