FolderMan: Make folderSyncStateChange() signal reliable. #3354

This commit is contained in:
Christian Kamm 2015-06-17 15:55:48 +02:00
parent f4c816f378
commit 10aaf18129
3 changed files with 34 additions and 20 deletions

View file

@ -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();

View file

@ -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 ) {
folderDefinition.paused = paused;
folder = addFolderInternal(folderDefinition);
if (folder) {
folder->setAccountState(accountState);
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)));
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;

View file

@ -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);