X-Git-Url: http://wagnertech.de/git?a=blobdiff_plain;f=js%2Fkivi.FileDB.js;h=7ee0701e28134bae7aa524d6be5acd19b47bdbc0;hb=65604fea85234a5ae3e787f7cafd81ece6b8621d;hp=3edb45b8b6f8276a6ba1b9d465bcffef95af2dee;hpb=ecc4b0c2ef75ebb81706fe00e61956e602ac13c4;p=kivitendo-erp.git diff --git a/js/kivi.FileDB.js b/js/kivi.FileDB.js index 3edb45b8b..7ee0701e2 100644 --- a/js/kivi.FileDB.js +++ b/js/kivi.FileDB.js @@ -15,6 +15,7 @@ namespace("kivi.FileDB", function(ns) { ns.create_image_store(event.target.result); }; request.onerror = ns.onerror; + request.aftersuccess = []; request.onsuccess = () => { db = request.result; @@ -32,6 +33,8 @@ namespace("kivi.FileDB", function(ns) { }; } } + + request.aftersuccess.forEach(f => f()); }; ns.create_image_store = function (db) { @@ -39,44 +42,72 @@ namespace("kivi.FileDB", function(ns) { }; ns.store_image = function (blob, filename, success) { - let put_request = ns.open_store("readwrite").add(blob, filename); + ns.open_rw_store((store) => { + let put_request = store.add(blob, filename); - put_request.onsuccess = success; - put_request.on_error = ns.onerror; + put_request.onsuccess = success; + put_request.on_error = ns.onerror; + }); }; ns.retrieve_image = function(key, success) { - let get_request = ns.open_store().objectStore(store).get(key); + ns.open_ro_store((store) => { + let get_request = store.get(key); - get_request.onsuccess = success; - get_request.onerror = request.onerror; + get_request.onsuccess = success; + get_request.onerror = request.onerror; + }); }; ns.retrieve_all = function(success) { - let request = ns.open_store().getAll(); - request.onsuccess = (event) => { success(event.target.result); }; - request.onerror = ns.error; + ns.open_ro_store((store) => { + let request = store.getAll(); + request.onsuccess = (event) => { success(event.target.result); }; + request.onerror = ns.error; + }); }; ns.retrieve_all_keys = function(success) { - let request = ns.open_store().getAllKeys(); - request.onsuccess = (event) => { success(event.target.result); }; - request.onerror = ns.error; + ns.open_ro_store((store) => { + let request = store.getAllKeys(); + request.onsuccess = (event) => { success(event.target.result); }; + request.onerror = ns.error; + }); }; - ns.delete_all= function() { - ns.retrieve_all_keys((keys) => { - keys.forEach((key) => ns.delete_key(key)); + ns.delete_all = function(success) { + ns.open_rw_store((store) => { + let request = store.clear(); + request.onsuccess = success; + request.onerror = ns.error; }); }; - ns.delete_key= function(key, success) { - let request = ns.open_store("readwrite").delete(key); - request.onsuccess = (event) => { if (success) success(event.target.result); }; - request.onerror = ns.error; + ns.delete_key = function(key, success) { + ns.open_rw_store((store) => { + let request = store.delete(key); + request.onsuccess = (event) => { if (success) success(event.target.result); }; + request.onerror = ns.error; + }); }; - ns.open_store = function(mode = "readonly") { + ns.open_rw_store = function(callback) { + if (db && db_version == db.version) { + callback(ns.open_store("readwrite")); + } else { + request.aftersuccess.push(() => callback(ns.open_store("readwrite"))); + } + }; + + ns.open_ro_store = function(callback) { + if (db && db_version == db.version) { + callback(ns.open_store("readonly")); + } else { + request.aftersuccess.push(() => callback(ns.open_store("readonly"))); + } + }; + + ns.open_store = function(mode = "readonly") { return db.transaction([store], mode).objectStore(store); }; @@ -84,4 +115,13 @@ namespace("kivi.FileDB", function(ns) { console.error("Error creating/accessing IndexedDB database"); console.error(event.errorState); }; + + ns.with_db = function(success) { + if (db && db_version == db.version) { + success(); + } else { + // assume the page load db init isn't done yet and push it onto the success + request.aftersuccess.push(success); + } + }; });