From 70255cb4e6748461b56138fbb370d82f8d6137dc Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?S=C3=A9bastien=20Blin?=
 <sebastien.blin@savoirfairelinux.com>
Date: Mon, 27 Apr 2020 11:43:16 -0400
Subject: [PATCH] filetransfer: add multiple preferences

also fix account id detection

Change-Id: Ia4e297bd9e93acb2770077a4517442aef64f43fe
---
 src/api/datatransfermodel.h | 15 +++++++++++++++
 src/conversationmodel.cpp   | 22 +++++++++++++---------
 2 files changed, 28 insertions(+), 9 deletions(-)

diff --git a/src/api/datatransfermodel.h b/src/api/datatransfermodel.h
index 2728e609..f98650ab 100644
--- a/src/api/datatransfermodel.h
+++ b/src/api/datatransfermodel.h
@@ -79,6 +79,21 @@ public:
      */
     static QString createDefaultDirectory();
 
+    /**
+     * Accept transfer from untrusted contacts
+     */
+    bool acceptFromUnstrusted {false};
+
+    /**
+     * Accept transfer from trusted contacts
+     */
+    bool automaticAcceptTransfer {true};
+
+    /**
+     * Automatically accept transfer under
+     */
+    unsigned acceptBehindMb {20} /* Mb */;
+
 Q_SIGNALS:
     /**
      * Connect this signal to know when a data transfer is incoming.
diff --git a/src/conversationmodel.cpp b/src/conversationmodel.cpp
index 6dda48a7..0acec04b 100644
--- a/src/conversationmodel.cpp
+++ b/src/conversationmodel.cpp
@@ -2157,9 +2157,10 @@ ConversationModel::getNumberOfUnreadMessagesFor(const QString& convUid)
 }
 
 bool
-ConversationModelPimpl::usefulDataFromDataTransfer(long long dringId, const datatransfer::Info&,
+ConversationModelPimpl::usefulDataFromDataTransfer(long long dringId, const datatransfer::Info& info,
                                                    int& interactionId, QString& convId)
 {
+    if (info.accountId != linked.owner.id) return false;
     try {
         interactionId = lrc.getDataTransferModel().getInteractionIdFromDringId(dringId);
     } catch (const std::out_of_range& e) {
@@ -2254,16 +2255,19 @@ ConversationModelPimpl::slotTransferStatusAwaitingHost(long long dringId, datatr
             dirtyConversations = {true, true};
             emit linked.interactionStatusUpdated(convId, interactionId, itCopy);
             // Only accept if contact is added
-            try {
-                auto contactUri = conversations[conversationIdx].participants.front();
-                auto contactInfo = linked.owner.contactModel->getContact(contactUri);
-                if (contactInfo.profileInfo.type != profile::Type::RING) return;
-            } catch (...) {
-                return;
+            if (!lrc.getDataTransferModel().acceptFromUnstrusted) {
+                try {
+                    auto contactUri = conversations[conversationIdx].participants.front();
+                    auto contactInfo = linked.owner.contactModel->getContact(contactUri);
+                    if (contactInfo.profileInfo.type == profile::Type::PENDING) return;
+                } catch (...) {
+                    return;
+                }
             }
             // If it's an accepted file type and less than 20 MB, accept transfer.
-            if (info.totalSize < 20 * 1024 * 1024) {
-                acceptTransfer(convId, interactionId, info.displayName);
+            if (lrc.getDataTransferModel().automaticAcceptTransfer) {
+                if (lrc.getDataTransferModel().acceptBehindMb == 0 || info.totalSize < lrc.getDataTransferModel().acceptBehindMb * 1024 * 1024)
+                    acceptTransfer(convId, interactionId, info.displayName);
             }
         }
     }
-- 
GitLab