Start file conflict resolve dialog asynchronous
authorFelix Weilbach <felix.weilbach@t-online.de>
Tue, 26 Jan 2021 10:35:39 +0000 (11:35 +0100)
committerKevin Ottens (Rebase PR Action) <er-vin@users.noreply.github.com>
Wed, 27 Jan 2021 08:01:25 +0000 (08:01 +0000)
Fixes #2804

Signed-off-by: Felix Weilbach <felix.weilbach@t-online.de>
src/gui/tray/ActivityListModel.cpp
src/gui/tray/ActivityListModel.h

index 053d725f4526756ef62011ef3e09b13eb89a58d7..09b77065f8404884b7d6bb5251c1c187c0668e29 100644 (file)
@@ -26,6 +26,7 @@
 #include "folderman.h"
 #include "iconjob.h"
 #include "accessmanager.h"
+#include "owncloudgui.h"
 
 #include "ActivityData.h"
 #include "ActivityListModel.h"
@@ -417,7 +418,7 @@ void ActivityListModel::removeActivityFromActivityList(Activity activity)
     }
 }
 
-void ActivityListModel::triggerDefaultAction(int activityIndex) const
+void ActivityListModel::triggerDefaultAction(int activityIndex)
 {
     if (activityIndex < 0 || activityIndex >= _finalList.size()) {
         qCWarning(lcActivity) << "Couldn't trigger default action at index" << activityIndex << "/ final list size:" << _finalList.size();
@@ -444,13 +445,19 @@ void ActivityListModel::triggerDefaultAction(int activityIndex) const
 
         const auto baseName = QFileInfo(basePath).fileName();
 
-        ConflictDialog dialog;
-        dialog.setBaseFilename(baseName);
-        dialog.setLocalVersionFilename(conflictedPath);
-        dialog.setRemoteVersionFilename(basePath);
-        if (dialog.exec() == ConflictDialog::Accepted) {
-            folder->scheduleThisFolderSoon();
+        if (!_currentConflictDialog.isNull()) {
+            _currentConflictDialog->close();
         }
+        _currentConflictDialog = new ConflictDialog;
+        _currentConflictDialog->setBaseFilename(baseName);
+        _currentConflictDialog->setLocalVersionFilename(conflictedPath);
+        _currentConflictDialog->setRemoteVersionFilename(basePath);
+        _currentConflictDialog->setAttribute(Qt::WA_DeleteOnClose);
+        connect(_currentConflictDialog, &ConflictDialog::accepted, folder, [folder]() {
+            folder->scheduleThisFolderSoon();
+        });
+        _currentConflictDialog->open();
+        ownCloudGui::raiseDialog(_currentConflictDialog);
         return;
     }
 
index 29b14e921c700f1b67f190bcd40dba48e6fef8ff..d58c34cd7b947a22384afdd69d1fc3c37a897942 100644 (file)
@@ -26,6 +26,7 @@ namespace OCC {
 Q_DECLARE_LOGGING_CATEGORY(lcActivity)
 
 class AccountState;
+class ConflictDialog;
 
 /**
  * @brief The ActivityListModel
@@ -74,7 +75,7 @@ public:
     void removeActivityFromActivityList(int row);
     void removeActivityFromActivityList(Activity activity);
 
-    Q_INVOKABLE void triggerDefaultAction(int activityIndex) const;
+    Q_INVOKABLE void triggerDefaultAction(int activityIndex);
     Q_INVOKABLE void triggerAction(int activityIndex, int actionIndex);
 
 public slots:
@@ -113,6 +114,8 @@ private:
     int _maxActivities = 100;
     int _maxActivitiesDays = 30;
     bool _showMoreActivitiesAvailableEntry = false;
+
+    QPointer<ConflictDialog> _currentConflictDialog;
 };
 }