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