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.onsuccess = () => {
21 db.onerror = (event) => {
22 console.error("Error creating/accessing IndexedDB database");
26 // Interim solution for Google Chrome to create an objectStore. Will be deprecated
28 if (db.version != db_version) {
29 let setVersion = db.setVersion(db_version);
30 setVersion.onsuccess = () => {
31 ns.create_image_store(db);
37 ns.create_image_store = function (db) {
38 db.createObjectStore(store, { autoIncrement : true });
41 ns.store_image = function (blob, filename, success) {
42 let put_request = ns.open_store("readwrite").add(blob, filename);
44 put_request.onsuccess = success;
45 put_request.on_error = ns.onerror;
48 ns.retrieve_image = function(key, success) {
49 let get_request = ns.open_store().objectStore(store).get(key);
51 get_request.onsuccess = success;
52 get_request.onerror = request.onerror;
55 ns.retrieve_all = function(success) {
56 let request = ns.open_store().getAll();
57 request.onsuccess = (event) => { success(event.target.result); };
58 request.onerror = ns.error;
61 ns.retrieve_all_keys = function(success) {
62 let request = ns.open_store().getAllKeys();
63 request.onsuccess = (event) => { success(event.target.result); };
64 request.onerror = ns.error;
67 ns.delete_all= function() {
68 ns.retrieve_all_keys((keys) => {
69 keys.forEach((key) => ns.delete_key(key));
73 ns.delete_key= function(key, success) {
74 let request = ns.open_store("readwrite").delete(key);
75 request.onsuccess = (event) => { if (success) success(event.target.result); };
76 request.onerror = ns.error;
79 ns.open_store = function(mode = "readonly") {
80 return db.transaction([store], mode).objectStore(store);
83 ns.onerror = (event) => {
84 console.error("Error creating/accessing IndexedDB database");
85 console.error(event.errorState);