59 lines
1.7 KiB
JavaScript
59 lines
1.7 KiB
JavaScript
define([
|
||
// XXX Load util and use mkAsync
|
||
'/bower_components/localforage/dist/localforage.min.js',
|
||
], function (localForage) {
|
||
var S = {};
|
||
|
||
var cache = localForage.createInstance({
|
||
name: "cp_cache"
|
||
});
|
||
|
||
// id: channel ID or blob ID
|
||
// returns array of messages
|
||
S.getChannelCache = function (id, cb) {
|
||
cache.getItem(id, function (err, obj) {
|
||
if (err || !obj || !Array.isArray(obj.c)) {
|
||
return void cb(err || 'EINVAL');
|
||
}
|
||
cb(null, obj);
|
||
});
|
||
};
|
||
|
||
var checkCheckpoints = function (array) {
|
||
if (!Array.isArray(array)) { return; }
|
||
var cp = 0;
|
||
// XXX check sliceCpIndex from hk-util: use the same logic for forks
|
||
for (var i = array.length - 1; i >= 0; i--) {
|
||
if (array[i].isCheckpoint) { cp++; }
|
||
if (cp === 2) {
|
||
array.splice(0, i);
|
||
break;
|
||
}
|
||
}
|
||
};
|
||
|
||
S.storeCache = function (id, validateKey, val, cb) {
|
||
cb = cb || function () {};
|
||
if (!Array.isArray(val) || !validateKey) { return void cb('EINVAL'); }
|
||
checkCheckpoints(val);
|
||
cache.setItem(id, {
|
||
k: validateKey,
|
||
c: val
|
||
// XXX add "time" here +new Date() ==> we want to store the time when it was updated in our indexeddb in case we want to remove inactive entries from indexeddb later
|
||
// XXX we would also need to update the time when we "getChannelCache"
|
||
}, function (err) {
|
||
cb(err);
|
||
});
|
||
};
|
||
|
||
S.clearChannel = function (id, cb) {
|
||
cb = cb || function () {};
|
||
cache.removeItem(id, cb);
|
||
};
|
||
|
||
S.clear = function () {
|
||
cache.clear();
|
||
};
|
||
|
||
return S;
|
||
});
|