Use the ConflictDialog directly from the activity list
authorKevin Ottens <kevin.ottens@nextcloud.com>
Wed, 7 Oct 2020 16:05:21 +0000 (18:05 +0200)
committerKevin Ottens <kevin.ottens@nextcloud.com>
Thu, 22 Oct 2020 14:40:47 +0000 (16:40 +0200)
No need to go to the file manager first to then have the user go through
the context menu, just popup the dialog directly.

Signed-off-by: Kevin Ottens <kevin.ottens@nextcloud.com>
src/gui/tray/ActivityListModel.cpp

index 3887093b705bc704e9e947d821ef55597f53334f..15d7a22bddfb9f86cedfb0c0af8295d32ff41f5d 100644 (file)
@@ -22,6 +22,7 @@
 #include "account.h"
 #include "accountstate.h"
 #include "accountmanager.h"
+#include "conflictdialog.h"
 #include "folderman.h"
 #include "iconjob.h"
 #include "accessmanager.h"
@@ -426,6 +427,32 @@ void ActivityListModel::triggerActionAtIndex(int id) const
 
     const auto modelIndex = index(id);
     const auto path = data(modelIndex, PathRole).toUrl();
+
+    const auto activity = _finalList.at(id);
+    if (activity._status == SyncFileItem::Conflict) {
+        Q_ASSERT(!activity._file.isEmpty());
+        Q_ASSERT(!activity._folder.isEmpty());
+        Q_ASSERT(Utility::isConflictFile(activity._file));
+
+        const auto folder = FolderMan::instance()->folder(activity._folder);
+
+        const auto conflictedRelativePath = activity._file;
+        const auto baseRelativePath = folder->journalDb()->conflictFileBaseName(conflictedRelativePath.toUtf8());
+
+        const auto dir = QDir(folder->path());
+        const auto conflictedPath = dir.filePath(conflictedRelativePath);
+        const auto basePath = dir.filePath(baseRelativePath);
+
+        const auto baseName = QFileInfo(basePath).fileName();
+
+        ConflictDialog dialog;
+        dialog.setBaseFilename(baseName);
+        dialog.setLocalVersionFilename(conflictedPath);
+        dialog.setRemoteVersionFilename(basePath);
+        dialog.exec();
+        return;
+    }
+
     if (path.isValid()) {
         QDesktopServices::openUrl(path);
     } else {