Files
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

122 lines
2.4 KiB
TypeScript

import path from "node:path";
import { AppEnv } from "../env";
import fs from "node:fs";
import { ipcMain } from "electron";
import { Events } from "../event/main";
let data = null;
let dataEnv = {};
const userDataRoot = () => {
return path.join(AppEnv.userData, "config.json");
};
const dataRoot = () => {
return path.join(AppEnv.dataRoot, "config.json");
};
const filePath = () => {
if (fs.existsSync(userDataRoot())) {
return userDataRoot();
}
return dataRoot();
};
const load = () => {
try {
let json = fs.readFileSync(filePath()).toString();
json = JSON.parse(json);
data = json || {};
} catch (e) {
data = {};
}
};
const loadIfNeed = () => {
if (data === null) {
load();
}
};
const save = () => {
fs.writeFileSync(filePath(), JSON.stringify(data, null, 4));
};
const all = async () => {
loadIfNeed();
return data;
};
const get = async (key: string, defaultValue: any = null) => {
loadIfNeed();
if (!(key in data)) {
data[key] = defaultValue;
save();
}
return data[key];
};
const set = async (key: string, value: any) => {
loadIfNeed();
data[key] = value;
save();
};
const allEnv = async () => {
return dataEnv;
};
const getEnv = async (key: string, defaultValue: any = null) => {
if (!(key in dataEnv)) {
dataEnv[key] = defaultValue;
}
return dataEnv[key];
};
const setEnv = async (key: string, value: any) => {
dataEnv[key] = value;
};
ipcMain.handle("config:all", async (_) => {
return await all();
});
ipcMain.handle(
"config:get",
async (_, key: string, defaultValue: any = null) => {
return await get(key, defaultValue);
},
);
ipcMain.handle("config:set", async (_, key: string, value: any) => {
const res = await set(key, value);
Events.broadcast("ConfigChange", { key, value });
return res;
});
ipcMain.handle("config:allEnv", async (_) => {
return await allEnv();
});
ipcMain.handle(
"config:getEnv",
async (_, key: string, defaultValue: any = null) => {
return await getEnv(key, defaultValue);
},
);
ipcMain.handle("config:setEnv", async (_, key: string, value: any) => {
const res = await setEnv(key, value);
Events.broadcast("ConfigEnvChange", { key, value });
return res;
});
export const ConfigMain = {
all,
get,
set,
allEnv,
getEnv,
setEnv,
};
export default ConfigMain;