From 50a6265b93a9fc5496c9e93987e5806b3369b125 Mon Sep 17 00:00:00 2001
From: ubermanu <e.vodor@gmail.com>
Date: Tue, 23 Mar 2021 11:50:43 +0100
Subject: [PATCH] minor: allow users to retract file uploads

---
 src/plugins/sib-retract-file-upload.js | 34 ++++++++++++++++++++++++++
 src/solid-xmpp-chat.js                 |  2 ++
 2 files changed, 36 insertions(+)
 create mode 100644 src/plugins/sib-retract-file-upload.js

diff --git a/src/plugins/sib-retract-file-upload.js b/src/plugins/sib-retract-file-upload.js
new file mode 100644
index 0000000..f7aa683
--- /dev/null
+++ b/src/plugins/sib-retract-file-upload.js
@@ -0,0 +1,34 @@
+/**
+ * Allow the user to retract a file upload.
+ */
+converse.plugins.add('sib-retract-file-upload', {
+  initialize() {
+    const _converse = this._converse;
+    const { api, Message } = _converse;
+
+    api.settings.extend({
+      'allow_upload_retraction': 'own',
+    });
+
+    const MessageMixin = {
+      /**
+       * The message can be retracted if the above option is correctly set.
+       * Overrides the 'allow_message_retraction' setting if disabled.
+       *
+       * @private
+       * @method _converse.Messages#mayBeRetracted
+       * @returns { Boolean }
+       */
+      mayBeRetracted() {
+        return _mayBeRetracted.call(this) || (
+          this.get('sender') === 'me'
+          && this.get('oob_url')
+          && ['all', 'own'].includes(api.settings.get('allow_upload_retraction'))
+        );
+      },
+    };
+
+    const _mayBeRetracted = Message.prototype.mayBeRetracted;
+    Object.assign(Message.prototype, MessageMixin);
+  },
+});
diff --git a/src/solid-xmpp-chat.js b/src/solid-xmpp-chat.js
index cfb9034..af138fb 100644
--- a/src/solid-xmpp-chat.js
+++ b/src/solid-xmpp-chat.js
@@ -15,6 +15,7 @@ import './plugins/sib-history-improved.js';
 import './plugins/sib-mention-mobile.js';
 import './plugins/sib-remove-notifications.js';
 import './plugins/sib-reply-to-message.js';
+import './plugins/sib-retract-file-upload.js';
 import './plugins/sib-scroll-down-on-focus.js';
 import './plugins/sib-subscribe-to-rai.js';
 
@@ -240,6 +241,7 @@ export const SolidXMPPChat = {
           'sib-mention-mobile',
           'sib-remove-notifications',
           'sib-reply-to-message',
+          'sib-retract-file-upload',
           'sib-scroll-down-on-focus',
           'sib-subscribe-to-rai',
         ],
-- 
GitLab