Fix more issues with shared folders
This commit is contained in:
@@ -1148,6 +1148,7 @@ define([
|
||||
var loadSharedFolder = function (id, data, cb) {
|
||||
var parsed = Hash.parsePadUrl(data.href);
|
||||
var secret = Hash.getSecrets('drive', parsed.hash, data.password);
|
||||
var owners = data.owners;
|
||||
var listmapConfig = {
|
||||
data: {},
|
||||
websocketURL: NetConfig.getWebsocketURL(),
|
||||
@@ -1159,85 +1160,39 @@ define([
|
||||
logLevel: 1,
|
||||
ChainPad: ChainPad,
|
||||
classic: true,
|
||||
owners: owners
|
||||
};
|
||||
var rt = Listmap.create(listmapConfig);
|
||||
store.sharedFolders[id] = rt;
|
||||
rt.proxy.on('ready', function (info) {
|
||||
store.manager.addProxy(id, rt.proxy, info.leave);
|
||||
cb(rt);
|
||||
cb(rt, info.metadata);
|
||||
});
|
||||
return rt;
|
||||
};
|
||||
Store.addSharedFolder = function (clientId, data, cb) {
|
||||
var path = data.path;
|
||||
var folderData = data.folderData || {};
|
||||
var id;
|
||||
nThen(function (waitFor) {
|
||||
Store.pinPads(clientId, [folderData.channel], waitFor());
|
||||
}).nThen(function (waitFor) {
|
||||
// 1. add the shared folder to our list of shared folders
|
||||
store.userObject.pushSharedFolder(folderData, waitFor(function (err, folderId) {
|
||||
if (err) {
|
||||
waitFor.abort();
|
||||
return void cb(err);
|
||||
}
|
||||
id = folderId;
|
||||
}));
|
||||
}).nThen(function (waitFor) {
|
||||
// 2a. add the shared folder to the path in our drive
|
||||
store.userObject.add(id, path);
|
||||
onSync(waitFor());
|
||||
|
||||
// 2b. load the proxy
|
||||
loadSharedFolder(id, data.folderData, waitFor(function (rt) {
|
||||
if (data.metadata) { // Creating a new shared folder
|
||||
rt.proxy.metadata = data.metadata;
|
||||
onSync(waitFor());
|
||||
}
|
||||
}));
|
||||
}).nThen(function () {
|
||||
sendDriveEvent('DRIVE_CHANGE', {
|
||||
path: ['drive'].concat(path)
|
||||
}, clientId);
|
||||
cb();
|
||||
});
|
||||
Store.userObjectCommand(clientId, {
|
||||
cmd: 'addSharedFolder',
|
||||
data: data
|
||||
}, cb);
|
||||
};
|
||||
store.createSharedFolder = function () {
|
||||
// XXX
|
||||
var hash = Hash.createRandomHash('drive');
|
||||
var href = '/drive/#' + hash;
|
||||
var secret = Hash.getSecrets('drive', hash);
|
||||
Store.addSharedFolder(null, {
|
||||
path: ['root'],
|
||||
folderData: {
|
||||
href: href,
|
||||
roHref: '/drive/#' + Hash.getViewHashFromKeys(secret),
|
||||
channel: secret.channel,
|
||||
ctime: +new Date()
|
||||
},
|
||||
metadata: {
|
||||
title: "Test"
|
||||
}
|
||||
}, function () {
|
||||
console.log('done');
|
||||
});
|
||||
};
|
||||
|
||||
|
||||
// Drive
|
||||
Store.userObjectCommand = function (clientId, cmdData, cb) {
|
||||
if (!cmdData || !cmdData.cmd) { return; }
|
||||
var data = cmdData.data;
|
||||
//var data = cmdData.data;
|
||||
var cb2 = function (data2) {
|
||||
var paths = data.paths || [data.path] || [];
|
||||
paths = paths.concat(data.newPath || []);
|
||||
paths.forEach(function (p) {
|
||||
//var paths = data.paths || [data.path] || [];
|
||||
//paths = paths.concat(data.newPath ? [data.newPath] : []);
|
||||
//paths.forEach(function (p) {
|
||||
sendDriveEvent('DRIVE_CHANGE', {
|
||||
//path: ['drive', UserObject.FILES_DATA]
|
||||
path: ['drive'].concat(p)
|
||||
path: ['drive', UserObject.FILES_DATA]
|
||||
//path: ['drive'].concat(p)
|
||||
}, clientId);
|
||||
//});
|
||||
onSync(function () {
|
||||
cb(data2);
|
||||
});
|
||||
cb(data2);
|
||||
};
|
||||
store.manager.command(cmdData, cb2);
|
||||
};
|
||||
@@ -1376,9 +1331,10 @@ define([
|
||||
if (!store.loggedIn) { return void cb(); }
|
||||
Store.pinPads(null, data, cb);
|
||||
};
|
||||
var manager = store.manager = ProxyManager.create(proxy.drive, proxy.edPublic, pin, unpin, {
|
||||
var manager = store.manager = ProxyManager.create(proxy.drive, proxy.edPublic,
|
||||
pin, unpin, loadSharedFolder, {
|
||||
outer: true,
|
||||
removeOwnedChannel: function (data, cb) { Store.removeOwnedChannel(null, data, cb); },
|
||||
removeOwnedChannel: function (data, cb) { Store.removeOwnedChannel('', data, cb); },
|
||||
edPublic: store.proxy.edPublic,
|
||||
loggedIn: store.loggedIn,
|
||||
log: function (msg) {
|
||||
|
||||
@@ -83,13 +83,14 @@ define([
|
||||
// FILES_DATA. If there are owned pads, remove them from server too, unless the flag tells
|
||||
// us they're already removed
|
||||
exp.checkDeletedFiles = function (isOwnPadRemoved, cb) {
|
||||
if (!loggedIn && !config.testMode) { return; }
|
||||
if (!loggedIn && !config.testMode) { return void cb(); }
|
||||
|
||||
var filesList = exp.getFiles([ROOT, 'hrefArray', TRASH]);
|
||||
var toClean = [];
|
||||
exp.getFiles([FILES_DATA]).forEach(function (id) {
|
||||
exp.getFiles([FILES_DATA, SHARED_FOLDERS]).forEach(function (id) {
|
||||
// XXX
|
||||
if (filesList.indexOf(id) === -1) {
|
||||
var fd = exp.getFileData(id);
|
||||
var fd = exp.isSharedFolder(id) ? files[SHARED_FOLDERS][id] : exp.getFileData(id);
|
||||
var channelId = fd.channel;
|
||||
// If trying to remove an owned pad, remove it from server also
|
||||
if (!isOwnPadRemoved && !sharedFolder &&
|
||||
@@ -108,10 +109,14 @@ define([
|
||||
});
|
||||
}
|
||||
if (channelId) { toClean.push(channelId); }
|
||||
spliceFileData(id);
|
||||
if (exp.isSharedFolder(id)) {
|
||||
delete files[SHARED_FOLDERS][id];
|
||||
} else {
|
||||
spliceFileData(id);
|
||||
}
|
||||
}
|
||||
});
|
||||
if (!toClean.length) { return; }
|
||||
if (!toClean.length) { return void cb(); }
|
||||
cb(null, toClean);
|
||||
};
|
||||
var deleteHrefs = function (ids) {
|
||||
@@ -672,6 +677,17 @@ define([
|
||||
var fixSharedFolders = function () {
|
||||
if (sharedFolder) { return; }
|
||||
if (typeof(files[SHARED_FOLDERS]) !== "object") { debug("SHARED_FOLDER was not an object"); files[SHARED_FOLDERS] = {}; }
|
||||
var sf = files[SHARED_FOLDERS];
|
||||
var rootFiles = exp.getFiles([ROOT]);
|
||||
var root = exp.find([ROOT]);
|
||||
for (var id in sf) {
|
||||
id = Number(id);
|
||||
if (rootFiles.indexOf(id) === -1) {
|
||||
console.log('missing' + id);
|
||||
var newName = Hash.createChannelId();
|
||||
root[newName] = id;
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
var fixDrive = function () {
|
||||
|
||||
Reference in New Issue
Block a user