From: Dominique Fuchs <32204802+DominiqueFuchs@users.noreply.github.com> Date: Mon, 13 Jan 2020 12:10:32 +0000 (+0100) Subject: Added progressInfo / cleanup to acitivtymodel X-Git-Tag: archive/raspbian/3.16.7-1_deb13u1+rpi1~1^2~222^2^2~413^2~43 X-Git-Url: https://dgit.raspbian.org/?a=commitdiff_plain;h=eeefbe57afb270514dc52c3210460ae5690e5b8d;p=nextcloud-desktop.git Added progressInfo / cleanup to acitivtymodel Signed-off-by: Dominique Fuchs <32204802+DominiqueFuchs@users.noreply.github.com> --- diff --git a/src/gui/tray/UserModel.cpp b/src/gui/tray/UserModel.cpp index caaa2b8f2..f78d90d9d 100644 --- a/src/gui/tray/UserModel.cpp +++ b/src/gui/tray/UserModel.cpp @@ -1,6 +1,7 @@ #include "accountmanager.h" #include "owncloudgui.h" #include "UserModel.h" +#include "syncengine.h" #include #include @@ -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); diff --git a/src/gui/tray/UserModel.h b/src/gui/tray/UserModel.h index 4bec4db08..7ab4cf5b5 100644 --- a/src/gui/tray/UserModel.h +++ b/src/gui/tray/UserModel.h @@ -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: