diff --git a/customize.dist/translations/messages.fr.js b/customize.dist/translations/messages.fr.js index c26333b2b..ee8a1a4d2 100644 --- a/customize.dist/translations/messages.fr.js +++ b/customize.dist/translations/messages.fr.js @@ -419,6 +419,7 @@ define(function () { out.fc_open = "Ouvrir"; out.fc_open_ro = "Ouvrir (lecture seule)"; out.fc_delete = "Déplacer vers la corbeille"; + out.fc_delete_owned = "Supprimer du serveur"; out.fc_restore = "Restaurer"; out.fc_remove = "Supprimer de votre CryptDrive"; out.fc_empty = "Vider la corbeille"; diff --git a/customize.dist/translations/messages.js b/customize.dist/translations/messages.js index cd3f966a9..84dbdde0e 100644 --- a/customize.dist/translations/messages.js +++ b/customize.dist/translations/messages.js @@ -422,6 +422,7 @@ define(function () { out.fc_open = "Open"; out.fc_open_ro = "Open (read-only)"; out.fc_delete = "Move to trash"; + out.fc_delete_owned = "Delete from the server"; out.fc_restore = "Restore"; out.fc_remove = "Remove from your CryptDrive"; out.fc_empty = "Empty the trash"; diff --git a/www/common/common-ui-elements.js b/www/common/common-ui-elements.js index 90e554d31..f49491ebf 100644 --- a/www/common/common-ui-elements.js +++ b/www/common/common-ui-elements.js @@ -107,9 +107,11 @@ define([ .appendTo($d); var owners = Messages.creation_noOwner; var edPublic = common.getMetadataMgr().getPrivateData().edPublic; + var owned = false; if (data.owners && data.owners.length) { if (data.owners.indexOf(edPublic) !== -1) { owners = Messages.yourself; + owned = true; } else { owners = Messages.creation_ownedByOther; } @@ -117,6 +119,12 @@ define([ $d.append(UI.dialog.selectable(owners, { id: 'cp-app-prop-owners', })); + /* TODO + if (owned) { + var $deleteOwned = $('button').text(Messages.fc_delete_owned).click(function () { + }); + $d.append($deleteOwned); + }*/ var expire = Messages.creation_expireFalse; if (data.expire && typeof (data.expire) === "number") { diff --git a/www/common/sframe-common-outer.js b/www/common/sframe-common-outer.js index 64b9df509..31a29b623 100644 --- a/www/common/sframe-common-outer.js +++ b/www/common/sframe-common-outer.js @@ -494,6 +494,10 @@ define([ Cryptpad.setLanguage(data, cb); }); + sframeChan.on('Q_CONTACTS_CLEAR_OWNED_CHANNEL', function (channel, cb) { + Cryptpad.clearOwnedChannel(channel, cb); + }); + if (cfg.addRpc) { cfg.addRpc(sframeChan, Cryptpad, Utils); } @@ -530,9 +534,6 @@ define([ sframeChan.on('Q_CONTACTS_SET_CHANNEL_HEAD', function (opt, cb) { Cryptpad.messenger.setChannelHead(opt, cb); }); - sframeChan.on('Q_CONTACTS_CLEAR_OWNED_CHANNEL', function (channel, cb) { - Cryptpad.clearOwnedChannel(channel, cb); - }); Cryptpad.messenger.onMessageEvent.reg(function (data) { sframeChan.event('EV_CONTACTS_MESSAGE', data); diff --git a/www/drive/inner.html b/www/drive/inner.html index d2f7a2f55..93d4688ef 100644 --- a/www/drive/inner.html +++ b/www/drive/inner.html @@ -24,6 +24,7 @@
  • Open (read-only)
  • Rename
  • Delete
  • +
  • Delete permanently
  • New folder
  • Properties
  • Tags
  • @@ -44,7 +45,7 @@
  • Open
  • Open (read-only)
  • Delete
  • -
  • Delete permanently
  • +
  • Delete permanently
  • Properties
  • Tags
  • diff --git a/www/drive/inner.js b/www/drive/inner.js index 0878449ab..381eb5e94 100644 --- a/www/drive/inner.js +++ b/www/drive/inner.js @@ -658,11 +658,12 @@ define([ if (!isOwnDrive()) { hide.push($menu.find('a.cp-app-drive-context-own')); } - if ($element.is('.cp-app-drive-element-owned')) { - hide.push($menu.find('a.cp-app-drive-context-delete')); - } else { + if (!$element.is('.cp-app-drive-element-owned')) { hide.push($menu.find('a.cp-app-drive-context-deleteowned')); } + if ($element.is('.cp-app-drive-element-notrash')) { + hide.push($menu.find('a.cp-app-drive-context-delete')); + } if ($element.is('.cp-app-drive-element-file')) { // No folder in files hide.push($menu.find('a.cp-app-drive-context-newfolder')); @@ -1183,6 +1184,7 @@ define([ if (data.owners && data.owners.indexOf(edPublic) !== -1) { var $owned = $ownedIcon.clone().appendTo($state); $owned.attr('title', Messages.fm_padIsOwned); + $span.addClass('cp-app-drive-element-owned'); } else if (data.owners && data.owners.length) { var $owner = $ownerIcon.clone().appendTo($state); $owner.attr('title', Messages.fm_padIsOwnedOther); @@ -2065,7 +2067,7 @@ define([ var roClass = typeof(ro) === 'undefined' ? ' cp-app-drive-element-noreadonly' : ro ? ' cp-app-drive-element-readonly' : ''; var $element = $('
  • ', { - 'class': 'cp-app-drive-element cp-app-drive-element-file cp-app-drive-element-row' + roClass, + 'class': 'cp-app-drive-element cp-app-drive-element-notrash cp-app-drive-element-file cp-app-drive-element-row' + roClass, }); $element.prepend($icon).dblclick(function () { openFile(id); @@ -2103,7 +2105,8 @@ define([ var roClass = typeof(ro) === 'undefined' ? ' cp-app-drive-element-noreadonly' : ro ? ' cp-app-drive-element-readonly' : ''; var $element = $('
  • ', { - 'class': 'cp-app-drive-element cp-app-drive-element-owned cp-app-drive-element-file cp-app-drive-element-row' + roClass + 'class': 'cp-app-drive-element cp-app-drive-element-notrash ' + + 'cp-app-drive-element-file cp-app-drive-element-row' + roClass }); $element.prepend($icon).dblclick(function () { openFile(id); @@ -2600,6 +2603,30 @@ define([ paths.forEach(function (p) { pathsList.push(p.path); }); moveElements(pathsList, [TRASH], false, refresh); } + else if ($(this).hasClass('cp-app-drive-context-deleteowned')) { + var pathsListD = []; + 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) { + 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')) { paths.forEach(function (p) { var $element = p.element; @@ -2689,17 +2716,26 @@ define([ moveElements(pathsList, [TRASH], false, refresh); } else if ($(this).hasClass('cp-app-drive-context-deleteowned')) { - // TODO - // Remove owned pad from drive and remove from server var pathsListD = []; - paths.forEach(function (p) { pathsListD.push(p.path); }); var msgD = Messages.fm_deleteOwnedPads; UI.confirm(msgD, function(res) { $(window).focus(); if (!res) { return; } - filesOp.delete(pathsListD, refresh); - // TODO XXX HERE - // RPC to delete from server + // 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) { + sframeChan.query('Q_CONTACTS_CLEAR_OWNED_CHANNEL', channel, + waitFor(function (e) { + if (e) { return void console.error(e); } + filesOp.delete([p.path], refresh); + })); + }); + }); }); return; }