1 | export 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 | }
|