Fix issue with a same shared folder loaded in multiple teams

This commit is contained in:
yflory
2019-10-02 17:49:51 +02:00
parent d09a1c27ac
commit 0a8c6dc6b2
4 changed files with 62 additions and 22 deletions

View File

@@ -16,14 +16,46 @@ define([
- config: network and "manager" (either the user one or a team manager)
- id: shared folder id
*/
var allSharedFolders = {};
SF.load = function (config, id, data, cb) {
var network = config.network;
var store = config.store;
var manager = store.manager;
var handler = store.handleSharedFolder;
var parsed = Hash.parsePadUrl(data.href);
var secret = Hash.getSecrets('drive', parsed.hash, data.password);
var sf = allSharedFolders[secret.channel];
if (sf && sf.ready && sf.rt) {
// The shared folder is already loaded, return its data
setTimeout(function () {
store.manager.addProxy(id, sf.rt.proxy, sf.leave);
cb(sf.rt, sf.metadata);
});
if (handler) { handler(id, sf.rt); }
return sf.rt;
}
if (sf && sf.queue && sf.rt) {
// The shared folder is loading, add our callbacks to the queue
sf.queue.push({
cb: cb,
store: store,
id: id
});
if (handler) { handler(id, sf.rt); }
return sf.rt;
}
sf = allSharedFolders[secret.channel] = {
queue: [{
cb: cb,
store: store,
id: id
}]
};
var owners = data.owners;
var listmapConfig = {
data: {},
@@ -40,10 +72,19 @@ define([
owners: owners
}
};
var rt = Listmap.create(listmapConfig);
var rt = sf.rt = Listmap.create(listmapConfig);
rt.proxy.on('ready', function (info) {
manager.addProxy(id, rt.proxy, info.leave);
cb(rt, info.metadata);
if (!sf.queue) {
return;
}
sf.queue.forEach(function (obj) {
obj.store.manager.addProxy(obj.id, rt.proxy, info.leave);
obj.cb(rt, info.metadata);
});
sf.leave = info.leave;
sf.metadata = info.metadata;
sf.ready = true;
delete sf.queue;
});
if (handler) { handler(id, rt); }
return rt;