|
|
@ -10,25 +10,68 @@ import { SaveAsModal } from "../UI/Components/Modal/SavaAsModal";
|
|
|
|
import { ModalPosition, ModalState } from "../UI/Components/Modal/ModalInterface";
|
|
|
|
import { ModalPosition, ModalState } from "../UI/Components/Modal/ModalInterface";
|
|
|
|
import { AppToaster } from "../UI/Components/Toaster";
|
|
|
|
import { AppToaster } from "../UI/Components/Toaster";
|
|
|
|
import { IndexedDbStore, StoreName } from "../IndexedDb/IndexedDbStore";
|
|
|
|
import { IndexedDbStore, StoreName } from "../IndexedDb/IndexedDbStore";
|
|
|
|
|
|
|
|
import { Intent } from "@blueprintjs/core";
|
|
|
|
|
|
|
|
import { Database } from "../DatabaseServices/Database";
|
|
|
|
|
|
|
|
import { arrayRemoveIf } from "../Common/ArrayExt";
|
|
|
|
|
|
|
|
import { CADFiler } from "../DatabaseServices/CADFiler";
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//清理历史记录
|
|
|
|
|
|
|
|
const MAX_HS_COUNT = 20;
|
|
|
|
|
|
|
|
|
|
|
|
export class Save implements Command
|
|
|
|
export class Save implements Command
|
|
|
|
{
|
|
|
|
{
|
|
|
|
NoHistory = true;
|
|
|
|
NoHistory = true;
|
|
|
|
async exec()
|
|
|
|
async exec()
|
|
|
|
{
|
|
|
|
{
|
|
|
|
if (app.Saved)
|
|
|
|
const hm = app.Database.hm;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
let curIndex = hm.curIndex;
|
|
|
|
|
|
|
|
let curCount = hm.historyRecord.length;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (app.Saved && curCount < MAX_HS_COUNT)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
app.Editor.Prompt("文件已保存!");
|
|
|
|
app.Editor.Prompt("文件已保存!");
|
|
|
|
return;
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
let fileServer = FileServer.GetInstance() as FileServer;
|
|
|
|
|
|
|
|
let fileData = app.FileOut().Data;
|
|
|
|
let DB = app.Database;
|
|
|
|
|
|
|
|
let f = DB.FileWrite();
|
|
|
|
|
|
|
|
let vf = new CADFiler();
|
|
|
|
|
|
|
|
app.Viewer.CameraCtrl.WriteFile(vf);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (curCount - curIndex <= MAX_HS_COUNT && curCount > MAX_HS_COUNT)
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
DB = new Database().FileRead(f);
|
|
|
|
|
|
|
|
const changeObjects = DB.hm.GetRangeChangeObject(curCount - MAX_HS_COUNT, curCount);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
let deleteCount = DB.hm.historyRecord.splice(0, curCount - MAX_HS_COUNT).length;
|
|
|
|
|
|
|
|
DB.hm.curIndex -= deleteCount;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
arrayRemoveIf(DB.ModelSpace.Entitys, e => e.IsErase && !changeObjects.has(e));
|
|
|
|
|
|
|
|
arrayRemoveIf(DB.TemplateTable.Objects, e => e.IsErase && !changeObjects.has(e));
|
|
|
|
|
|
|
|
arrayRemoveIf(DB.GroupTable.Objects, g =>
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
return !changeObjects.has(g) && (g.Entitys.length === 0 || g.Entitys.every(e => !e || (e.IsErase && !changeObjects.has(e.Object))));
|
|
|
|
|
|
|
|
});
|
|
|
|
|
|
|
|
f = DB.FileWrite();
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
AppToaster.show({
|
|
|
|
|
|
|
|
message: `清理了${deleteCount}条历史记录,剩余${DB.hm.historyRecord.length}条记录,可用PU命令清理全部历史记录!`,
|
|
|
|
|
|
|
|
timeout: 5000,
|
|
|
|
|
|
|
|
intent: Intent.SUCCESS,
|
|
|
|
|
|
|
|
});
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
f.Write(vf.Data);
|
|
|
|
|
|
|
|
let fileData = f.Data;
|
|
|
|
|
|
|
|
|
|
|
|
let file = JSON.stringify(fileData);
|
|
|
|
let file = JSON.stringify(fileData);
|
|
|
|
|
|
|
|
|
|
|
|
file = deflate(file);
|
|
|
|
file = deflate(file);
|
|
|
|
let logo = await uploadLogo(GetCurrentViewPreViewImage());
|
|
|
|
let logo = await uploadLogo(GetCurrentViewPreViewImage());
|
|
|
|
if (!logo) return;
|
|
|
|
if (!logo) return;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
let fileServer = FileServer.GetInstance() as FileServer;
|
|
|
|
if (fileServer.m_CurFileId)
|
|
|
|
if (fileServer.m_CurFileId)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
await fileServer.UpdateFile({ file_id: fileServer.m_CurFileId, file, logo });
|
|
|
|
await fileServer.UpdateFile({ file_id: fileServer.m_CurFileId, file, logo });
|
|
|
|