]> dgit.raspbian.org Git - nextcloud-desktop.git/commitdiff
SyncFileStatusTracker: Add a method to handle the root item.
authorKlaas Freitag <freitag@owncloud.com>
Fri, 15 Apr 2016 13:02:02 +0000 (15:02 +0200)
committerKlaas Freitag <freitag@owncloud.com>
Fri, 15 Apr 2016 13:02:02 +0000 (15:02 +0200)
src/libsync/syncfilestatustracker.cpp
src/libsync/syncfilestatustracker.h

index 8f4f734f3736a91b9aa947027bc3c02c70bd9556..a2df3bc3f75fbb384477fbce361827923e757b35 100644 (file)
@@ -77,6 +77,43 @@ SyncFileStatusTracker::SyncFileStatusTracker(SyncEngine *syncEngine)
             this, SLOT(slotItemCompleted(const SyncFileItem&)));
 }
 
+SyncFileStatus SyncFileStatusTracker::rootStatus()
+{
+    /* Possible values for the status:
+    enum SyncFileStatusTag {
+        StatusNone,
+        StatusSync,
+        StatusWarning,
+        StatusUpToDate,
+        StatusError,
+    };
+    */
+    SyncFileStatus status =  SyncFileStatus::StatusUpToDate;
+
+    if( !_syncEngine ) return SyncFileStatus::StatusNone;
+
+    if( _syncEngine->isSyncRunning() ) {
+        status = SyncFileStatus::StatusSync;
+    } else {
+        // sync is not running. Check dirty list and _syncProblems
+        int errs = 0, warns = 0;
+        for (auto it = _syncProblems.begin(); it != _syncProblems.end(); ++it) {
+            if( it->second == SyncFileStatus::StatusError ) {
+                errs ++;
+                break; // stop if an error found at all.
+            } else {
+                warns ++;
+            }
+        }
+        if( errs ) {
+            status = SyncFileStatus::StatusError;
+        } else if( warns ) {
+            status = SyncFileStatus::StatusWarning;
+        }
+    }
+    return status;
+
+}
 
 SyncFileStatus SyncFileStatusTracker::fileStatus(const QString& systemFileName)
 {
@@ -86,6 +123,11 @@ SyncFileStatus SyncFileStatusTracker::fileStatus(const QString& systemFileName)
         qDebug() << "Removed trailing slash: " << fileName;
     }
 
+    if( fileName.isEmpty() ) {
+        // this is the root sync folder.
+        return rootStatus();
+
+    }
     // The SyncEngine won't notify us at all for CSYNC_FILE_SILENTLY_EXCLUDED
     // and CSYNC_FILE_EXCLUDE_AND_REMOVE excludes. Even though it's possible
     // that the status of CSYNC_FILE_EXCLUDE_LIST excludes will change if the user
@@ -96,8 +138,9 @@ SyncFileStatus SyncFileStatusTracker::fileStatus(const QString& systemFileName)
         return SyncFileStatus(SyncFileStatus::StatusWarning);
 
     SyncFileItem* item = _syncEngine->findSyncItem(fileName);
-    if (item)
+    if (item) {
         return fileStatus(*item);
+    }
 
     // If we're not currently syncing that file, look it up in the database to know if it's shared
     SyncJournalFileRecord rec = _syncEngine->journal()->getFileRecord(fileName);
index e8e398415bd3e8c620423a89bfd39c496c787e70..fe8b9b9f5759b9c87f811ba811f2fe30c102ef0a 100644 (file)
@@ -45,10 +45,13 @@ private slots:
 
 private:
     SyncFileStatus fileStatus(const SyncFileItem& item);
+    SyncFileStatus rootStatus();
+
     void invalidateParentPaths(const QString& path);
     QString getSystemDestination(const SyncFileItem& syncEnginePath);
 
     SyncEngine* _syncEngine;
+
     std::map<QString, SyncFileStatus::SyncFileStatusTag> _syncProblems;
 };