diff --git a/customize.dist/translations/messages.js b/customize.dist/translations/messages.js index cf2ed10f3..f68714e45 100644 --- a/customize.dist/translations/messages.js +++ b/customize.dist/translations/messages.js @@ -381,7 +381,8 @@ define(function () { 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_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_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."; diff --git a/www/common/outer/async-store.js b/www/common/outer/async-store.js index 7198c819f..722ebc62c 100644 --- a/www/common/outer/async-store.js +++ b/www/common/outer/async-store.js @@ -906,6 +906,8 @@ define([ var userObject = store.userObject = UserObject.init(proxy.drive, { pinPads: Store.pinPads, unpinPads: Store.unpinPads, + removeOwnedChannel: function () {}, // XXX + edPublic: store.proxy.edPublic, loggedIn: store.loggedIn, log: function (msg) { postMessage("DRIVE_LOG", msg); diff --git a/www/common/outer/userObject.js b/www/common/outer/userObject.js index 32e3e3b92..e50a5f219 100644 --- a/www/common/outer/userObject.js +++ b/www/common/outer/userObject.js @@ -17,8 +17,12 @@ define([ console.error("unpinPads was not provided"); }; var pinPads = config.pinPads; + var removeOwnedChannel = config.removeOwnedChannel || function () { + console.error("removeOwnedChannel was not provided"); + }; var loggedIn = config.loggedIn; var workgroup = config.workgroup; + var edPublic = config.edPublic; var ROOT = exp.ROOT; var FILES_DATA = exp.FILES_DATA; @@ -90,9 +94,12 @@ define([ exp.getFiles([FILES_DATA]).forEach(function (id) { if (filesList.indexOf(id) === -1) { var fd = exp.getFileData(id); - if (fd && fd.href) { - toClean.push(Hash.hrefToHexChannelId(fd.href)); + var channelId = fd && fd.href && 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); } }); diff --git a/www/common/sframe-common.js b/www/common/sframe-common.js index d2aaf90ea..029118b88 100644 --- a/www/common/sframe-common.js +++ b/www/common/sframe-common.js @@ -392,15 +392,12 @@ define([ 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()); }).nThen(function () { + try { + var feedback = ctx.metadataMgr.getPrivateData().feedbackAllowed; + Feedback.init(feedback); + } catch (e) { Feedback.init(false); } ctx.sframeChan.ready(); cb(funcs); }); diff --git a/www/drive/inner.js b/www/drive/inner.js index b2e8359ba..65547c60d 100644 --- a/www/drive/inner.js +++ b/www/drive/inner.js @@ -2682,9 +2682,11 @@ define([ $contextMenu.find('.cp-app-drive-context-delete').text(Messages.fc_remove) .attr('data-icon', 'fa-eraser'); } - var deletePaths = function (paths) { - var pathsList = []; - paths.forEach(function (p) { pathsList.push(p.path); }); + var deletePaths = function (paths, pathsList) { + pathsList = pathsList || []; + if (paths) { + paths.forEach(function (p) { pathsList.push(p.path); }); + } var msg = Messages._getKey("fm_removeSeveralPermanentlyDialog", [paths.length]); if (paths.length === 1) { msg = Messages.fm_removePermanentlyDialog; @@ -2695,6 +2697,33 @@ define([ 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) { e.stopPropagation(); var paths = $contextMenu.data('paths'); @@ -2720,28 +2749,7 @@ define([ moveElements(pathsList, [TRASH], false, refresh); } else if ($(this).hasClass('cp-app-drive-context-deleteowned')) { - var msgD = Messages.fm_deleteOwnedPads; - 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; + deleteOwnedPaths(paths); } else if ($(this).hasClass('cp-app-drive-context-open')) { paths.forEach(function (p) { @@ -2879,18 +2887,11 @@ define([ if (!$(elmt).data('path')) { return; } 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) { - var msg = Messages._getKey("fm_removeSeveralPermanentlyDialog", [paths.length]); - if (paths.length === 1) { - msg = Messages.fm_removePermanentlyDialog; - } - - UI.confirm(msg, function(res) { - $(window).focus(); - if (!res) { return; } - filesOp.delete(paths, refresh); - }); + deletePaths(null, paths); return; } // else move to trash