!1258 优化:文件缓存到浏览器DB

pull/1258/MERGE
ZoeLeeFZ 4 years ago committed by ChenX
parent b8cd012141
commit 21330b230a

@ -24,9 +24,10 @@ export class ReOpen implements Command
if (fileServer.m_CurFileId)
{
let id = fileServer.m_CurFileId;
let md5 = fileServer.CurrentFileMd5;
app.CreateDocument();
fileServer.Clear();
fileServer.OpenFile(id);
fileServer.OpenFile(id, md5);
}
}
}

@ -1,5 +1,4 @@
import { app } from "../ApplicationServices/Application";
import { appCache } from "../Common/AppCache";
import { FileUrls } from "../Common/HostUrl";
import { DirectoryId, PostJson, RequestStatus } from "../Common/Request";
import { inflate } from "../Common/SerializeMaterial";
@ -11,6 +10,8 @@ import { AppConfirm } from "../UI/Components/Common/Confirm";
import { TempEditor } from "../Editor/TempEditor";
import { AppToaster } from "../UI/Components/Toaster";
import { Intent } from "@blueprintjs/core";
import { IndexedDbStore, StoreName } from "../IndexedDb/IndexedDbStore";
import { GetIndexDBID } from "../Common/Utils";
export interface IFileInfo
{
@ -118,9 +119,14 @@ export class FileServer extends Singleton
}
async GetFileInfo(fid: string, md5: string): Promise<{ name: string; file?: string; code: string; }>
{
let key = `f${fid}-${md5}`;
if (md5 && appCache.has(key))
return appCache.get(key);
let store = await IndexedDbStore.CADStore();
let fileCache = await store.Get(StoreName.Dwg, GetIndexDBID(fid));
if (fileCache?.code === md5)
{
return fileCache;
}
else
{
let data = await PostJson(FileUrls.detail, { file_id: fid });
@ -131,12 +137,17 @@ export class FileServer extends Singleton
file: inflate(data.files.file),
code: data.files.code
};
appCache.set(`f${fid}-${data.files.code}`, f);
await this.CacheFileInfo(fid, f);
return f;
}
}
return null;
}
async CacheFileInfo(fid: string, info: IFileInfo)
{
let dbStore = await IndexedDbStore.CADStore();
await dbStore.Put(StoreName.Dwg, GetIndexDBID(fid), info);
}
async UploadFile(fileInfo: IFileInfo)
{
let info: IFileInfo = {
@ -151,14 +162,12 @@ export class FileServer extends Singleton
let data = await PostJson(FileUrls.create, info);
if (data.err_code === RequestStatus.Ok)
{
let finfo: any = {};
if (info.file)
finfo.file = inflate(info.file);
if (info.name)
finfo.name = info.name;
appCache.set(`f${data.files.file_id}-${data.files.code}`, finfo);
let finfo: IFileInfo = {
file: inflate(info.file),
name: info.name,
code: data.files.code
};
await this.CacheFileInfo(data.files.file_id, finfo);
}
return data;
}
@ -169,13 +178,13 @@ export class FileServer extends Singleton
let data = await PostJson(FileUrls.update, fileInfo);
if (data.err_code === RequestStatus.Ok)
{
let key = `f${data.files.file_id}-${data.files.code}`;
let finfo: IFileInfo = {};
if (fileInfo.file)
finfo.file = inflate(fileInfo.file);
if (fileInfo.name)
finfo.name = fileInfo.name;
appCache.set(key, finfo);
let finfo: IFileInfo = {
file: inflate(fileInfo.file),
name: data.files.name,
code: data.files.code
};
await this.CacheFileInfo(data.files.file_id, finfo);
}
return data;
}

@ -157,11 +157,13 @@ export class IndexedDbStore
Put(storeName: StoreName, key: string, value: any)
{
if (!key) return;
let tr = this.db.transaction(storeName, DbMode.ReadWrite);
return tr.objectStore(storeName).put(value, key);
}
async Get(storeName: StoreName, key: string)
{
if (!key) return;
return new Promise<any>((res) =>
{
let tr = this.db.transaction(storeName, DbMode.ReadOnly);

@ -441,7 +441,7 @@ export class UserConfigStore extends Singleton
{
let indexDbStore = await IndexedDbStore.CADStore();
let data = await indexDbStore.Get(StoreName.FileCache, localStorage.getItem(StoreageKeys.Uid));
let data = await indexDbStore.Get(StoreName.FileCache, localStorage.getItem(StoreageKeys.Uid) || "");
if (data)
{

Loading…
Cancel
Save