Store the blob cache in the outer domain

pull/1/head
yflory 4 years ago
parent 0df93dca19
commit 58cdf21def

@ -0,0 +1,35 @@
define([
], function () {
var S = {};
S.create = function (sframeChan) {
var getBlobCache = function (id, cb) {
sframeChan.query('Q_GET_BLOB_CACHE', {id:id}, function (err, data) {
var e = err || (data && data.error);
if (e) { return void cb(e); }
if (!data || typeof(data) !== "object") { return void cb('EINVAL'); }
var arr = Object.keys(data).map(function (i) { return data[i]; });
var u8 = Uint8Array.from(arr);
cb(null, u8);
});
};
var setBlobCache = function (id, u8, cb) {
sframeChan.query('Q_SET_BLOB_CACHE', {
id: id,
u8: u8
}, function (err, data) {
var e = err || (data && data.error) || undefined;
cb(e);
});
};
return {
getBlobCache: getBlobCache,
setBlobCache: setBlobCache
};
};
return S;
});

@ -1,5 +1,5 @@
(function (window) { (function (window) {
var factory = function (Cache) { var factory = function () {
var Promise = window.Promise; var Promise = window.Promise;
var cache; var cache;
var cypherChunkLength = 131088; var cypherChunkLength = 131088;
@ -199,6 +199,19 @@ var factory = function (Cache) {
return cacheKey; return cacheKey;
}; };
var getBlobCache = function (id, cb) {
if (!config.Cache || typeof(config.Cache.getBlobCache) !== "function") {
return void cb('EINVAL');
}
config.Cache.getBlobCache(id, cb);
};
var setBlobCache = function (id, u8, cb) {
if (!config.Cache || typeof(config.Cache.setBlobCache) !== "function") {
return void cb('EINVAL');
}
config.Cache.setBlobCache(id, u8, cb);
};
var getFileSize = function (src, _cb) { var getFileSize = function (src, _cb) {
var cb = function (e, res) { var cb = function (e, res) {
_cb(e, res); _cb(e, res);
@ -224,7 +237,7 @@ var factory = function (Cache) {
if (!cacheKey) { return void check(); } if (!cacheKey) { return void check(); }
Cache.getBlobCache(cacheKey, function (err, u8) { getBlobCache(cacheKey, function (err, u8) {
if (err || !u8) { return void check(); } if (err || !u8) { return void check(); }
cb(null, 0); cb(null, 0);
}); });
@ -263,7 +276,7 @@ var factory = function (Cache) {
if (arrayBuffer) { if (arrayBuffer) {
var u8 = new Uint8Array(arrayBuffer); var u8 = new Uint8Array(arrayBuffer);
if (cacheKey) { if (cacheKey) {
return void Cache.setBlobCache(cacheKey, u8, function () { return void setBlobCache(cacheKey, u8, function () {
cb(null, u8); cb(null, u8);
}); });
} }
@ -276,7 +289,7 @@ var factory = function (Cache) {
if (!cacheKey) { return void fetch(); } if (!cacheKey) { return void fetch(); }
Cache.getBlobCache(cacheKey, function (err, u8) { getBlobCache(cacheKey, function (err, u8) {
if (err || !u8) { return void fetch(); } if (err || !u8) { return void fetch(); }
cb(null, u8); cb(null, u8);
}); });
@ -628,15 +641,12 @@ var factory = function (Cache) {
}; };
if (typeof(module) !== 'undefined' && module.exports) { if (typeof(module) !== 'undefined' && module.exports) {
module.exports = factory( module.exports = factory();
require("./outer/cache-store.js")
);
} else if ((typeof(define) !== 'undefined' && define !== null) && (define.amd !== null)) { } else if ((typeof(define) !== 'undefined' && define !== null) && (define.amd !== null)) {
define([ define([
'/common/outer/cache-store.js',
'/bower_components/es6-promise/es6-promise.min.js' '/bower_components/es6-promise/es6-promise.min.js'
], function (Cache) { ], function () {
return factory(Cache); return factory();
}); });
} else { } else {
// unsupported initialization // unsupported initialization

@ -680,6 +680,22 @@ define([
}); });
}); });
sframeChan.on('Q_GET_BLOB_CACHE', function (data, cb) {
Utils.Cache.getBlobCache(data.id, function (err, obj) {
if (err) { return void cb({error: err}); }
cb(obj);
});
});
sframeChan.on('Q_SET_BLOB_CACHE', function (data, cb) {
if (!data || !data.u8 || typeof(data.u8) !== "object") { return void cb({error: 'EINVAL'}); }
var arr = Object.keys(data.u8).map(function (i) { return data.u8[i]; });
var u8 = Uint8Array.from(arr);
Utils.Cache.setBlobCache(data.id, u8, function (err) {
if (err) { return void cb({error: err}); }
cb();
});
});
sframeChan.on('Q_GET_ATTRIBUTE', function (data, cb) { sframeChan.on('Q_GET_ATTRIBUTE', function (data, cb) {
Cryptpad.getAttribute(data.key, function (e, data) { Cryptpad.getAttribute(data.key, function (e, data) {
cb({ cb({

@ -11,6 +11,7 @@ define([
'/common/sframe-common-codemirror.js', '/common/sframe-common-codemirror.js',
'/common/sframe-common-cursor.js', '/common/sframe-common-cursor.js',
'/common/sframe-common-mailbox.js', '/common/sframe-common-mailbox.js',
'/common/inner/cache.js',
'/common/inner/common-mediatag.js', '/common/inner/common-mediatag.js',
'/common/metadata-manager.js', '/common/metadata-manager.js',
@ -36,6 +37,7 @@ define([
CodeMirror, CodeMirror,
Cursor, Cursor,
Mailbox, Mailbox,
Cache,
MT, MT,
MetadataMgr, MetadataMgr,
AppConfig, AppConfig,
@ -815,6 +817,11 @@ define([
MT.MediaTag.setDefaultConfig('maxDownloadSize', maxMtSize); MT.MediaTag.setDefaultConfig('maxDownloadSize', maxMtSize);
} }
if (MT.MediaTag && Cache) {
var cache = Cache.create(ctx.sframeChan);
MT.MediaTag.setDefaultConfig('Cache', cache);
}
try { try {
var feedback = privateData.feedbackAllowed; var feedback = privateData.feedbackAllowed;
Feedback.init(feedback); Feedback.init(feedback);

Loading…
Cancel
Save