Delete owned pads from server when removed from the owner's drive
This commit is contained in:
parent
5089f1206d
commit
a1d9f44bbd
@ -381,7 +381,8 @@ define(function () {
|
|||||||
out.fm_removePermanentlyDialog = "Are you sure you want to remove that element from your CryptDrive permanently?";
|
out.fm_removePermanentlyDialog = "Are you sure you want to remove that element from your CryptDrive permanently?";
|
||||||
out.fm_removeSeveralDialog = "Are you sure you want to move these {0} elements to the trash?";
|
out.fm_removeSeveralDialog = "Are you sure you want to move these {0} elements to the trash?";
|
||||||
out.fm_removeDialog = "Are you sure you want to move {0} to the trash?";
|
out.fm_removeDialog = "Are you sure you want to move {0} to the trash?";
|
||||||
out.fm_deleteOwnedPads = "Are you sure you want to remove permanently this pad from the server?";
|
out.fm_deleteOwnedPad = "Are you sure you want to remove permanently this pad from the server?";
|
||||||
|
out.fm_deleteOwnedPads = "Are you sure you want to remove permanently these pads from the server?";
|
||||||
out.fm_restoreDialog = "Are you sure you want to restore {0} to its previous location?";
|
out.fm_restoreDialog = "Are you sure you want to restore {0} to its previous location?";
|
||||||
out.fm_unknownFolderError = "The selected or last visited directory no longer exist. Opening the parent folder...";
|
out.fm_unknownFolderError = "The selected or last visited directory no longer exist. Opening the parent folder...";
|
||||||
out.fm_contextMenuError = "Unable to open the context menu for that element. If the problem persist, try to reload the page.";
|
out.fm_contextMenuError = "Unable to open the context menu for that element. If the problem persist, try to reload the page.";
|
||||||
|
|||||||
@ -901,6 +901,8 @@ define([
|
|||||||
var userObject = store.userObject = UserObject.init(proxy.drive, {
|
var userObject = store.userObject = UserObject.init(proxy.drive, {
|
||||||
pinPads: Store.pinPads,
|
pinPads: Store.pinPads,
|
||||||
unpinPads: Store.unpinPads,
|
unpinPads: Store.unpinPads,
|
||||||
|
removeOwnedChannel: function () {}, // XXX
|
||||||
|
edPublic: store.proxy.edPublic,
|
||||||
loggedIn: store.loggedIn,
|
loggedIn: store.loggedIn,
|
||||||
log: function (msg) {
|
log: function (msg) {
|
||||||
postMessage("DRIVE_LOG", msg);
|
postMessage("DRIVE_LOG", msg);
|
||||||
|
|||||||
@ -17,8 +17,12 @@ define([
|
|||||||
console.error("unpinPads was not provided");
|
console.error("unpinPads was not provided");
|
||||||
};
|
};
|
||||||
var pinPads = config.pinPads;
|
var pinPads = config.pinPads;
|
||||||
|
var removeOwnedChannel = config.removeOwnedChannel || function () {
|
||||||
|
console.error("removeOwnedChannel was not provided");
|
||||||
|
};
|
||||||
var loggedIn = config.loggedIn;
|
var loggedIn = config.loggedIn;
|
||||||
var workgroup = config.workgroup;
|
var workgroup = config.workgroup;
|
||||||
|
var edPublic = config.edPublic;
|
||||||
|
|
||||||
var ROOT = exp.ROOT;
|
var ROOT = exp.ROOT;
|
||||||
var FILES_DATA = exp.FILES_DATA;
|
var FILES_DATA = exp.FILES_DATA;
|
||||||
@ -90,9 +94,12 @@ define([
|
|||||||
exp.getFiles([FILES_DATA]).forEach(function (id) {
|
exp.getFiles([FILES_DATA]).forEach(function (id) {
|
||||||
if (filesList.indexOf(id) === -1) {
|
if (filesList.indexOf(id) === -1) {
|
||||||
var fd = exp.getFileData(id);
|
var fd = exp.getFileData(id);
|
||||||
if (fd && fd.href) {
|
var channelId = fd && fd.href && Hash.hrefToHexChannelId(fd.href);
|
||||||
toClean.push(Hash.hrefToHexChannelId(fd.href));
|
// If trying to remove an owned pad, remove it from server also
|
||||||
|
if (fd.owners && fd.owners.indexOf(edPublic) !== -1 && channelId) {
|
||||||
|
removeOwnedChannel(channelId);
|
||||||
}
|
}
|
||||||
|
if (channelId) { toClean.push(channelId); }
|
||||||
spliceFileData(id);
|
spliceFileData(id);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|||||||
@ -392,15 +392,12 @@ define([
|
|||||||
UI.log(data.logText);
|
UI.log(data.logText);
|
||||||
});
|
});
|
||||||
|
|
||||||
ctx.metadataMgr.onChange(function () {
|
|
||||||
try {
|
|
||||||
var feedback = ctx.metadataMgr.getPrivateData().feedbackAllowed;
|
|
||||||
Feedback.init(feedback);
|
|
||||||
} catch (e) { Feedback.init(false); }
|
|
||||||
});
|
|
||||||
|
|
||||||
ctx.metadataMgr.onReady(waitFor());
|
ctx.metadataMgr.onReady(waitFor());
|
||||||
}).nThen(function () {
|
}).nThen(function () {
|
||||||
|
try {
|
||||||
|
var feedback = ctx.metadataMgr.getPrivateData().feedbackAllowed;
|
||||||
|
Feedback.init(feedback);
|
||||||
|
} catch (e) { Feedback.init(false); }
|
||||||
ctx.sframeChan.ready();
|
ctx.sframeChan.ready();
|
||||||
cb(funcs);
|
cb(funcs);
|
||||||
});
|
});
|
||||||
|
|||||||
@ -2682,9 +2682,11 @@ define([
|
|||||||
$contextMenu.find('.cp-app-drive-context-delete').text(Messages.fc_remove)
|
$contextMenu.find('.cp-app-drive-context-delete').text(Messages.fc_remove)
|
||||||
.attr('data-icon', 'fa-eraser');
|
.attr('data-icon', 'fa-eraser');
|
||||||
}
|
}
|
||||||
var deletePaths = function (paths) {
|
var deletePaths = function (paths, pathsList) {
|
||||||
var pathsList = [];
|
pathsList = pathsList || [];
|
||||||
paths.forEach(function (p) { pathsList.push(p.path); });
|
if (paths) {
|
||||||
|
paths.forEach(function (p) { pathsList.push(p.path); });
|
||||||
|
}
|
||||||
var msg = Messages._getKey("fm_removeSeveralPermanentlyDialog", [paths.length]);
|
var msg = Messages._getKey("fm_removeSeveralPermanentlyDialog", [paths.length]);
|
||||||
if (paths.length === 1) {
|
if (paths.length === 1) {
|
||||||
msg = Messages.fm_removePermanentlyDialog;
|
msg = Messages.fm_removePermanentlyDialog;
|
||||||
@ -2695,6 +2697,33 @@ define([
|
|||||||
filesOp.delete(pathsList, refresh);
|
filesOp.delete(pathsList, refresh);
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
var deleteOwnedPaths = function (paths, pathsList) {
|
||||||
|
pathsList = pathsList || [];
|
||||||
|
if (paths) {
|
||||||
|
paths.forEach(function (p) { pathsList.push(p.path); });
|
||||||
|
}
|
||||||
|
var msgD = paths ? Messages.fm_deleteOwnedPads : Messages.fm_deleteContainsOwned;
|
||||||
|
UI.confirm(msgD, function(res) {
|
||||||
|
$(window).focus();
|
||||||
|
if (!res) { return; }
|
||||||
|
// Try to delete each selected pad from server, and delete from drive if no error
|
||||||
|
var n = nThen(function () {});
|
||||||
|
pathsList.forEach(function (p) {
|
||||||
|
var el = filesOp.find(p);
|
||||||
|
var data = filesOp.getFileData(el);
|
||||||
|
var parsed = Hash.parsePadUrl(data.href);
|
||||||
|
var channel = Util.base64ToHex(parsed.hashData.channel);
|
||||||
|
n = n.nThen(function (waitFor) {
|
||||||
|
// XXX use the delete channel rpc
|
||||||
|
sframeChan.query('Q_CONTACTS_CLEAR_OWNED_CHANNEL', channel,
|
||||||
|
waitFor(function (e) {
|
||||||
|
if (e) { return void console.error(e); }
|
||||||
|
filesOp.delete([p.path], refresh);
|
||||||
|
}));
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
||||||
|
};
|
||||||
$contextMenu.on("click", "a", function(e) {
|
$contextMenu.on("click", "a", function(e) {
|
||||||
e.stopPropagation();
|
e.stopPropagation();
|
||||||
var paths = $contextMenu.data('paths');
|
var paths = $contextMenu.data('paths');
|
||||||
@ -2720,28 +2749,7 @@ define([
|
|||||||
moveElements(pathsList, [TRASH], false, refresh);
|
moveElements(pathsList, [TRASH], false, refresh);
|
||||||
}
|
}
|
||||||
else if ($(this).hasClass('cp-app-drive-context-deleteowned')) {
|
else if ($(this).hasClass('cp-app-drive-context-deleteowned')) {
|
||||||
var msgD = Messages.fm_deleteOwnedPads;
|
deleteOwnedPaths(paths);
|
||||||
UI.confirm(msgD, function(res) {
|
|
||||||
$(window).focus();
|
|
||||||
if (!res) { return; }
|
|
||||||
// Try to delete each selected pad from server, and delete from drive if no error
|
|
||||||
var n = nThen(function () {});
|
|
||||||
paths.forEach(function (p) {
|
|
||||||
var el = filesOp.find(p.path);
|
|
||||||
var data = filesOp.getFileData(el);
|
|
||||||
var parsed = Hash.parsePadUrl(data.href);
|
|
||||||
var channel = Util.base64ToHex(parsed.hashData.channel);
|
|
||||||
n = n.nThen(function (waitFor) {
|
|
||||||
// XXX use the delete channel rpc
|
|
||||||
sframeChan.query('Q_CONTACTS_CLEAR_OWNED_CHANNEL', channel,
|
|
||||||
waitFor(function (e) {
|
|
||||||
if (e) { return void console.error(e); }
|
|
||||||
filesOp.delete([p.path], refresh);
|
|
||||||
}));
|
|
||||||
});
|
|
||||||
});
|
|
||||||
});
|
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
else if ($(this).hasClass('cp-app-drive-context-open')) {
|
else if ($(this).hasClass('cp-app-drive-context-open')) {
|
||||||
paths.forEach(function (p) {
|
paths.forEach(function (p) {
|
||||||
@ -2879,18 +2887,11 @@ define([
|
|||||||
if (!$(elmt).data('path')) { return; }
|
if (!$(elmt).data('path')) { return; }
|
||||||
paths.push($(elmt).data('path'));
|
paths.push($(elmt).data('path'));
|
||||||
});
|
});
|
||||||
// If we are in the trash or anon pad or if we are holding the "shift" key, delete permanently,
|
if (!paths.length) { return; }
|
||||||
|
// If we are in the trash or anon pad or if we are holding the "shift" key,
|
||||||
|
// delete permanently
|
||||||
if (!APP.loggedIn || isTrash || e.shiftKey) {
|
if (!APP.loggedIn || isTrash || e.shiftKey) {
|
||||||
var msg = Messages._getKey("fm_removeSeveralPermanentlyDialog", [paths.length]);
|
deletePaths(null, paths);
|
||||||
if (paths.length === 1) {
|
|
||||||
msg = Messages.fm_removePermanentlyDialog;
|
|
||||||
}
|
|
||||||
|
|
||||||
UI.confirm(msg, function(res) {
|
|
||||||
$(window).focus();
|
|
||||||
if (!res) { return; }
|
|
||||||
filesOp.delete(paths, refresh);
|
|
||||||
});
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
// else move to trash
|
// else move to trash
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user