A lot of updates
This commit is contained in:
@@ -1,82 +0,0 @@
|
||||
import * as electron from "electron";
|
||||
import * as path from "path";
|
||||
import * as fs from "fs-extra";
|
||||
|
||||
const APP_DATA = electron.remote.app.getPath("userData");
|
||||
const SETTINGS_DIR = path.join(APP_DATA, "settings");
|
||||
|
||||
let _local_storage: {[key: string]: any} = {};
|
||||
let _local_storage_save: {[key: string]: boolean} = {};
|
||||
export async function initialize() {
|
||||
await fs.mkdirs(SETTINGS_DIR);
|
||||
|
||||
const files = await fs.readdir(SETTINGS_DIR);
|
||||
for(const file of files) {
|
||||
const key = decodeURIComponent(file);
|
||||
console.log("Load settings: %s", key);
|
||||
|
||||
try {
|
||||
const data = await fs.readFile(path.join(SETTINGS_DIR, file));
|
||||
const decoded = JSON.parse(data.toString() || "{}");
|
||||
|
||||
_local_storage[key] = decoded;
|
||||
} catch(error) {
|
||||
console.error("Failed to load settings for %s: %o", key, error);
|
||||
}
|
||||
}
|
||||
|
||||
let _new_storage: Storage = {} as any;
|
||||
|
||||
_new_storage.getItem = key => _local_storage[key] || null;
|
||||
_new_storage.setItem = (key, value) => {
|
||||
_local_storage[key] = value;
|
||||
_local_storage_save[key] = true;
|
||||
save_key(key).catch(error => {
|
||||
console.warn("Failed to save key: %s => %o", key, error);
|
||||
});
|
||||
(_new_storage as any)["length"] = Object.keys(_local_storage).length;
|
||||
};
|
||||
|
||||
_new_storage.clear = () => {
|
||||
_local_storage = {};
|
||||
_local_storage_save = {};
|
||||
|
||||
try {
|
||||
fs.emptyDirSync(SETTINGS_DIR);
|
||||
} catch(error) {
|
||||
console.warn("Failed to empty settings dir");
|
||||
}
|
||||
(_new_storage as any)["length"] = 0;
|
||||
};
|
||||
|
||||
_new_storage.key = index => Object.keys(_local_storage)[index];
|
||||
_new_storage.removeItem = key => {
|
||||
delete _local_storage[key];
|
||||
delete_key(key).catch(error => {
|
||||
console.warn("Failed to delete key on fs: %s => %o", key, error);
|
||||
});
|
||||
(_new_storage as any)["length"] = Object.keys(_local_storage).length;
|
||||
};
|
||||
|
||||
Object.assign(window.localStorage, _new_storage);
|
||||
}
|
||||
|
||||
export async function save_all() {
|
||||
let promises: Promise<void>[] = [];
|
||||
for(const key of Object.keys(_local_storage))
|
||||
promises.push(save_key(key));
|
||||
await Promise.all(promises);
|
||||
}
|
||||
|
||||
export async function save_key(key: string) {
|
||||
if(!_local_storage_save[key])
|
||||
return;
|
||||
|
||||
_local_storage_save[key] = false;
|
||||
await fs.writeJson(path.join(SETTINGS_DIR, encodeURIComponent(key)), _local_storage[key], {spaces: 0});
|
||||
}
|
||||
|
||||
export async function delete_key(key: string) {
|
||||
delete _local_storage_save[key];
|
||||
await fs.remove(path.join(SETTINGS_DIR, encodeURIComponent(key)));
|
||||
}
|
||||
Reference in New Issue
Block a user