Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
ulixee
GitHub Repository: ulixee/secret-agent
Path: blob/main/replay/backend/storage/index.ts
1030 views
1
import SettingsDb, { ISettings } from './SettingsDb';
2
import HistoryDb from './HistoryDb';
3
import WindowStateDb, { IWindowState } from './WindowStateDb';
4
import { IHistoryRecord } from "~shared/interfaces/IHistoryRecord";
5
6
class Storage {
7
private readonly settingsDb = new SettingsDb();
8
private readonly windowStateDb = new WindowStateDb();
9
private readonly historyDb = new HistoryDb();
10
11
public get settings(): ISettings {
12
return { ...this.settingsDb.fetch() };
13
}
14
15
public set settings(settings: ISettings) {
16
this.settingsDb.update(settings);
17
this.settingsDb.persist();
18
// Application.instance.overlayManager.sendToAll('update-settings', settings);
19
// for (const window of Application.instance.windowManager.list) {
20
// window.sendToRenderer('update-settings', settings);
21
// window.tabManager.byId.forEach(async v => {
22
// if (v.webContents.getURL().startsWith(InternalServer.url)) {
23
// v.webContents.send('update-settings', settings);
24
// }
25
// });
26
// }
27
}
28
29
public get windowState(): IWindowState {
30
return { ...this.windowStateDb.fetch() };
31
}
32
33
public set windowState(windowState: IWindowState) {
34
this.windowStateDb.update(windowState);
35
this.windowStateDb.persist();
36
}
37
38
public addToHistory(record: Partial<IHistoryRecord>) {
39
record.id = record.id || `${record.dataLocation}:${record.scriptEntrypoint}`;
40
record.lastAccessedAt = new Date().toISOString();
41
record.firstAccessedAt = record.lastAccessedAt;
42
const prevRecord = this.historyDb.findById(record.id);
43
if (prevRecord) {
44
record.firstAccessedAt = prevRecord.firstAccessedAt;
45
this.historyDb.deleteById(prevRecord.id);
46
}
47
this.historyDb.insert(record as IHistoryRecord);
48
this.historyDb.persist();
49
}
50
51
public fetchHistory() {
52
const history = this.historyDb.fetchAll();
53
return history.filter(x => !!x.scriptEntrypoint);
54
}
55
56
public persistAll() {
57
console.log('Saving storage');
58
this.settingsDb.persist();
59
this.windowStateDb.persist();
60
this.historyDb.persist();
61
}
62
}
63
64
export default new Storage();
65
66