forked from univeous/Pixel-Extractor
-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathstorage.ts
More file actions
68 lines (63 loc) · 2.11 KB
/
storage.ts
File metadata and controls
68 lines (63 loc) · 2.11 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
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
import { HistoryItem } from './types';
const DB_NAME = 'pixel-extractor-db';
const DB_VERSION = 1;
const STORE_NAME = 'history';
const openDB = (): Promise<IDBDatabase> => {
return new Promise((resolve, reject) => {
const request = indexedDB.open(DB_NAME, DB_VERSION);
request.onerror = () => reject(request.error);
request.onsuccess = () => resolve(request.result);
request.onupgradeneeded = (e) => {
const db = (e.target as IDBOpenDBRequest).result;
if (!db.objectStoreNames.contains(STORE_NAME)) {
db.createObjectStore(STORE_NAME, { keyPath: 'id' });
}
};
});
};
export const loadHistoryFromDB = async (): Promise<HistoryItem[]> => {
try {
const db = await openDB();
return new Promise((resolve, reject) => {
const tx = db.transaction(STORE_NAME, 'readonly');
const store = tx.objectStore(STORE_NAME);
const request = store.getAll();
request.onerror = () => reject(request.error);
request.onsuccess = () => {
const items = request.result as HistoryItem[];
items.sort((a, b) => b.timestamp - a.timestamp);
resolve(items);
};
});
} catch {
return [];
}
};
export const saveItemToDB = async (item: HistoryItem): Promise<void> => {
try {
const db = await openDB();
return new Promise((resolve, reject) => {
const tx = db.transaction(STORE_NAME, 'readwrite');
const store = tx.objectStore(STORE_NAME);
const request = store.put(item);
request.onerror = () => reject(request.error);
request.onsuccess = () => resolve();
});
} catch (e) {
console.warn('Failed to save to IndexedDB:', e);
}
};
export const deleteItemFromDB = async (id: string): Promise<void> => {
try {
const db = await openDB();
return new Promise((resolve, reject) => {
const tx = db.transaction(STORE_NAME, 'readwrite');
const store = tx.objectStore(STORE_NAME);
const request = store.delete(id);
request.onerror = () => reject(request.error);
request.onsuccess = () => resolve();
});
} catch (e) {
console.warn('Failed to delete from IndexedDB:', e);
}
};