Fix issue with a same shared folder loaded in multiple teams
This commit is contained in:
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…
x
Reference in New Issue
Block a user