From: Matthieu Gallien Date: Fri, 12 May 2023 13:01:28 +0000 (+0200) Subject: solve multiple conflicts from choose resolution X-Git-Tag: archive/raspbian/3.16.7-1_deb13u1+rpi1~1^2~12^2~10^2~44^2~9 X-Git-Url: https://dgit.raspbian.org/?a=commitdiff_plain;h=230e2de23a8456362d6525fe9e001f5a199aba76;p=nextcloud-desktop.git solve multiple conflicts from choose resolution Signed-off-by: Matthieu Gallien --- diff --git a/src/gui/ResolveConflictsDialog.qml b/src/gui/ResolveConflictsDialog.qml index d94541601..b0a320e9f 100644 --- a/src/gui/ResolveConflictsDialog.qml +++ b/src/gui/ResolveConflictsDialog.qml @@ -156,12 +156,11 @@ QtWindow.Window { } onAccepted: function() { - console.log("Ok clicked") + realModel.applyResolution() Systray.destroyDialog(conflictsDialog) } onRejected: function() { - console.log("Cancel clicked") Systray.destroyDialog(conflictsDialog) } } diff --git a/src/gui/conflictsolver.h b/src/gui/conflictsolver.h index b000e78dc..018741b05 100644 --- a/src/gui/conflictsolver.h +++ b/src/gui/conflictsolver.h @@ -32,6 +32,7 @@ public: KeepRemoteVersion, KeepBothVersions }; + Q_ENUM(Solution); explicit ConflictSolver(QWidget *parent = nullptr); diff --git a/src/gui/syncconflictsmodel.cpp b/src/gui/syncconflictsmodel.cpp index cc9f4302b..0a80e9a6d 100644 --- a/src/gui/syncconflictsmodel.cpp +++ b/src/gui/syncconflictsmodel.cpp @@ -13,6 +13,7 @@ */ #include "syncconflictsmodel.h" + #include "folderman.h" #include @@ -221,6 +222,19 @@ void SyncConflictsModel::selectAllConflicting(bool selected) } } +void SyncConflictsModel::applyResolution() +{ + for(const auto &syncConflict : qAsConst(mConflictData)) { + if (syncConflict.isValid()) { + qCInfo(lcSyncConflictsModel) << syncConflict.mExistingFilePath << syncConflict.mConflictingFilePath << syncConflict.solution(); + ConflictSolver solver; + solver.setLocalVersionFilename(syncConflict.mConflictingFilePath); + solver.setRemoteVersionFilename(syncConflict.mExistingFilePath); + solver.exec(syncConflict.solution()); + } + } +} + void SyncConflictsModel::updateConflictsData() { mConflictData.clear(); @@ -260,6 +274,8 @@ void SyncConflictsModel::updateConflictsData() QUrl{QStringLiteral("image://tray-image-provider/:/fileicon") + conflictFileInfo.filePath()}, false, false, + existingFileInfo.filePath(), + conflictFileInfo.filePath(), }; mConflictData.push_back(std::move(newConflictData)); @@ -316,4 +332,24 @@ void SyncConflictsModel::setConflictingSelected(bool value, } } +ConflictSolver::Solution SyncConflictsModel::ConflictInfo::solution() const +{ + auto result = ConflictSolver::Solution{}; + + if (mConflictSelected && mExistingSelected) { + result = ConflictSolver::KeepBothVersions; + } else if (!mConflictSelected && mExistingSelected) { + result = ConflictSolver::KeepLocalVersion; + } else if (mConflictSelected && !mExistingSelected) { + result = ConflictSolver::KeepRemoteVersion; + } + + return result; +} + +bool SyncConflictsModel::ConflictInfo::isValid() const +{ + return mConflictSelected || mExistingSelected; +} + } diff --git a/src/gui/syncconflictsmodel.h b/src/gui/syncconflictsmodel.h index 2586ab17b..e77d132ba 100644 --- a/src/gui/syncconflictsmodel.h +++ b/src/gui/syncconflictsmodel.h @@ -17,6 +17,8 @@ #include "tray/activitydata.h" +#include "conflictsolver.h" + #include #include #include @@ -43,6 +45,11 @@ class SyncConflictsModel : public QAbstractListModel QUrl mConflictPreviewUrl; bool mExistingSelected = false; bool mConflictSelected = false; + QString mExistingFilePath; + QString mConflictingFilePath; + + [[nodiscard]] ConflictSolver::Solution solution() const; + [[nodiscard]] bool isValid() const; }; public: @@ -85,6 +92,8 @@ public slots: void selectAllConflicting(bool selected); + void applyResolution(); + signals: void conflictActivitiesChanged();