1 namespace("kivi.FileDB", function(ns) {
4 const database = 'kivi';
9 const indexedDB = window.indexedDB || window.webkitIndexedDB || window.mozIndexedDB || window.OIndexedDB || window.msIndexedDB;
11 // Create/open database
13 let request = indexedDB.open(database, db_version);
14 request.onupgradeneeded = (event) => {
15 ns.create_image_store(event.target.result);
17 request.onerror = ns.onerror;
18 request.aftersuccess = [];
19 request.onsuccess = () => {
22 db.onerror = (event) => {
23 console.error("Error creating/accessing IndexedDB database");
27 // Interim solution for Google Chrome to create an objectStore. Will be deprecated
29 if (db.version != db_version) {
30 let setVersion = db.setVersion(db_version);
31 setVersion.onsuccess = () => {
32 ns.create_image_store(db);
37 request.aftersuccess.forEach(f => f());
40 ns.create_image_store = function (db) {
41 db.createObjectStore(store, { autoIncrement : true });
44 ns.store_image = function (blob, filename, success) {
45 let put_request = ns.open_store("readwrite").add(blob, filename);
47 put_request.onsuccess = success;
48 put_request.on_error = ns.onerror;
51 ns.retrieve_image = function(key, success) {
52 let get_request = ns.open_store().objectStore(store).get(key);
54 get_request.onsuccess = success;
55 get_request.onerror = request.onerror;
58 ns.retrieve_all = function(success) {
59 let request = ns.open_store().getAll();
60 request.onsuccess = (event) => { success(event.target.result); };
61 request.onerror = ns.error;
64 ns.retrieve_all_keys = function(success) {
65 let request = ns.open_store().getAllKeys();
66 request.onsuccess = (event) => { success(event.target.result); };
67 request.onerror = ns.error;
70 ns.delete_all= function() {
71 ns.retrieve_all_keys((keys) => {
72 keys.forEach((key) => ns.delete_key(key));
76 ns.delete_key= function(key, success) {
77 let request = ns.open_store("readwrite").delete(key);
78 request.onsuccess = (event) => { if (success) success(event.target.result); };
79 request.onerror = ns.error;
82 ns.open_store = function(mode = "readonly") {
83 return db.transaction([store], mode).objectStore(store);
86 ns.onerror = (event) => {
87 console.error("Error creating/accessing IndexedDB database");
88 console.error(event.errorState);
91 ns.with_db = function(success) {
92 if (db && db_version == db.version) {
95 // assume the page load db init isn't done yet and push it onto the success
96 request.aftersuccess.push(success);