You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
WebCAD/src/Add-on/LoadConfig.ts

102 lines
3.7 KiB

import { FileSystem } from "../Common/FileSystem";
import { ConfigUrls } from "../Common/HostUrl";
import { PostJson, RequestStatus } from "../Common/Request";
import { Command } from "../Editor/CommandMachine";
import { BoardModalType } from "../UI/Components/Board/BoardModal";
import { AppToaster } from "../UI/Components/Toaster";
import { userConfigStore } from "../UI/Store/UserConfigStore";
import { DrillStore } from "../UI/Store/DrillStore";
import { IndexedDbStore, StoreName } from "../IndexedDb/IndexedDbStore";
import { GetIndexDBID } from "../Common/Utils";
import { appCache } from "../Common/AppCache";
import { Intent } from "@blueprintjs/core";
export class DownLoadDConfig implements Command
{
async exec()
{
let keys = Object.values(BoardModalType);
let allConfigs = {};
for (let key of keys)
{
allConfigs[key] = await userConfigStore.GetAllConfigs(key, false);
}
FileSystem.WriteFile("userconfig.json", JSON.stringify(allConfigs));
}
}
export class UpLoadConfig implements Command
{
async exec()
{
FileSystem.ChooseFile({
filter: ".json", callback: async (files) =>
{
let f = files[0];
let fileData = JSON.parse(await FileSystem.ReadFileAsText(f));
for (let i in fileData)
{
if (fileData.hasOwnProperty(i) && fileData[i])
{
let configs = (await userConfigStore.GetAllConfigs(i as BoardModalType, false)) || {};
Object.assign(configs, fileData[i]);
await PostJson(ConfigUrls.Edit, { key: i, value: JSON.stringify(configs) });
}
}
AppToaster.show({
message: "上传完成",
timeout: 1000,
});
}
});
}
}
export class DownloadHoleOption implements Command
{
async exec()
{
let configs = await userConfigStore.GetAllConfigs(BoardModalType.Dr, false);
if (configs)
{
FileSystem.WriteFile("hole.json", JSON.stringify(configs));
}
}
}
export class UploadHoleOption implements Command
{
async exec()
{
FileSystem.ChooseFile({
filter: ".json", callback: async (files) =>
{
let f = files[0];
let fileData = JSON.parse(await FileSystem.ReadFileAsText(f));
let configs = await userConfigStore.GetAllConfigs(BoardModalType.Dr, false) || {};
let store = DrillStore.GetInstance() as DrillStore;
for (let i in fileData)
{
if (fileData.hasOwnProperty(i) && fileData[i])
{
let key = i + "_" + Date.now();
store.configsNames.push(key);
configs[key] = fileData[i];
}
}
let data = await PostJson(ConfigUrls.Edit, { key: BoardModalType.Dr, value: JSON.stringify(configs) });
if (data.err_code === RequestStatus.Ok)
{
let dbStore = await IndexedDbStore.CADStore();
await dbStore.Put(StoreName.ConfigData, GetIndexDBID(BoardModalType.Dr), configs);
await dbStore.Put(StoreName.ConfigVersion, GetIndexDBID(BoardModalType.Dr), data.version);
appCache.set(BoardModalType.Dr, configs);
AppToaster.show({
message: "导入排钻配置完成!",
timeout: 3000,
intent: Intent.SUCCESS
});
}
}
});
}
}