keeweb/app/scripts/storage/storage-cache.js

115 lines
3.9 KiB
JavaScript
Raw Normal View History

2015-11-07 20:02:45 +01:00
'use strict';
2015-12-12 09:53:50 +01:00
var Logger = require('../util/logger');
var logger = new Logger('storage-cache');
2015-11-07 20:02:45 +01:00
var idb = window.indexedDB || window.mozIndexedDB || window.webkitIndexedDB || window.msIndexedDB;
var StorageCache = {
name: 'cache',
enabled: !!idb,
db: null,
errorOpening: null,
init: function(callback) {
if (this.db) {
2015-12-07 22:00:44 +01:00
return callback && callback();
2015-11-07 20:02:45 +01:00
}
var that = this;
try {
var req = idb.open('FilesCache');
req.onerror = function (e) {
2015-12-12 09:53:50 +01:00
logger.error('Error opening indexed db', e);
2015-11-07 20:02:45 +01:00
that.errorOpening = e;
2015-12-07 22:00:44 +01:00
if (callback) { callback(e); }
2015-11-07 20:02:45 +01:00
};
req.onsuccess = function (e) {
that.db = e.target.result;
2015-12-07 22:00:44 +01:00
if (callback) { callback(); }
2015-11-07 20:02:45 +01:00
};
req.onupgradeneeded = function (e) {
var db = e.target.result;
db.createObjectStore('files');
};
} catch (e) {
2015-12-12 09:53:50 +01:00
logger.error('Error opening indexed db', e);
2015-12-07 22:00:44 +01:00
if (callback) { callback(e); }
2015-11-07 20:02:45 +01:00
}
},
2016-03-12 17:49:52 +01:00
save: function(id, opts, data, callback) {
2015-12-12 09:53:50 +01:00
logger.debug('Save', id);
2015-11-07 20:02:45 +01:00
this.init((function(err) {
if (err) {
2015-12-07 22:00:44 +01:00
return callback && callback(err);
2015-11-07 20:02:45 +01:00
}
try {
2015-12-12 09:53:50 +01:00
var ts = logger.ts();
2015-11-07 20:02:45 +01:00
var req = this.db.transaction(['files'], 'readwrite').objectStore('files').put(data, id);
req.onsuccess = function () {
2015-12-12 09:53:50 +01:00
logger.debug('Saved', id, logger.ts(ts));
2015-12-07 22:00:44 +01:00
if (callback) { callback(); }
2015-11-07 20:02:45 +01:00
};
req.onerror = function () {
2015-12-12 09:53:50 +01:00
logger.error('Error saving to cache', id, req.error);
2015-12-07 22:00:44 +01:00
if (callback) { callback(req.error); }
2015-11-07 20:02:45 +01:00
};
} catch (e) {
2015-12-12 09:53:50 +01:00
logger.error('Error saving to cache', id, e);
2015-12-07 22:00:44 +01:00
if (callback) { callback(e); }
2015-11-07 20:02:45 +01:00
}
}).bind(this));
},
2016-03-12 17:49:52 +01:00
load: function(id, opts, callback) {
2015-12-12 09:53:50 +01:00
logger.debug('Load', id);
2015-11-07 20:02:45 +01:00
this.init((function(err) {
if (err) {
2015-12-07 22:00:44 +01:00
return callback && callback(err, null);
2015-11-07 20:02:45 +01:00
}
try {
2015-12-12 09:53:50 +01:00
var ts = logger.ts();
2015-11-07 20:02:45 +01:00
var req = this.db.transaction(['files'], 'readonly').objectStore('files').get(id);
req.onsuccess = function () {
2015-12-12 09:53:50 +01:00
logger.debug('Loaded', id, logger.ts(ts));
2015-12-07 22:00:44 +01:00
if (callback) { callback(null, req.result); }
2015-11-07 20:02:45 +01:00
};
req.onerror = function () {
2015-12-12 09:53:50 +01:00
logger.error('Error loading from cache', id, req.error);
2015-12-07 22:00:44 +01:00
if (callback) { callback(req.error); }
2015-11-07 20:02:45 +01:00
};
} catch (e) {
2015-12-12 09:53:50 +01:00
logger.error('Error loading from cache', id, e);
2015-12-07 22:00:44 +01:00
if (callback) { callback(e, null); }
2015-11-07 20:02:45 +01:00
}
}).bind(this));
},
2016-03-12 17:49:52 +01:00
remove: function(id, opts, callback) {
2015-12-12 09:53:50 +01:00
logger.debug('Remove', id);
2015-11-07 20:02:45 +01:00
this.init((function(err) {
if (err) {
2015-12-07 22:00:44 +01:00
return callback && callback(err);
2015-11-07 20:02:45 +01:00
}
try {
2015-12-12 09:53:50 +01:00
var ts = logger.ts();
2015-11-07 20:02:45 +01:00
var req = this.db.transaction(['files'], 'readwrite').objectStore('files').delete(id);
req.onsuccess = function () {
2015-12-12 09:53:50 +01:00
logger.debug('Removed', id, logger.ts(ts));
2015-12-07 22:00:44 +01:00
if (callback) { callback(); }
2015-11-07 20:02:45 +01:00
};
req.onerror = function () {
2015-12-12 09:53:50 +01:00
logger.error('Error removing from cache', id, req.error);
2015-12-07 22:00:44 +01:00
if (callback) { callback(req.error); }
2015-11-07 20:02:45 +01:00
};
} catch(e) {
2015-12-12 09:53:50 +01:00
logger.error('Error removing from cache', id, e);
2015-12-07 22:00:44 +01:00
if (callback) { callback(e); }
2015-11-07 20:02:45 +01:00
}
}).bind(this));
}
};
module.exports = StorageCache;