UNPKG

2.63 kBJavaScriptView Raw
1export default class DBManager {
2 dbName = 'uploadingFiles';
3 storeName = 'filesStore';
4
5 connectDB = (func) => {
6 const isFirefox = typeof InstallTrigger !== 'undefined';
7 const options = isFirefox ? { version: 1, storage: 'persistent' } : 1;
8 const request = indexedDB.open(this.dbName, options);
9
10 request.onerror = this.logger;
11
12 request.onsuccess = (event) => {
13 func(event.target.result);
14 };
15
16 request.onupgradeneeded = (event) => {
17 const db = event.target.result;
18
19 db.createObjectStore(this.storeName, {keyPath: 'id'});
20 this.connectDB(func);
21 };
22 }
23
24 getFile = (file, func) => {
25 this.connectDB((db) => {
26 const request = db.transaction([this.storeName], 'readonly').objectStore(this.storeName).get(file);
27
28 request.onerror = this.logger;
29
30 request.onsuccess = function (event) {
31 func(event.target.result ? event.target.result : -1);
32 };
33 });
34 }
35
36 getStorage = (func) => {
37 this.connectDB((db) => {
38 const rows = [];
39 const store = db.transaction([this.storeName], 'readonly').objectStore(this.storeName);
40
41 if (store.mozGetAll) {
42 store.mozGetAll().onsuccess = (event) => func(event.target.result);
43 } else {
44 store.openCursor().onsuccess = (event) => {
45 const cursor = event.target.result;
46
47 if (cursor) {
48 rows.push(cursor.value);
49 cursor.continue();
50 } else {
51 func(rows);
52 }
53 };
54 }
55 });
56 }
57
58 setFile = (file) => {
59 this.connectDB((db) => {
60 const request = db.transaction([this.storeName], 'readwrite').objectStore(this.storeName).put(file);
61
62 request.onerror = this.logerr;
63 request.onsuccess = (event) => {
64 return event.target.result;
65 };
66 });
67 }
68
69 putFile = (file, updateKey) => {
70 this.connectDB((db) => {
71 const transaction = db.transaction([this.storeName], 'readwrite');
72 const objectStore = transaction.objectStore(this.storeName);
73 const request = objectStore.get(file.id);
74
75 request.onerror = this.logerr;
76 request.onsuccess = (event) => {
77 event.target.result[updateKey] = file[updateKey];
78 objectStore.put(event.target.result);
79 };
80 });
81 }
82
83 delFile = (file) => {
84 this.connectDB((db) => {
85 const request = db.transaction([this.storeName], 'readwrite').objectStore(this.storeName).delete(file);
86
87 request.onerror = this.logerr;
88 request.onsuccess = () => {
89 console.log('File delete from DB:', file);
90 };
91 });
92 }
93
94 logger = (message) => {
95 console.log(message);
96 }
97}