[Pkg-owncloud-commits] [owncloud-client] 200/498: FolderMan: Make folderSyncStateChange() signal reliable. #3354

Sandro Knauß hefee-guest at moszumanska.debian.org
Tue Aug 11 14:48:50 UTC 2015


This is an automated email from the git hooks/post-receive script.

hefee-guest pushed a commit to branch master
in repository owncloud-client.

commit 10aaf18129a8da2c2789f2a09fb706b337b945c7
Author: Christian Kamm <kamm at incasoftware.de>
Date:   Wed Jun 17 15:55:48 2015 +0200

    FolderMan: Make folderSyncStateChange() signal reliable. #3354
---
 src/gui/folder.cpp    |  6 +++++-
 src/gui/folderman.cpp | 41 +++++++++++++++++++++++------------------
 src/gui/folderman.h   |  7 ++++++-
 3 files changed, 34 insertions(+), 20 deletions(-)

diff --git a/src/gui/folder.cpp b/src/gui/folder.cpp
index 6a4e9a9..06e0086 100644
--- a/src/gui/folder.cpp
+++ b/src/gui/folder.cpp
@@ -74,7 +74,11 @@ Folder::Folder(const FolderDefinition& definition,
     _timeSinceLastSyncStart.start();
     _timeSinceLastSyncDone.start();
 
-    _syncResult.setStatus( SyncResult::NotYetStarted );
+    SyncResult::Status status = SyncResult::NotYetStarted;
+    if (definition.paused) {
+        status = SyncResult::Paused;
+    }
+    _syncResult.setStatus(status);
 
     // check if the local path exists
     checkLocalPath();
diff --git a/src/gui/folderman.cpp b/src/gui/folderman.cpp
index 86446d8..6ed55f8 100644
--- a/src/gui/folderman.cpp
+++ b/src/gui/folderman.cpp
@@ -107,6 +107,15 @@ void FolderMan::unloadFolder( Folder *f )
         _folderWatchers.remove(f->alias());
     }
     _folderMap.remove( f->alias() );
+
+    disconnect(f, SIGNAL(scheduleToSync(Folder*)),
+               this, SLOT(slotScheduleSync(Folder*)));
+    disconnect(f, SIGNAL(syncStarted()),
+               this, SLOT(slotFolderSyncStarted()));
+    disconnect(f, SIGNAL(syncFinished(SyncResult)),
+               this, SLOT(slotFolderSyncFinished(SyncResult)));
+    disconnect(f, SIGNAL(syncStateChange()),
+               this, SLOT(slotForwardFolderSyncStateChange()));
 }
 
 int FolderMan::unloadAndDeleteAllFolders()
@@ -389,22 +398,12 @@ Folder* FolderMan::setupFolderFromOldConfigFile(const QString &file, AccountStat
     folderDefinition.alias = alias;
     folderDefinition.localPath = path;
     folderDefinition.targetPath = targetPath;
-    folder = new Folder(folderDefinition, this );
-    if( folder ) {
-        folder->setAccountState(accountState);
+    folderDefinition.paused = paused;
 
-        qDebug() << "Adding folder to Folder Map " << folder;
-        _folderMap[alias] = folder;
-        if (paused) {
-            folder->setSyncPaused(paused);
-            _disabledFolders.insert(folder);
-        }
-
-        connect(folder, SIGNAL(scheduleToSync(Folder*)), SLOT(slotScheduleSync(Folder*)));
-        connect(folder, SIGNAL(syncStarted()), SLOT(slotFolderSyncStarted()));
-        connect(folder, SIGNAL(syncFinished(SyncResult)), SLOT(slotFolderSyncFinished(SyncResult)));
+    folder = addFolderInternal(folderDefinition);
+    if (folder) {
+        folder->setAccountState(accountState);
 
-        registerFolderMonitor(folder);
         QStringList blackList = settings.value( QLatin1String("blackList")).toStringList();
         if (!blackList.empty()) {
             //migrate settings
@@ -690,6 +689,13 @@ void FolderMan::slotRemoveFoldersForAccount(AccountState* accountState)
     }
 }
 
+void FolderMan::slotForwardFolderSyncStateChange()
+{
+    if (Folder* f = qobject_cast<Folder*>(sender())) {
+        emit folderSyncStateChange(f);
+    }
+}
+
 void FolderMan::slotFolderSyncStarted( )
 {
     qDebug() << ">===================================== sync started for " << _currentSyncFolder->alias();
@@ -731,16 +737,15 @@ Folder* FolderMan::addFolderInternal(const FolderDefinition& folderDefinition)
 
     qDebug() << "Adding folder to Folder Map " << folder;
     _folderMap[folder->alias()] = folder;
-    if (folderDefinition.paused) {
-        folder->setSyncPaused(true);
+    if (folder->syncPaused()) {
         _disabledFolders.insert(folder);
     }
 
-    /* Use a signal mapper to connect the signals to the alias */
+    // See matching disconnects in unloadFolder().
     connect(folder, SIGNAL(scheduleToSync(Folder*)), SLOT(slotScheduleSync(Folder*)));
     connect(folder, SIGNAL(syncStarted()), SLOT(slotFolderSyncStarted()));
     connect(folder, SIGNAL(syncFinished(SyncResult)), SLOT(slotFolderSyncFinished(SyncResult)));
-
+    connect(folder, SIGNAL(syncStateChange()), SLOT(slotForwardFolderSyncStateChange()));
 
     registerFolderMonitor(folder);
     return folder;
diff --git a/src/gui/folderman.h b/src/gui/folderman.h
index 6102bc7..6348728 100644
--- a/src/gui/folderman.h
+++ b/src/gui/folderman.h
@@ -135,8 +135,13 @@ private slots:
 
     void slotRemoveFoldersForAccount(AccountState* accountState);
 
+    // Wraps the Folder::syncStateChange() signal into the
+    // FolderMan::folderSyncStateChange(Folder*) signal.
+    void slotForwardFolderSyncStateChange();
+
 private:
-    /** Adds a folder for an account, does not add it to the account settings.
+    /** Adds a new folder, does not add it to the account settings and
+     *  does not set an account on the new folder.
       */
     Folder* addFolderInternal(const FolderDefinition& folderDefinition);
 

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-owncloud/owncloud-client.git



More information about the Pkg-owncloud-commits mailing list