@gudhub/core 1.2.4-beta.46 → 1.2.4-beta.47
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.parcel-cache/d3a1b9507cb44047-AssetGraph +0 -0
- package/.parcel-cache/data.mdb +0 -0
- package/.parcel-cache/dc1da35000e13623-RequestGraph +0 -0
- package/.parcel-cache/lock.mdb +0 -0
- package/.parcel-cache/snapshot-dc1da35000e13623.txt +129 -132
- package/GUDHUB/AppProcessor/AppProcessor.js +6 -20
- package/GUDHUB/ChunksManager/ChunksManager.test.js +3 -0
- package/GUDHUB/DataService/AppDataService.js +1 -200
- package/GUDHUB/DataService/ChunkDataService.js +0 -4
- package/GUDHUB/DataService/IndexedDB/IndexedDBAppService.js +224 -263
- package/GUDHUB/DataService/IndexedDB/IndexedDBChunkService.js +3 -227
- package/GUDHUB/DataService/IndexedDB/IndexedDBService.js +124 -302
- package/GUDHUB/DataService/IndexedDB/StoreManager/BaseStoreManager.js +9 -36
- package/GUDHUB/DataService/IndexedDB/StoreManager/managers.js +4 -40
- package/GUDHUB/DataService/IndexedDB/appRequestWorker.js +23 -88
- package/GUDHUB/DataService/IndexedDB/consts.js +1 -3
- package/GUDHUB/DataService/IndexedDB/init.js +1 -1
- package/GUDHUB/DataService/IndexedDB/storeManagerConf/init.js +1 -1
- package/GUDHUB/DataService/export.js +73 -13
- package/GUDHUB/DataService/httpService/AppHttpService.js +5 -15
- package/GUDHUB/DataService/httpService/ChunkHttpService.js +35 -37
- package/GUDHUB/DataService/utils.js +24 -127
- package/GUDHUB/GHConstructor/createAngularModuleInstance.js +7 -4
- package/GUDHUB/GHConstructor/createClassInstance.js +8 -3
- package/GUDHUB/ItemProcessor/ItemProcessor.js +0 -18
- package/GUDHUB/Storage/ModulesList.js +0 -7
- package/GUDHUB/Utils/Utils.js +0 -14
- package/GUDHUB/WebSocket/WebSocket.js +2 -2
- package/GUDHUB/api/AppApi.js +13 -13
- package/GUDHUB/api/ChunkApi.js +5 -5
- package/GUDHUB/config.js +11 -2
- package/GUDHUB/consts.js +6 -12
- package/GUDHUB/gudhub.js +7 -30
- package/GUDHUB/gudhubAppRequestWorker.js +1 -2
- package/package.json +4 -2
- package/GUDHUB/ChunksManager/ChunksManager.js +0 -68
- package/indextest.html +0 -35
|
@@ -4,346 +4,168 @@ import { dbName, dbVersion } from "./consts.js";
|
|
|
4
4
|
import { chunksMergeConf } from "./storeManagerConf/chunkCacheStoreManagerConf.js";
|
|
5
5
|
|
|
6
6
|
|
|
7
|
-
// этот класс для наследования был создан, т.е. надо подумать как его скомпоновать с IndexedDBManager
|
|
8
|
-
export class IndexedDBService {
|
|
9
|
-
constructor(conf) {
|
|
10
|
-
this.store = conf.store;
|
|
11
|
-
this.dbName = conf.dbName;
|
|
12
|
-
this.dbVersion = conf.dbVersion;
|
|
13
|
-
|
|
14
|
-
this.requestCache = new Map; // id -> promise ///TODO seems irrelevant to class IndexedDBManager (could be renamed to Facade already)
|
|
15
|
-
}
|
|
16
|
-
}
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
//Maybe rename to Facade
|
|
20
|
-
export class IndexedDBManager {
|
|
21
|
-
constructor(
|
|
22
|
-
dbName,
|
|
23
|
-
// dbVersion,
|
|
24
|
-
storeNameList,
|
|
25
|
-
) {
|
|
26
|
-
if (
|
|
27
|
-
!IndexedDBManager.dbNameToInstanceMap
|
|
28
|
-
) {
|
|
29
|
-
IndexedDBManager.dbNameToInstanceMap = new Map;
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
if (
|
|
33
|
-
IndexedDBManager.dbNameToInstanceMap.has(dbName)
|
|
34
|
-
) return IndexedDBManager.dbNameToInstanceMap.get(dbName);
|
|
35
|
-
|
|
36
|
-
this.db = null;
|
|
37
|
-
// this.queue = [];
|
|
38
|
-
// this.isProcessing = false;
|
|
39
|
-
|
|
40
|
-
this.dbName = dbName;
|
|
41
|
-
// this.dbVersion = dbVersion;
|
|
42
|
-
this.storeNameList = storeNameList;
|
|
43
|
-
// this.storeNameList = [];
|
|
44
|
-
|
|
45
|
-
IndexedDBManager.dbNameToInstanceMap.set(dbName, this);
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
// this.db = new Promise((resolve, reject) => {
|
|
49
|
-
|
|
50
|
-
// });
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
// this.dbPrms = this.openDB();
|
|
54
|
-
|
|
55
|
-
this.db = null;
|
|
56
7
|
|
|
8
|
+
export class StoreBackend { }
|
|
57
9
|
|
|
58
|
-
// this.db = this.openDB();
|
|
59
10
|
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
11
|
+
export class IndexedDBManager extends StoreBackend {
|
|
12
|
+
constructor(
|
|
13
|
+
dbName,
|
|
14
|
+
storeNameList,
|
|
15
|
+
) {
|
|
16
|
+
if (
|
|
17
|
+
!IndexedDBManager.dbNameToInstanceMap
|
|
18
|
+
) {
|
|
19
|
+
IndexedDBManager.dbNameToInstanceMap = new Map;
|
|
63
20
|
}
|
|
64
21
|
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
const dbInfo = databases.find(db => db.name === this.dbName);
|
|
69
|
-
|
|
70
|
-
let storeExists = false;
|
|
22
|
+
if (
|
|
23
|
+
IndexedDBManager.dbNameToInstanceMap.has(dbName)
|
|
24
|
+
) return IndexedDBManager.dbNameToInstanceMap.get(dbName);
|
|
71
25
|
|
|
72
|
-
|
|
26
|
+
this.db = null;
|
|
27
|
+
// this.queue = [];
|
|
28
|
+
// this.isProcessing = false;
|
|
73
29
|
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
) {
|
|
77
|
-
storeExists = await new Promise((resolve, reject) => {
|
|
78
|
-
const request = indexedDB.open(self.dbName);
|
|
79
|
-
|
|
80
|
-
request.onsuccess = function(event) {
|
|
81
|
-
const db = event.target.result;
|
|
82
|
-
const exists = db.objectStoreNames.contains(storeName);
|
|
83
|
-
db.close();
|
|
84
|
-
resolve(exists);
|
|
85
|
-
};
|
|
86
|
-
|
|
87
|
-
request.onerror = function(event) {
|
|
88
|
-
reject(event.target.error);
|
|
89
|
-
};
|
|
90
|
-
});
|
|
91
|
-
|
|
92
|
-
//TODO try catch for promise reject
|
|
93
|
-
}
|
|
30
|
+
this.dbName = dbName;
|
|
31
|
+
this.storeNameList = storeNameList;
|
|
94
32
|
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
) {
|
|
98
|
-
return new Promise((resolve, reject) => {
|
|
99
|
-
const request = indexedDB.open(self.dbName, dbInfo ? dbInfo.version + 1 : 1);
|
|
33
|
+
IndexedDBManager.dbNameToInstanceMap.set(dbName, this);
|
|
34
|
+
}
|
|
100
35
|
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
!db.objectStoreNames.contains(storeName)
|
|
105
|
-
) {
|
|
106
|
-
db.createObjectStore(storeName);
|
|
107
|
-
}
|
|
108
|
-
};
|
|
36
|
+
async checkAndCreateStore(storeName) {
|
|
37
|
+
const databases = await indexedDB.databases();
|
|
38
|
+
const dbInfo = databases.find(db => db.name === this.dbName);
|
|
109
39
|
|
|
110
|
-
|
|
111
|
-
const db = event.target.result;
|
|
112
|
-
db.close();
|
|
113
|
-
resolve();
|
|
114
|
-
};
|
|
40
|
+
let storeExists = false;
|
|
115
41
|
|
|
116
|
-
|
|
117
|
-
});
|
|
42
|
+
let self = this;
|
|
118
43
|
|
|
44
|
+
if (
|
|
45
|
+
dbInfo
|
|
46
|
+
) {
|
|
47
|
+
storeExists = await new Promise((resolve, reject) => {
|
|
48
|
+
const request = indexedDB.open(self.dbName);
|
|
49
|
+
|
|
50
|
+
request.onsuccess = function (event) {
|
|
51
|
+
const db = event.target.result;
|
|
52
|
+
const exists = db.objectStoreNames.contains(storeName);
|
|
53
|
+
db.close();
|
|
54
|
+
resolve(exists);
|
|
55
|
+
};
|
|
119
56
|
|
|
120
|
-
|
|
121
|
-
|
|
57
|
+
request.onerror = function (event) {
|
|
58
|
+
reject(event.target.error);
|
|
59
|
+
};
|
|
60
|
+
});
|
|
122
61
|
|
|
123
|
-
//TODO
|
|
124
|
-
return true;
|
|
62
|
+
//TODO try catch for promise reject
|
|
125
63
|
}
|
|
126
64
|
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
65
|
+
if (
|
|
66
|
+
!storeExists
|
|
67
|
+
) {
|
|
68
|
+
return new Promise((resolve, reject) => {
|
|
69
|
+
const request = indexedDB.open(self.dbName, dbInfo ? dbInfo.version + 1 : 1);
|
|
70
|
+
|
|
71
|
+
request.onupgradeneeded = function (event) {
|
|
72
|
+
const db = event.target.result;
|
|
73
|
+
if (
|
|
74
|
+
!db.objectStoreNames.contains(storeName)
|
|
75
|
+
) {
|
|
76
|
+
db.createObjectStore(storeName);
|
|
77
|
+
}
|
|
78
|
+
};
|
|
141
79
|
|
|
142
|
-
|
|
80
|
+
request.onsuccess = function (event) {
|
|
81
|
+
const db = event.target.result;
|
|
82
|
+
db.close();
|
|
83
|
+
resolve();
|
|
84
|
+
};
|
|
143
85
|
|
|
144
|
-
|
|
145
|
-
resolver = resolve;
|
|
146
|
-
rejecter = reject;
|
|
86
|
+
request.onerror = reject;
|
|
147
87
|
});
|
|
148
88
|
|
|
149
|
-
for (let storeName of this.storeNameList) {
|
|
150
|
-
await this.checkAndCreateStore(storeName);
|
|
151
|
-
}
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
let self = this;
|
|
156
|
-
|
|
157
|
-
// return new Promise((resolve, reject) => {
|
|
158
|
-
// const request = indexedDB.open(this.dbName, this.dbVersion);
|
|
159
|
-
const request = indexedDB.open(this.dbName);
|
|
160
|
-
|
|
161
|
-
// request.onupgradeneeded = (event) => {
|
|
162
|
-
// const db = event.target.result;
|
|
163
|
-
|
|
164
|
-
// this.storeNameList.forEach(storeName => {
|
|
165
|
-
// if (
|
|
166
|
-
// !db.objectStoreNames.contains(storeName)
|
|
167
|
-
// ) {
|
|
168
|
-
// db.createObjectStore(storeName);
|
|
169
|
-
// }
|
|
170
|
-
// });
|
|
171
|
-
// };
|
|
172
|
-
|
|
173
|
-
request.onsuccess = (event) => {
|
|
174
|
-
self.db = event.target.result;
|
|
175
|
-
|
|
176
|
-
// let version = this.db.version;
|
|
177
|
-
|
|
178
|
-
resolver(this.db);
|
|
179
|
-
};
|
|
180
|
-
|
|
181
|
-
request.onerror = rejecter;
|
|
182
89
|
|
|
183
|
-
|
|
184
|
-
// });
|
|
90
|
+
//TODO try catch for reject
|
|
185
91
|
}
|
|
186
|
-
|
|
187
|
-
async executeOperation(storeName, operation) {
|
|
188
|
-
|
|
189
|
-
//this get executed more than 1 time
|
|
190
|
-
let db = await this.openDB();
|
|
191
|
-
|
|
192
|
-
// if (
|
|
193
|
-
// !this.db
|
|
194
|
-
// ) {
|
|
195
|
-
// throw new Error("Database not initialized. Call openDB first.");
|
|
196
|
-
// }
|
|
197
92
|
|
|
93
|
+
//TODO maybe not return anything it will be ok for promise resolve
|
|
94
|
+
return true;
|
|
95
|
+
}
|
|
198
96
|
|
|
199
|
-
|
|
97
|
+
async openDB() {
|
|
98
|
+
if (this.db) return this.db;
|
|
200
99
|
|
|
100
|
+
let resolver, rejecter;
|
|
201
101
|
|
|
202
|
-
|
|
102
|
+
let dbPrms = new Promise((resolve, reject) => {
|
|
103
|
+
resolver = resolve;
|
|
104
|
+
rejecter = reject;
|
|
105
|
+
});
|
|
203
106
|
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
return new Promise((resolve, reject) => {
|
|
207
|
-
const transaction = db.transaction(storeName, 'readwrite'); //TODO not all operations readwrite
|
|
208
|
-
const store = transaction.objectStore(storeName);
|
|
209
|
-
|
|
210
|
-
transaction.oncomplete = () => resolve();
|
|
211
|
-
transaction.onerror = (event) => reject(`Transaction failed: ${event.target.error}`);
|
|
212
|
-
|
|
213
|
-
try {
|
|
214
|
-
operation(store);
|
|
215
|
-
} catch (error) {
|
|
216
|
-
reject(`Operation failed: ${error.message}`);
|
|
217
|
-
}
|
|
218
|
-
});
|
|
219
|
-
}
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
// в инете пишут что индексдб сам хендлит транзакции, может не нужно вообще городить эти конструкции
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
// async enqueueOperation(storeName, type, operation) {
|
|
226
|
-
// await this.ensureStoreExists(storeName); // Ensure the store exists <-----------------------
|
|
227
|
-
// const db = await this.dbPromise;
|
|
228
|
-
// return new Promise((resolve, reject) => {
|
|
229
|
-
// const transaction = db.transaction(storeName, type);
|
|
230
|
-
// const store = transaction.objectStore(storeName);
|
|
231
|
-
// const request = operation(store);
|
|
232
|
-
|
|
233
|
-
// request.onsuccess = (event) => {
|
|
234
|
-
// resolve(event.target.result);
|
|
235
|
-
// };
|
|
236
|
-
|
|
237
|
-
// request.onerror = (event) => {
|
|
238
|
-
// reject(event.target.error);
|
|
239
|
-
// };
|
|
240
|
-
// });
|
|
241
|
-
// }
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
async enqueueOperation(storeName, operation) {
|
|
245
|
-
this.queue.push({ storeName, operation });
|
|
246
|
-
|
|
247
|
-
if (!this.isProcessing) {
|
|
248
|
-
this.isProcessing = true;
|
|
249
|
-
while (this.queue.length > 0) {
|
|
250
|
-
const { storeName, operation } = this.queue.shift();
|
|
251
|
-
try {
|
|
252
|
-
await this.executeOperation(storeName, operation);
|
|
253
|
-
} catch (error) {
|
|
254
|
-
console.error('Operation failed:', error);
|
|
255
|
-
}
|
|
256
|
-
}
|
|
257
|
-
this.isProcessing = false;
|
|
258
|
-
}
|
|
107
|
+
for (let storeName of this.storeNameList) {
|
|
108
|
+
await this.checkAndCreateStore(storeName);
|
|
259
109
|
}
|
|
260
110
|
|
|
261
|
-
|
|
262
|
-
async ensureStoreExists(storeName) {
|
|
111
|
+
let self = this;
|
|
263
112
|
|
|
264
|
-
|
|
113
|
+
const request = indexedDB.open(this.dbName);
|
|
265
114
|
|
|
115
|
+
request.onsuccess = (event) => {
|
|
116
|
+
self.db = event.target.result;
|
|
117
|
+
resolver(this.db);
|
|
118
|
+
};
|
|
266
119
|
|
|
267
|
-
|
|
268
|
-
// const db = await this.dbPromise;
|
|
269
|
-
// if (!db.objectStoreNames.contains(storeName)) {
|
|
270
|
-
// this.db.close();
|
|
271
|
-
// const version = db.version + 1;
|
|
272
|
-
// const request = indexedDB.open(this.dbName, version);
|
|
273
|
-
|
|
274
|
-
// request.onupgradeneeded = (event) => {
|
|
275
|
-
// const upgradedDb = event.target.result;
|
|
276
|
-
// if (!upgradedDb.objectStoreNames.contains(storeName)) {
|
|
277
|
-
// upgradedDb.createObjectStore(storeName, { keyPath: 'id', autoIncrement: true });
|
|
278
|
-
// }
|
|
279
|
-
// };
|
|
280
|
-
|
|
281
|
-
// return new Promise((resolve, reject) => {
|
|
282
|
-
// request.onsuccess = (event) => {
|
|
283
|
-
// this.db = event.target.result;
|
|
284
|
-
// this.dbPromise = Promise.resolve(this.db); // Update the dbPromise
|
|
285
|
-
// resolve(this.db);
|
|
286
|
-
// };
|
|
287
|
-
|
|
288
|
-
// request.onerror = (event) => {
|
|
289
|
-
// reject(event.target.error);
|
|
290
|
-
// };
|
|
291
|
-
// });
|
|
292
|
-
// }
|
|
293
|
-
// return Promise.resolve(db);
|
|
294
|
-
// }
|
|
295
|
-
|
|
296
|
-
async createObjectStore(storeName) {
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
// async createObjectStore(storeName) {
|
|
300
|
-
// const db = await this.dbPromise;
|
|
301
|
-
// if (!db.objectStoreNames.contains(storeName)) {
|
|
302
|
-
// db.close();
|
|
303
|
-
// const version = db.version + 1;
|
|
304
|
-
// const request = indexedDB.open(this.dbName, version);
|
|
305
|
-
|
|
306
|
-
// request.onupgradeneeded = (event) => {
|
|
307
|
-
// const upgradedDb = event.target.result;
|
|
308
|
-
// if (!upgradedDb.objectStoreNames.contains(storeName)) {
|
|
309
|
-
// upgradedDb.createObjectStore(storeName, { keyPath: 'id', autoIncrement: true });
|
|
310
|
-
// }
|
|
311
|
-
// };
|
|
312
|
-
|
|
313
|
-
// return new Promise((resolve, reject) => {
|
|
314
|
-
// request.onsuccess = (event) => {
|
|
315
|
-
// this.db = event.target.result;
|
|
316
|
-
// resolve(this.db);
|
|
317
|
-
// };
|
|
318
|
-
|
|
319
|
-
// request.onerror = (event) => {
|
|
320
|
-
// reject(event.target.error);
|
|
321
|
-
// };
|
|
322
|
-
// });
|
|
323
|
-
// }
|
|
324
|
-
// return Promise.resolve(db);
|
|
325
|
-
// }
|
|
120
|
+
request.onerror = rejecter;
|
|
326
121
|
|
|
327
|
-
|
|
122
|
+
return dbPrms;
|
|
328
123
|
}
|
|
329
|
-
|
|
330
|
-
export const gudhubIndexedDBManager = new IndexedDBManager(
|
|
331
|
-
dbName,
|
|
332
|
-
// dbVersion,
|
|
333
|
-
[
|
|
334
|
-
appsConf.store,
|
|
335
|
-
chunksConf.store,
|
|
336
|
-
chunksMergeConf.store,
|
|
337
|
-
],
|
|
338
|
-
);
|
|
339
124
|
|
|
340
|
-
|
|
125
|
+
async executeOperation(storeName, operation) {
|
|
341
126
|
|
|
127
|
+
// TODO this get executed more than 1 time
|
|
128
|
+
let db = await this.openDB();
|
|
342
129
|
|
|
130
|
+
return new Promise((resolve, reject) => {
|
|
131
|
+
const transaction = db.transaction(storeName, 'readwrite'); //TODO not all operations readwrite
|
|
132
|
+
const store = transaction.objectStore(storeName);
|
|
343
133
|
|
|
344
|
-
|
|
134
|
+
transaction.oncomplete = () => resolve();
|
|
135
|
+
transaction.onerror = (event) => reject(`Transaction failed: ${event.target.error}`);
|
|
345
136
|
|
|
137
|
+
try {
|
|
138
|
+
operation(store);
|
|
139
|
+
} catch (error) {
|
|
140
|
+
reject(`Operation failed: ${error.message}`);
|
|
141
|
+
}
|
|
142
|
+
});
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
// async enqueueOperation(storeName, operation) {
|
|
146
|
+
// this.queue.push({ storeName, operation });
|
|
147
|
+
|
|
148
|
+
// if (!this.isProcessing) {
|
|
149
|
+
// this.isProcessing = true;
|
|
150
|
+
// while (this.queue.length > 0) {
|
|
151
|
+
// const { storeName, operation } = this.queue.shift();
|
|
152
|
+
// try {
|
|
153
|
+
// await this.executeOperation(storeName, operation);
|
|
154
|
+
// } catch (error) {
|
|
155
|
+
// console.error('Operation failed:', error);
|
|
156
|
+
// }
|
|
157
|
+
// }
|
|
158
|
+
// this.isProcessing = false;
|
|
159
|
+
// }
|
|
160
|
+
// }
|
|
161
|
+
}
|
|
346
162
|
|
|
347
|
-
// await this.ensureStoreExists(storeName); // Ensure the store exists - вот этот код вроде ок, т.е. перед выполнением след операции проверка
|
|
348
163
|
|
|
349
|
-
|
|
164
|
+
export const indexedDBStoreBackendSingleton = new IndexedDBManager(
|
|
165
|
+
dbName,
|
|
166
|
+
[
|
|
167
|
+
appsConf.store,
|
|
168
|
+
chunksConf.store,
|
|
169
|
+
chunksMergeConf.store,
|
|
170
|
+
],
|
|
171
|
+
);
|
|
@@ -1,17 +1,13 @@
|
|
|
1
1
|
export class BaseStoreManager {
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
this.dbManager = dbManager;
|
|
5
|
-
// this.dbName = dbName;
|
|
2
|
+
constructor(storeBackend, storeName) {
|
|
3
|
+
this.storeBackend = storeBackend;
|
|
6
4
|
this.storeName = storeName;
|
|
7
|
-
// this.dbManager.openDB(this.dbName, [this.storeName]);
|
|
8
|
-
// this.dbManager.ensureStoreExists(this.storeName);
|
|
9
5
|
}
|
|
10
6
|
|
|
11
7
|
async addItem(id, data) {
|
|
12
8
|
return new Promise(async (resolve, reject) => {
|
|
13
9
|
|
|
14
|
-
this.
|
|
10
|
+
this.storeBackend.executeOperation(this.storeName, (store) => {
|
|
15
11
|
const request = store.add(data, id);
|
|
16
12
|
|
|
17
13
|
request.onsuccess = resolve;
|
|
@@ -24,7 +20,7 @@ export class BaseStoreManager {
|
|
|
24
20
|
async putItem(id, data) {
|
|
25
21
|
return new Promise(async (resolve, reject) => {
|
|
26
22
|
|
|
27
|
-
this.
|
|
23
|
+
this.storeBackend.executeOperation(this.storeName, (store) => {
|
|
28
24
|
const request = store.put(data, id);
|
|
29
25
|
|
|
30
26
|
request.onsuccess = resolve;
|
|
@@ -35,9 +31,6 @@ export class BaseStoreManager {
|
|
|
35
31
|
}
|
|
36
32
|
|
|
37
33
|
async hasItem(id) {
|
|
38
|
-
|
|
39
|
-
// debugger
|
|
40
|
-
|
|
41
34
|
try {
|
|
42
35
|
let item = await this.getItem(id);
|
|
43
36
|
|
|
@@ -49,27 +42,12 @@ export class BaseStoreManager {
|
|
|
49
42
|
|
|
50
43
|
return false;
|
|
51
44
|
}
|
|
52
|
-
|
|
53
|
-
return new Promise(async (resolve, reject) => {
|
|
54
|
-
|
|
55
|
-
this.dbManager.executeOperation(this.storeName, (store) => {
|
|
56
|
-
const request = store.get(id);
|
|
57
|
-
|
|
58
|
-
request.onsuccess = () => {
|
|
59
|
-
const data = request.result;
|
|
60
|
-
resolve(data);
|
|
61
|
-
};
|
|
62
|
-
|
|
63
|
-
request.onerror = reject;
|
|
64
|
-
});
|
|
65
|
-
|
|
66
|
-
});
|
|
67
45
|
}
|
|
68
46
|
|
|
69
47
|
async getItem(id) {
|
|
70
48
|
return new Promise(async (resolve, reject) => {
|
|
71
49
|
|
|
72
|
-
this.
|
|
50
|
+
this.storeBackend.executeOperation(this.storeName, (store) => {
|
|
73
51
|
const request = store.get(id);
|
|
74
52
|
|
|
75
53
|
request.onsuccess = () => {
|
|
@@ -86,7 +64,7 @@ export class BaseStoreManager {
|
|
|
86
64
|
async updateItem(id, updatedItem) {
|
|
87
65
|
return new Promise(async (resolve, reject) => {
|
|
88
66
|
|
|
89
|
-
this.
|
|
67
|
+
this.storeBackend.executeOperation(this.storeName, (store) => {
|
|
90
68
|
const request = store.get(id);
|
|
91
69
|
|
|
92
70
|
request.onsuccess = () => {
|
|
@@ -94,7 +72,7 @@ export class BaseStoreManager {
|
|
|
94
72
|
Object.assign(data, updatedItem);
|
|
95
73
|
store.put(data, id);
|
|
96
74
|
|
|
97
|
-
//TODO wait put operation before resolve
|
|
75
|
+
//TODO wait put operation before resolve?
|
|
98
76
|
resolve();
|
|
99
77
|
};
|
|
100
78
|
|
|
@@ -107,7 +85,7 @@ export class BaseStoreManager {
|
|
|
107
85
|
async deleteItem(id) {
|
|
108
86
|
return new Promise(async (resolve, reject) => {
|
|
109
87
|
|
|
110
|
-
this.
|
|
88
|
+
this.storeBackend.executeOperation(this.storeName, (store) => {
|
|
111
89
|
const request = store.delete(id);
|
|
112
90
|
|
|
113
91
|
request.onsuccess = resolve;
|
|
@@ -116,9 +94,4 @@ export class BaseStoreManager {
|
|
|
116
94
|
|
|
117
95
|
});
|
|
118
96
|
}
|
|
119
|
-
}
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
//TODO move to base class here
|
|
123
|
-
// this.requestCache = new Map; // id -> promise ///TODO seems irrelevant to class IndexedDBManager (could be renamed to Facade already)
|
|
124
|
-
|
|
97
|
+
}
|
|
@@ -1,32 +1,24 @@
|
|
|
1
1
|
import { appsConf } from "../appDataConf.js";
|
|
2
2
|
import { chunksConf } from "../chunkDataConf.js";
|
|
3
|
-
|
|
4
|
-
import { gudhubIndexedDBManager } from "../IndexedDBService.js";
|
|
3
|
+
import { indexedDBStoreBackendSingleton } from "../IndexedDBService.js";
|
|
5
4
|
import { chunksMergeConf } from "../storeManagerConf/chunkCacheStoreManagerConf.js";
|
|
6
5
|
import { BaseStoreManager } from "./BaseStoreManager.js";
|
|
7
6
|
|
|
8
7
|
export class AppStoreManager extends BaseStoreManager {
|
|
9
8
|
constructor() {
|
|
10
|
-
super(
|
|
9
|
+
super(indexedDBStoreBackendSingleton, appsConf.store);
|
|
11
10
|
}
|
|
12
11
|
|
|
13
12
|
async getApp(id) {
|
|
14
|
-
|
|
15
13
|
return this.getItem(id);
|
|
16
|
-
|
|
17
|
-
// return dbManager.enqueueOperation('apps', 'readonly', (store) => store.get(id));
|
|
18
14
|
}
|
|
19
15
|
|
|
20
16
|
async addApp(id, data) {
|
|
21
17
|
return this.addItem(id, data);
|
|
22
|
-
|
|
23
|
-
// return dbManager.enqueueOperation('apps', 'readwrite', (store) => store.add(app));
|
|
24
18
|
}
|
|
25
19
|
|
|
26
20
|
async putApp(id, data) {
|
|
27
21
|
return this.putItem(id, data);
|
|
28
|
-
|
|
29
|
-
// return dbManager.enqueueOperation('apps', 'readwrite', (store) => store.add(app));
|
|
30
22
|
}
|
|
31
23
|
|
|
32
24
|
async hasApp(id) {
|
|
@@ -35,79 +27,51 @@ export class AppStoreManager extends BaseStoreManager {
|
|
|
35
27
|
|
|
36
28
|
async deleteApp(id) {
|
|
37
29
|
return this.deleteItem(id);
|
|
38
|
-
|
|
39
|
-
// return dbManager.enqueueOperation('apps', 'readwrite', (store) => store.delete(id));
|
|
40
30
|
}
|
|
41
|
-
|
|
42
|
-
// Additional methods specific to AppStoreManager if necessary
|
|
43
31
|
}
|
|
44
32
|
|
|
45
33
|
export class ChunksStoreManager extends BaseStoreManager {
|
|
46
34
|
constructor() {
|
|
47
|
-
super(
|
|
35
|
+
super(indexedDBStoreBackendSingleton, chunksConf.store);
|
|
48
36
|
}
|
|
49
37
|
|
|
50
38
|
|
|
51
39
|
async getChunk(id) {
|
|
52
|
-
|
|
53
40
|
return this.getItem(id);
|
|
54
|
-
|
|
55
|
-
// return dbManager.enqueueOperation('apps', 'readonly', (store) => store.get(id));
|
|
56
41
|
}
|
|
57
42
|
|
|
58
43
|
async addChunk(id, chunk) {
|
|
59
44
|
return this.addItem(id, chunk);
|
|
60
|
-
|
|
61
|
-
// return dbManager.enqueueOperation('apps', 'readwrite', (store) => store.add(app));
|
|
62
45
|
}
|
|
63
46
|
|
|
64
47
|
async putChunk(id, chunk) {
|
|
65
48
|
return this.putItem(id, chunk);
|
|
66
|
-
|
|
67
|
-
// return dbManager.enqueueOperation('apps', 'readwrite', (store) => store.add(app));
|
|
68
49
|
}
|
|
69
50
|
|
|
70
51
|
async deleteChunk(id) {
|
|
71
52
|
return this.deleteItem(id);
|
|
72
|
-
|
|
73
|
-
// return dbManager.enqueueOperation('apps', 'readwrite', (store) => store.delete(id));
|
|
74
53
|
}
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
//use item methods from BaseStoreManager !!!!!!!
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
// Additional methods specific to ChunksStoreManager if necessary
|
|
81
54
|
}
|
|
82
55
|
|
|
83
56
|
export class MergedChunksStoreManager extends BaseStoreManager {
|
|
84
57
|
constructor() {
|
|
85
|
-
super(
|
|
58
|
+
super(indexedDBStoreBackendSingleton, chunksMergeConf.store);
|
|
86
59
|
}
|
|
87
60
|
|
|
88
61
|
async get(id) {
|
|
89
|
-
|
|
90
62
|
return this.getItem(id);
|
|
91
|
-
|
|
92
|
-
// return dbManager.enqueueOperation('apps', 'readonly', (store) => store.get(id));
|
|
93
63
|
}
|
|
94
64
|
|
|
95
65
|
async add(id, chunk) {
|
|
96
66
|
return this.addItem(id, chunk);
|
|
97
|
-
|
|
98
|
-
// return dbManager.enqueueOperation('apps', 'readwrite', (store) => store.add(app));
|
|
99
67
|
}
|
|
100
68
|
|
|
101
69
|
//TODO update here ok?
|
|
102
70
|
async put(id, chunk) {
|
|
103
71
|
return this.putItem(id, chunk);
|
|
104
|
-
|
|
105
|
-
// return dbManager.enqueueOperation('apps', 'readwrite', (store) => store.add(app));
|
|
106
72
|
}
|
|
107
73
|
|
|
108
74
|
async delete(id) {
|
|
109
75
|
return this.deleteItem(id);
|
|
110
|
-
|
|
111
|
-
// return dbManager.enqueueOperation('apps', 'readwrite', (store) => store.delete(id));
|
|
112
76
|
}
|
|
113
77
|
}
|