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;
}