Przeglądaj źródła

Merge pull request #580 from nextcloud/issues/activities

Fixes #538: correctly checks for local sync actitivities.
Camila Ayres 7 lat temu
rodzic
commit
647df7bcee

+ 1 - 0
client.qrc

@@ -36,6 +36,7 @@
         <file>resources/public.svg</file>
         <file>resources/confirm.svg</file>
         <file>resources/copy.svg</file>
+        <file>resources/state-sync.svg</file>
     </qresource>
     <qresource prefix="/"/>
 </RCC>

Plik diff jest za duży
+ 0 - 0
resources/state-sync.svg


+ 12 - 3
src/gui/activitylistmodel.cpp

@@ -108,9 +108,9 @@ QVariant ActivityListModel::data(const QModelIndex &index, int role) const
                          || a._status == SyncFileItem::Restoration){
                    return QIcon(QLatin1String(":/client/resources/state-warning.svg"));
                }
-               return QIcon(QLatin1String(":/client/resources/activity.png"));
-        } else return QIcon(QLatin1String(":/client/resources/activity.png"));
-        return QVariant();
+               return QIcon(QLatin1String(":/client/resources/state-sync.svg"));
+        }
+        return QIcon(QLatin1String(":/client/resources/activity.png"));
         break;
     case ActivityItemDelegate::ObjectTypeRole:
         return a._objectType;
@@ -237,6 +237,12 @@ void ActivityListModel::removeActivityFromActivityList(int row) {
     removeActivityFromActivityList(activity);
 }
 
+void ActivityListModel::addSyncFileItemToActivityList(Activity activity) {
+    qCInfo(lcActivity) << "Successfully added to the activity list: " << activity._subject;
+    _syncFileItemLists.prepend(activity);
+    combineActivityLists();
+}
+
 void ActivityListModel::removeActivityFromActivityList(Activity activity) {
     qCInfo(lcActivity) << "Activity/Notification/Error successfully dismissed: " << activity._subject;
     qCInfo(lcActivity) << "Trying to remove Activity/Notification/Error from view... ";
@@ -271,6 +277,9 @@ void ActivityListModel::combineActivityLists()
     std::sort(_notificationLists.begin(), _notificationLists.end());
     resultList.append(_notificationLists);
 
+    std::sort(_syncFileItemLists.begin(), _syncFileItemLists.end());
+    resultList.append(_syncFileItemLists);
+
     std::sort(_activityLists.begin(), _activityLists.end());
     resultList.append(_activityLists);
 

+ 2 - 0
src/gui/activitylistmodel.h

@@ -50,6 +50,7 @@ public:
     ActivityList errorsList() { return _notificationErrorsLists; }
     void addNotificationToActivityList(Activity activity);
     void addErrorToActivityList(Activity activity);
+    void addSyncFileItemToActivityList(Activity activity);
     void removeActivityFromActivityList(int row);
     void removeActivityFromActivityList(Activity activity);
 
@@ -68,6 +69,7 @@ private:
     void combineActivityLists();
 
     ActivityList _activityLists;
+    ActivityList _syncFileItemLists;
     ActivityList _notificationLists;
     ActivityList _notificationErrorsLists;
     ActivityList _finalList;

+ 54 - 49
src/gui/activitywidget.cpp

@@ -98,52 +98,49 @@ ActivityWidget::~ActivityWidget()
 
 void ActivityWidget::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, _model->errorsList()) {
+            if (activity._folder != folder){
+                continue;
+            }
+
+            if (style == LocalDiscoveryStyle::FilesystemOnly){
+                _model->removeActivityFromActivityList(activity);
+                continue;
+            }
+
+            if(activity._status == SyncFileItem::Conflict && !QFileInfo(f->path() + activity._file).exists()){
+                _model->removeActivityFromActivityList(activity);
+                continue;
+            }
+
 
-// TODO: this is really not working
-//    if (progress.status() == ProgressInfo::Done
-//            || 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, _model->errorsList()) {
-//            if (activity._folder != folder){
-//                continue;
-//            }
-
-//            if (style == LocalDiscoveryStyle::FilesystemOnly){
-//                _model->removeActivityFromActivityList(activity);
-//                continue;
-//            }
-
-//            if(activity._status == SyncFileItem::Conflict && !QFileInfo(f->path() + activity._file).exists()){
-//                _model->removeActivityFromActivityList(activity);
-//                continue;
-//            }
-
-
-//            if(activity._status == SyncFileItem::FileIgnored && !QFileInfo(f->path() + activity._file).exists()){
-//                _model->removeActivityFromActivityList(activity);
-//                continue;
-//            }
-
-//            if(!QFileInfo(f->path() + activity._file).exists()){
-//                _model->removeActivityFromActivityList(activity);
-//                continue;
-//            }
-
-//            auto path = QFileInfo(activity._file).dir().path().toUtf8();
-//            if (path == ".")
-//                path.clear();
-
-//            if(engine.shouldDiscoverLocally(path))
-//                _model->removeActivityFromActivityList(activity);
-//        }
-
-//    }
+            if(activity._status == SyncFileItem::FileIgnored && !QFileInfo(f->path() + activity._file).exists()){
+                _model->removeActivityFromActivityList(activity);
+                continue;
+            }
+
+            if(!QFileInfo(f->path() + activity._file).exists()){
+                _model->removeActivityFromActivityList(activity);
+                continue;
+            }
+
+            auto path = QFileInfo(activity._file).dir().path().toUtf8();
+            if (path == ".")
+                path.clear();
+
+            if(engine.shouldDiscoverLocally(path))
+                _model->removeActivityFromActivityList(activity);
+        }
+
+    }
 
     if (progress.status() == ProgressInfo::Done) {
         // We keep track very well of pending conflicts.
@@ -171,18 +168,26 @@ void ActivityWidget::slotItemCompleted(const QString &folder, const SyncFileItem
         qCWarning(lcActivity) << "Item " << item->_file << " retrieved resulted in " << item->_errorString;
 
         Activity activity;
-        activity._type = Activity::SyncFileItemType;
+        activity._type = Activity::SyncFileItemType; //client activity
         activity._status = item->_status;
         activity._dateTime = QDateTime::fromString(QDateTime::currentDateTime().toString(), Qt::ISODate);
-        activity._subject = item->_errorString;
         activity._message = item->_originalFile;
         activity._link = folderInstance->accountState()->account()->url();
         activity._accName = folderInstance->accountState()->account()->displayName();
         activity._file = item->_file;
         activity._folder = folder;
 
-        // add 'protocol error' to activity list
-        _model->addErrorToActivityList(activity);
+        if(item->_status == SyncFileItem::NoStatus || item->_status == SyncFileItem::Success){
+            qCWarning(lcActivity) << "Item " << item->_file << " retrieved successfully.";
+            activity._message.prepend(tr("Synced "));
+            _model->addSyncFileItemToActivityList(activity);
+        } else {
+            qCWarning(lcActivity) << "Item " << item->_file << " retrieved resulted in error " << item->_errorString;
+            activity._subject = item->_errorString;
+
+            // add 'protocol error' to activity list
+            _model->addErrorToActivityList(activity);
+        }
     }
 }
 

Niektóre pliki nie zostały wyświetlone z powodu dużej ilości zmienionych plików