forked from Stigmatoz/web-activity-time-tracker
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathlocal-storage.ts
More file actions
51 lines (46 loc) · 1.68 KB
/
local-storage.ts
File metadata and controls
51 lines (46 loc) · 1.68 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
import { IStorage } from './storage-interface';
import {
StorageDeserializeParam,
StorageDeserializeType,
StorageParams,
createDeserializeParambject,
} from './storage-params';
import { Tab } from '../entity/tab';
import Browser from 'webextension-polyfill';
import { isEmpty } from '../utils/common';
import { TimeInterval } from '../entity/time-interval';
export class LocalStorage implements IStorage {
async getDeserializeList(param: StorageDeserializeParam): Promise<StorageDeserializeType[]> {
return new Promise(async resolve => {
const obj = await Browser.storage.local.get(param);
const list = obj[param];
if (list != undefined) {
let tempList: StorageDeserializeType[] = [];
for (let i = 0; i < list.length; i++) {
const obj = createDeserializeParambject(param);
tempList.push(obj.deserialize(list[i]));
}
return resolve(tempList);
} else resolve([]);
});
}
async saveTabs(value: Tab[]): Promise<void> {
return await Browser.storage.local.set({ [StorageDeserializeParam.TABS]: value });
}
async saveIntervalList(value: TimeInterval[]): Promise<void> {
return await Browser.storage.local.set({ [StorageDeserializeParam.TIMEINTERVAL_LIST]: value });
}
async saveValue(name: StorageParams, value: any): Promise<void> {
return await Browser.storage.local.set({
[name]: value,
});
}
async getValue(name: StorageParams, defaultValue?: any): Promise<any> {
let value = await Browser.storage.local.get(name);
if (isEmpty(value) && defaultValue != undefined) {
await this.saveValue(name, defaultValue);
return defaultValue;
}
return value[name];
}
}