Revision 26e4800d
Added by koszko over 1 year ago
| common/indexeddb.js | ||
|---|---|---|
| 99 | 99 |
return wait_request(transaction.objectStore(store_name).delete(key)); |
| 100 | 100 |
} |
| 101 | 101 |
|
| 102 |
async function perform_upgrade(event) {
|
|
| 103 |
const opened_db = event.target.result; |
|
| 104 |
|
|
| 105 |
/* When we move to a new database schema, we will add upgrade logic here. */ |
|
| 106 |
if (event.oldVersion > 0) |
|
| 107 |
throw "bad db version: " + event.oldVersion; |
|
| 108 |
|
|
| 109 |
let store; |
|
| 110 |
for (const [store_name, key_mode] of stores) |
|
| 111 |
store = opened_db.createObjectStore(store_name, key_mode); |
|
| 112 |
|
|
| 113 |
const ctx = make_context(store.transaction, initial_data.files); |
|
| 114 |
await _save_items(initial_data.resources, initial_data.mappings, ctx); |
|
| 115 |
|
|
| 116 |
return opened_db; |
|
| 117 |
} |
|
| 118 |
|
|
| 102 | 119 |
/* Open haketilo database, asynchronously return an IDBDatabase object. */ |
| 103 |
async function get_db() |
|
| 104 |
{
|
|
| 120 |
async function get_db() {
|
|
| 105 | 121 |
if (db) |
| 106 | 122 |
return db; |
| 107 | 123 |
|
| ... | ... | |
| 109 | 125 |
const waiter = new Promise((...cbs) => [resolve, reject] = cbs); |
| 110 | 126 |
|
| 111 | 127 |
const request = indexedDB.open("haketilo", version_nr(db_version));
|
| 112 |
request.onsuccess = resolve;
|
|
| 128 |
request.onsuccess = ev => resolve(ev.target.result);
|
|
| 113 | 129 |
request.onerror = ev => reject("db error: " + ev.target.errorCode);
|
| 114 |
request.onupgradeneeded = resolve; |
|
| 115 |
|
|
| 116 |
const event = await waiter; |
|
| 117 |
const opened_db = event.target.result; |
|
| 130 |
request.onupgradeneeded = ev => perform_upgrade(ev).then(resolve, reject); |
|
| 118 | 131 |
|
| 119 |
if (event instanceof IDBVersionChangeEvent) {
|
|
| 120 |
/* |
|
| 121 |
* When we move to a new database schema, we will add upgrade logic |
|
| 122 |
* here. |
|
| 123 |
*/ |
|
| 124 |
if (event.oldVersion > 0) |
|
| 125 |
throw "bad db version: " + event.oldVersion; |
|
| 126 |
|
|
| 127 |
let store; |
|
| 128 |
for (const [store_name, key_mode] of stores) |
|
| 129 |
store = opened_db.createObjectStore(store_name, key_mode); |
|
| 130 |
|
|
| 131 |
const ctx = make_context(store.transaction, initial_data.files); |
|
| 132 |
await _save_items(initial_data.resources, initial_data.mappings, ctx); |
|
| 133 |
} |
|
| 132 |
const opened_db = await waiter; |
|
| 134 | 133 |
|
| 135 | 134 |
if (db) |
| 136 | 135 |
opened_db.close(); |
Also available in: Unified diff
more improvements for abrowser&librewolf