Fix issue with a same shared folder loaded in multiple teams

pull/1/head
yflory 5 years ago
parent d09a1c27ac
commit 0a8c6dc6b2

@ -1808,10 +1808,13 @@ define([
//var data = cmdData.data; //var data = cmdData.data;
var s = getStore(cmdData.teamId); var s = getStore(cmdData.teamId);
var cb2 = function (data2) { var cb2 = function (data2) {
var send = cmdData.teamId ? s.sendEvent : sendDriveEvent;
getAllStores().forEach(function (_s) {
var send = _s.id ? _s.sendEvent : sendDriveEvent;
send('DRIVE_CHANGE', { send('DRIVE_CHANGE', {
path: ['drive', UserObject.FILES_DATA] path: ['drive', UserObject.FILES_DATA]
}, clientId); }, clientId);
});
onSync(cmdData.teamId, function () { onSync(cmdData.teamId, function () {
cb(data2); cb(data2);
}); });

@ -16,14 +16,46 @@ define([
- config: network and "manager" (either the user one or a team manager) - config: network and "manager" (either the user one or a team manager)
- id: shared folder id - id: shared folder id
*/ */
var allSharedFolders = {};
SF.load = function (config, id, data, cb) { SF.load = function (config, id, data, cb) {
var network = config.network; var network = config.network;
var store = config.store; var store = config.store;
var manager = store.manager;
var handler = store.handleSharedFolder; var handler = store.handleSharedFolder;
var parsed = Hash.parsePadUrl(data.href); var parsed = Hash.parsePadUrl(data.href);
var secret = Hash.getSecrets('drive', parsed.hash, data.password); 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 owners = data.owners;
var listmapConfig = { var listmapConfig = {
data: {}, data: {},
@ -40,10 +72,19 @@ define([
owners: owners owners: owners
} }
}; };
var rt = Listmap.create(listmapConfig); var rt = sf.rt = Listmap.create(listmapConfig);
rt.proxy.on('ready', function (info) { rt.proxy.on('ready', function (info) {
manager.addProxy(id, rt.proxy, info.leave); if (!sf.queue) {
cb(rt, info.metadata); 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); } if (handler) { handler(id, rt); }
return rt; return rt;

@ -211,7 +211,9 @@ define([
SF.load({ SF.load({
network: ctx.store.network, network: ctx.store.network,
store: team store: team
}, id, data, cb); }, id, data, function (id, rt) {
cb(id, rt);
});
}; };
var manager = team.manager = ProxyManager.create(proxy.drive, { var manager = team.manager = ProxyManager.create(proxy.drive, {
onSync: function (cb) { ctx.Store.onSync(id, cb); }, onSync: function (cb) { ctx.Store.onSync(id, cb); },

@ -382,11 +382,6 @@ define([
var name = $(input).val(); var name = $(input).val();
if (!name.trim()) { return; } if (!name.trim()) { return; }
state = true; state = true;
UI.confirm('Are you sure?', function (yes) {
if (!yes) {
state = false;
return;
}
APP.module.execCommand('CREATE_TEAM', { APP.module.execCommand('CREATE_TEAM', {
name: name name: name
}, function () { }, function () {
@ -398,7 +393,6 @@ define([
}); });
}); });
}); });
});
cb(content); cb(content);
}); });

Loading…
Cancel
Save