From 04f66bcfbde749d801190a82efb6ee1afd6e0402 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?S=C3=A9bastien=20Blin?=
 <sebastien.blin@savoirfairelinux.com>
Date: Tue, 29 Jun 2021 11:21:39 -0400
Subject: [PATCH] datatransfer: omit download path when accepting file
 transfers

Change-Id: I5b1310a53199ee787aa3d2a8d93dc0ca16940ce9
---
 src/api/datatransfermodel.h | 12 ++++-----
 src/conversationmodel.cpp   | 54 +++++++++++--------------------------
 src/datatransfermodel.cpp   | 19 +++++++------
 3 files changed, 31 insertions(+), 54 deletions(-)

diff --git a/src/api/datatransfermodel.h b/src/api/datatransfermodel.h
index 9394cf51..0b6b041c 100644
--- a/src/api/datatransfermodel.h
+++ b/src/api/datatransfermodel.h
@@ -66,18 +66,18 @@ public:
                           qlonglong& total,
                           qlonglong& progress);
 
-    QString accept(const QString& accountId,
-                   const QString& fileId,
-                   const QString& file_path,
-                   std::size_t offset);
+    QString accept(const QString& accountId, const QString& fileId, const QString& filePath = {});
 
     void download(const QString& accountId,
                   const QString& convId,
                   const QString& interactionId,
                   const QString& fileId,
-                  const QString& path);
+                  const QString& filePath = {});
 
-    void copyTo(const QString& accountId, const QString& convId, const QString& interactionId, const QString& destPath);
+    void copyTo(const QString& accountId,
+                const QString& convId,
+                const QString& interactionId,
+                const QString& destPath);
 
     void cancel(const QString& accountId, const QString& conversationId, const QString& fileId);
 
diff --git a/src/conversationmodel.cpp b/src/conversationmodel.cpp
index be6cc000..05420682 100644
--- a/src/conversationmodel.cpp
+++ b/src/conversationmodel.cpp
@@ -3646,24 +3646,25 @@ ConversationModelPimpl::acceptTransfer(const QString& convUid,
                                        const QString& interactionId,
                                        const QString& path)
 {
-    auto destinationDir = linked.owner.accountModel->downloadDirectory;
-    if (destinationDir.isEmpty()) {
-        return;
-    }
+    auto& conversation = getConversationForUid(convUid).get();
+    if (conversation.isNotASwarm()) {
+        // This is a fallback, will be removed when swarm will be mandatory
+        auto destinationDir = linked.owner.accountModel->downloadDirectory;
+        if (destinationDir.isEmpty()) {
+            return;
+        }
 #ifdef Q_OS_WIN
-    if (destinationDir.right(1) != '/') {
-        destinationDir += "/";
-    }
+        if (destinationDir.right(1) != '/') {
+            destinationDir += "/";
+        }
 #endif
-    QDir dir = QFileInfo(destinationDir + path).absoluteDir();
-    if (!dir.exists())
-        dir.mkpath(".");
-    auto& conversation = getConversationForUid(convUid).get();
-    if (conversation.mode == conversation::Mode::NON_SWARM) {
+        QDir dir = QFileInfo(destinationDir + path).absoluteDir();
+        if (!dir.exists())
+            dir.mkpath(".");
+
         auto acceptedFilePath = linked.owner.dataTransferModel->accept(linked.owner.id,
                                                                        interactionId,
-                                                                       destinationDir + path,
-                                                                       0);
+                                                                       destinationDir + path);
         auto fileId = linked.owner.dataTransferModel->getFileIdFromInteractionId(interactionId);
         if (transfIdToDbIntId.find(fileId) != transfIdToDbIntId.end()) {
             auto dbInteractionId = transfIdToDbIntId[fileId];
@@ -3705,35 +3706,12 @@ ConversationModelPimpl::acceptTransfer(const QString& convUid,
 
     auto interaction = conversation.interactions.find(interactionId);
     if (interaction != conversation.interactions.end()) {
-        auto displayName = interaction->second.commit["displayName"];
         auto fileId = interaction->second.commit["fileId"];
         if (fileId.isEmpty()) {
             qWarning() << "Cannot download file without fileId";
-        }
-        if (displayName.isEmpty()) {
-            displayName = interactionId;
-        }
-        int i = 0;
-        auto path = destinationDir + displayName;
-        do {
-            if (i > 0) {
-                path = destinationDir + QString::number(i) + displayName;
-            }
-            QFileInfo fi(path);
-            if (!fi.isFile())
-                break;
-            ++i;
-
-        } while (i < 1000);
-        if (i == 1000) {
-            qWarning() << "Too much duplicates for " << destinationDir << path;
             return;
         }
-        linked.owner.dataTransferModel->download(linked.owner.id,
-                                                 convUid,
-                                                 interactionId,
-                                                 fileId,
-                                                 path);
+        linked.owner.dataTransferModel->download(linked.owner.id, convUid, interactionId, fileId);
     } else {
         qWarning() << "Cannot download file without valid interaction";
     }
diff --git a/src/datatransfermodel.cpp b/src/datatransfermodel.cpp
index 2df7baf0..a8953937 100644
--- a/src/datatransfermodel.cpp
+++ b/src/datatransfermodel.cpp
@@ -204,15 +204,12 @@ DataTransferModel::fileTransferInfo(const QString& accountId,
 }
 
 QString
-DataTransferModel::accept(const QString& accountId,
-                          const QString& fileId,
-                          const QString& file_path,
-                          std::size_t)
+DataTransferModel::accept(const QString& accountId, const QString& fileId, const QString& filePath)
 {
-    auto unique_file_path = pimpl_->getUniqueFilePath(file_path);
-    auto dring_id = pimpl_->interactionToFileId[fileId];
-    ConfigurationManager::instance().acceptFileTransfer(accountId, dring_id, unique_file_path);
-    return unique_file_path;
+    auto uniqueFilePath = pimpl_->getUniqueFilePath(filePath);
+    auto daemonFileId = pimpl_->interactionToFileId[fileId];
+    ConfigurationManager::instance().acceptFileTransfer(accountId, daemonFileId, uniqueFilePath);
+    return uniqueFilePath;
 }
 
 void
@@ -226,7 +223,10 @@ DataTransferModel::download(const QString& accountId,
 }
 
 void
-DataTransferModel::copyTo(const QString& accountId, const QString& convId, const QString& interactionId, const QString& destPath)
+DataTransferModel::copyTo(const QString& accountId,
+                          const QString& convId,
+                          const QString& interactionId,
+                          const QString& destPath)
 {
     auto fileId = getFileIdFromInteractionId(interactionId);
     if (fileId.isEmpty()) {
@@ -248,7 +248,6 @@ DataTransferModel::copyTo(const QString& accountId, const QString& convId, const
     src.copy(dest);
 }
 
-
 void
 DataTransferModel::cancel(const QString& accountId,
                           const QString& conversationId,
-- 
GitLab