Added progressInfo / cleanup to acitivtymodel
authorDominique Fuchs <32204802+DominiqueFuchs@users.noreply.github.com>
Mon, 13 Jan 2020 12:10:32 +0000 (13:10 +0100)
committerDominique Fuchs <32204802+DominiqueFuchs@users.noreply.github.com>
Mon, 13 Jan 2020 12:10:32 +0000 (13:10 +0100)
Signed-off-by: Dominique Fuchs <32204802+DominiqueFuchs@users.noreply.github.com>
src/gui/tray/UserModel.cpp
src/gui/tray/UserModel.h

index caaa2b8f2fd4798aec7d7f0bc8d3615039473db2..f78d90d9dea382bc2d3acf526e0fdb36600ea401 100644 (file)
@@ -1,6 +1,7 @@
 #include "accountmanager.h"
 #include "owncloudgui.h"
 #include "UserModel.h"
+#include "syncengine.h"
 
 #include <QDesktopServices>
 #include <QIcon>
@@ -17,12 +18,80 @@ User::User(AccountStatePtr &account, const bool &isCurrent, QObject* parent)
     , _isCurrentUser(isCurrent)
     , _activityModel(new ActivityListModel(_account.data()))
 {
+    connect(ProgressDispatcher::instance(), &ProgressDispatcher::progressInfo,
+        this, &User::slotProgressInfo);
     connect(ProgressDispatcher::instance(), &ProgressDispatcher::itemCompleted,
         this, &User::slotItemCompleted);
     connect(ProgressDispatcher::instance(), &ProgressDispatcher::syncError,
         this, &User::slotAddError);
 }
 
+void User::slotProgressInfo(const QString &folder, const ProgressInfo &progress)
+{
+    if (progress.status() == ProgressInfo::Reconcile) {
+        // Wipe all non-persistent entries - as well as the persistent ones
+        // in cases where a local discovery was done.
+        auto f = FolderMan::instance()->folder(folder);
+        if (!f)
+            return;
+        const auto &engine = f->syncEngine();
+        const auto style = engine.lastLocalDiscoveryStyle();
+        foreach (Activity activity, _activityModel->errorsList()) {
+            if (activity._folder != folder) {
+                continue;
+            }
+
+            if (style == LocalDiscoveryStyle::FilesystemOnly) {
+                _activityModel->removeActivityFromActivityList(activity);
+                continue;
+            }
+
+            if (activity._status == SyncFileItem::Conflict && !QFileInfo(f->path() + activity._file).exists()) {
+                _activityModel->removeActivityFromActivityList(activity);
+                continue;
+            }
+
+            if (activity._status == SyncFileItem::FileLocked && !QFileInfo(f->path() + activity._file).exists()) {
+                _activityModel->removeActivityFromActivityList(activity);
+                continue;
+            }
+
+
+            if (activity._status == SyncFileItem::FileIgnored && !QFileInfo(f->path() + activity._file).exists()) {
+                _activityModel->removeActivityFromActivityList(activity);
+                continue;
+            }
+
+
+            if (!QFileInfo(f->path() + activity._file).exists()) {
+                _activityModel->removeActivityFromActivityList(activity);
+                continue;
+            }
+
+            auto path = QFileInfo(activity._file).dir().path().toUtf8();
+            if (path == ".")
+                path.clear();
+
+            if (engine.shouldDiscoverLocally(path))
+                _activityModel->removeActivityFromActivityList(activity);
+        }
+    }
+
+    if (progress.status() == ProgressInfo::Done) {
+        // We keep track very well of pending conflicts.
+        // Inform other components about them.
+        QStringList conflicts;
+        foreach (Activity activity, _activityModel->errorsList()) {
+            if (activity._folder == folder
+                && activity._status == SyncFileItem::Conflict) {
+                conflicts.append(activity._file);
+            }
+        }
+
+        emit ProgressDispatcher::instance()->folderConflicts(folder, conflicts);
+    }
+}
+
 void User::slotAddError(const QString &folderAlias, const QString &message, ErrorCategory category)
 {
     auto folderInstance = FolderMan::instance()->folder(folderAlias);
index 4bec4db085b77129e62b2bfc54489864ac2fe631..7ab4cf5b503c676e6d5a1f938bcec7bbd59e3ba0 100644 (file)
@@ -38,6 +38,7 @@ public:
 
 public slots:
     void slotItemCompleted(const QString &folder, const SyncFileItemPtr &item);
+    void slotProgressInfo(const QString &folder, const ProgressInfo &progress);
     void slotAddError(const QString &folderAlias, const QString &message, ErrorCategory category);
 
 private: