diff --git a/src/mirall/accountsettings.cpp b/src/mirall/accountsettings.cpp index 7298c2c139..93479cb349 100644 --- a/src/mirall/accountsettings.cpp +++ b/src/mirall/accountsettings.cpp @@ -159,8 +159,8 @@ void AccountSettings::slotFolderActivated( const QModelIndex& indx ) ui->_buttonEnable->setEnabled( isValid ); if ( isValid ) { - bool folderEnabled = _model->data( indx, FolderStatusDelegate::FolderSyncEnabled).toBool(); - if ( folderEnabled ) { + bool folderPaused = _model->data( indx, FolderStatusDelegate::FolderSyncPaused).toBool(); + if ( !folderPaused) { ui->_buttonEnable->setText( tr( "Pause" ) ); } else { ui->_buttonEnable->setText( tr( "Resume" ) ); @@ -256,8 +256,7 @@ void AccountSettings::folderToModelItem( QStandardItem *item, Folder *f ) item->setData( f->nativePath(), FolderStatusDelegate::FolderPathRole ); item->setData( f->remotePath(), FolderStatusDelegate::FolderSecondPathRole ); item->setData( f->alias(), FolderStatusDelegate::FolderAliasRole ); - item->setData( f->syncEnabled(), FolderStatusDelegate::FolderSyncEnabled ); - + item->setData( f->syncPaused(), FolderStatusDelegate::FolderSyncPaused ); SyncResult res = f->syncResult(); SyncResult::Status status = res.status(); @@ -266,7 +265,10 @@ void AccountSettings::folderToModelItem( QStandardItem *item, Folder *f ) Theme *theme = Theme::instance(); item->setData( theme->statusHeaderText( status ), Qt::ToolTipRole ); if (_account->state() == Account::Connected) { - if( f->syncEnabled() ) { + if( f->syncPaused() ) { + item->setData( theme->folderDisabledIcon( ), FolderStatusDelegate::FolderStatusIconRole ); // size 48 before + _wasDisabledBefore = false; + } else { if( status == SyncResult::SyncPrepare ) { if( _wasDisabledBefore ) { // if the folder was disabled before, set the sync icon @@ -284,9 +286,6 @@ void AccountSettings::folderToModelItem( QStandardItem *item, Folder *f ) item->setData( theme->syncStateIcon( status ), FolderStatusDelegate::FolderStatusIconRole ); } } - } else { - item->setData( theme->folderDisabledIcon( ), FolderStatusDelegate::FolderStatusIconRole ); // size 48 before - _wasDisabledBefore = false; } } else { item->setData( theme->folderOfflineIcon(), FolderStatusDelegate::FolderStatusIconRole); @@ -431,57 +430,60 @@ void AccountSettings::slotEnableCurrentFolder() if( selected.isValid() ) { QString alias = _model->data( selected, FolderStatusDelegate::FolderAliasRole ).toString(); - bool folderEnabled = _model->data( selected, FolderStatusDelegate::FolderSyncEnabled).toBool(); - qDebug() << "Toggle enabled/disabled Folder alias " << alias << " - current state: " << folderEnabled; - if( !alias.isEmpty() ) { - FolderMan *folderMan = FolderMan::instance(); - qDebug() << "Application: enable folder with alias " << alias; - bool terminate = false; - - // this sets the folder status to disabled but does not interrupt it. - Folder *f = folderMan->folder( alias ); - if (!f) { - return; - } - - if( folderEnabled ) { - // check if a sync is still running and if so, ask if we should terminate. - if( f->isBusy() ) { // its still running -#if defined(Q_OS_MAC) - QWidget *parent = this; - Qt::WindowFlags flags = Qt::Sheet; -#else - QWidget *parent = 0; - Qt::WindowFlags flags = Qt::Dialog | Qt::MSWindowsFixedSizeDialogHint; // default flags -#endif - QMessageBox msgbox(QMessageBox::Question, tr("Sync Running"), - tr("The syncing operation is running.
Do you want to terminate it?"), - QMessageBox::Yes | QMessageBox::No, parent, flags); - msgbox.setDefaultButton(QMessageBox::Yes); - int reply = msgbox.exec(); - if ( reply == QMessageBox::Yes ) - terminate = true; - else - return; // do nothing - } - } - - // message box can return at any time while the thread keeps running, - // so better check again after the user has responded. - if ( f->isBusy() && terminate ) { - f->slotTerminateSync(); - } - - folderMan->slotEnableFolder( alias, !folderEnabled ); - - // keep state for the icon setting. - if( !folderEnabled ) _wasDisabledBefore = true; - - slotUpdateFolderState (f); - // set the button text accordingly. - slotFolderActivated( selected ); + if( alias.isEmpty() ) { + qDebug() << "Empty alias to enable."; + return; } + + FolderMan *folderMan = FolderMan::instance(); + + qDebug() << "Application: enable folder with alias " << alias; + bool terminate = false; + bool currentlyPaused = false; + + // this sets the folder status to disabled but does not interrupt it. + Folder *f = folderMan->folder( alias ); + if (!f) { + return; + } + currentlyPaused = f->syncPaused(); + if( ! currentlyPaused ) { + // check if a sync is still running and if so, ask if we should terminate. + if( f->isBusy() ) { // its still running +#if defined(Q_OS_MAC) + QWidget *parent = this; + Qt::WindowFlags flags = Qt::Sheet; +#else + QWidget *parent = 0; + Qt::WindowFlags flags = Qt::Dialog | Qt::MSWindowsFixedSizeDialogHint; // default flags +#endif + QMessageBox msgbox(QMessageBox::Question, tr("Sync Running"), + tr("The syncing operation is running.
Do you want to terminate it?"), + QMessageBox::Yes | QMessageBox::No, parent, flags); + msgbox.setDefaultButton(QMessageBox::Yes); + int reply = msgbox.exec(); + if ( reply == QMessageBox::Yes ) + terminate = true; + else + return; // do nothing + } + } + + // message box can return at any time while the thread keeps running, + // so better check again after the user has responded. + if ( f->isBusy() && terminate ) { + f->slotTerminateSync(); + } + f->setSyncPaused(!currentlyPaused); // toggle the pause setting + folderMan->slotSetFolderPaused( alias, !currentlyPaused ); + + // keep state for the icon setting. + if( currentlyPaused ) _wasDisabledBefore = true; + + slotUpdateFolderState (f); + // set the button text accordingly. + slotFolderActivated( selected ); } } diff --git a/src/mirall/folder.cpp b/src/mirall/folder.cpp index 6844e4999e..6660d0a2a5 100644 --- a/src/mirall/folder.cpp +++ b/src/mirall/folder.cpp @@ -54,7 +54,7 @@ Folder::Folder(const QString &alias, const QString &path, const QString& secondP , _path(path) , _remotePath(secondPath) , _alias(alias) - , _enabled(true) + , _paused(false) , _csyncError(false) , _csyncUnavail(false) , _wipeDb(false) @@ -215,14 +215,14 @@ QString Folder::nativePath() const return QDir::toNativeSeparators(_path); } -bool Folder::syncEnabled() const +bool Folder::syncPaused() const { - return _enabled; + return _paused; } -void Folder::setSyncEnabled( bool doit ) +void Folder::setSyncPaused( bool doit ) { - _enabled = doit; + _paused = doit; if( doit ) { // qDebug() << "Syncing enabled on folder " << name(); diff --git a/src/mirall/folder.h b/src/mirall/folder.h index 0e5656c980..dcea1a2d3c 100644 --- a/src/mirall/folder.h +++ b/src/mirall/folder.h @@ -85,9 +85,9 @@ public: * If the sync is switched off, the startSync method is not going to * be called. */ - void setSyncEnabled( bool ); + void setSyncPaused( bool ); - bool syncEnabled() const; + bool syncPaused() const; void prepareToSync(); @@ -185,7 +185,7 @@ private: QString _remotePath; QString _alias; QString _configFile; - bool _enabled; + bool _paused; SyncResult _syncResult; QScopedPointer _engine; QStringList _errors; diff --git a/src/mirall/folderman.cpp b/src/mirall/folderman.cpp index 7ec10a3d6a..11da864941 100644 --- a/src/mirall/folderman.cpp +++ b/src/mirall/folderman.cpp @@ -330,7 +330,7 @@ Folder* FolderMan::setupFolderFromConfigFile(const QString &file) { qDebug() << "Adding folder to Folder Map " << folder; _folderMap[alias] = folder; if (paused) { - folder->setSyncEnabled(!paused); + folder->setSyncPaused(paused); _disabledFolders.insert(folder); } @@ -361,7 +361,7 @@ void FolderMan::slotEnableFolder( const QString& alias, bool enable ) // FIXME: Use MirallConfigFile QSettings settings(_folderConfigPath + QLatin1Char('/') + f->configFile(), QSettings::IniFormat); settings.beginGroup(escapeAlias(f->alias())); - if (enable) { + if (!paused) { settings.remove("paused"); _disabledFolders.remove(f); } else { @@ -410,7 +410,7 @@ SyncResult FolderMan::syncResult( const QString& alias ) void FolderMan::slotScheduleAllFolders() { foreach( Folder *f, _folderMap.values() ) { - if (f && f->syncEnabled()) { + if (f && ! f->syncPaused()) { slotScheduleSync( f->alias() ); } } @@ -433,7 +433,7 @@ void FolderMan::slotScheduleSync( const QString& alias ) if( ! _scheduleQueue.contains(alias ) && _folderMap.contains(alias) ) { Folder *f = _folderMap[alias]; if( f ) { - if( f->syncEnabled() ) { + if( !f->syncPaused() ) { f->prepareToSync(); } else { qDebug() << "Folder is not enabled, not scheduled!"; @@ -487,7 +487,7 @@ void FolderMan::slotScheduleFolderSync() const QString alias = _scheduleQueue.dequeue(); if( _folderMap.contains( alias ) ) { Folder *f = _folderMap[alias]; - if( f && f->syncEnabled() ) { + if( f && !f->syncPaused() ) { _currentSyncFolder = alias; f->startSync( QStringList() ); @@ -585,7 +585,7 @@ void FolderMan::removeFolder( const QString& alias ) f->wipe(); // can be removed if we are able to delete the folder object. - f->setSyncEnabled(false); + f->setSyncPaused(true); // remove the folder configuration QFile file( _folderConfigPath + QLatin1Char('/') + f->configFile() ); @@ -680,39 +680,44 @@ SyncResult FolderMan::accountStatus(const QList &folders) if( cnt == 1 ) { Folder *folder = folders.at(0); if( folder ) { - SyncResult::Status syncStatus = folder->syncResult().status(); + if( folder->syncPaused() ) { + overallResult.setStatus(SyncResult::Paused); + } else { + SyncResult::Status syncStatus = folder->syncResult().status(); - switch( syncStatus ) { - case SyncResult::Undefined: - overallResult.setStatus(SyncResult::Error); - break; - case SyncResult::NotYetStarted: - overallResult.setStatus( SyncResult::NotYetStarted ); - break; - case SyncResult::SyncPrepare: - overallResult.setStatus( SyncResult::SyncPrepare ); - break; - case SyncResult::SyncRunning: - overallResult.setStatus( SyncResult::SyncRunning ); - break; - case SyncResult::Problem: // don't show the problem icon in tray. - case SyncResult::Success: - if( overallResult.status() == SyncResult::Undefined ) - overallResult.setStatus( SyncResult::Success ); - break; - case SyncResult::Error: - overallResult.setStatus( SyncResult::Error ); - break; - case SyncResult::SetupError: - if ( overallResult.status() != SyncResult::Error ) - overallResult.setStatus( SyncResult::SetupError ); - break; - case SyncResult::SyncAbortRequested: - overallResult.setStatus( SyncResult::SyncAbortRequested); - break; - case SyncResult::Paused: - overallResult.setStatus( SyncResult::Paused); - break; + + switch( syncStatus ) { + case SyncResult::Undefined: + overallResult.setStatus(SyncResult::Error); + break; + case SyncResult::NotYetStarted: + overallResult.setStatus( SyncResult::NotYetStarted ); + break; + case SyncResult::SyncPrepare: + overallResult.setStatus( SyncResult::SyncPrepare ); + break; + case SyncResult::SyncRunning: + overallResult.setStatus( SyncResult::SyncRunning ); + break; + case SyncResult::Problem: // don't show the problem icon in tray. + case SyncResult::Success: + if( overallResult.status() == SyncResult::Undefined ) + overallResult.setStatus( SyncResult::Success ); + break; + case SyncResult::Error: + overallResult.setStatus( SyncResult::Error ); + break; + case SyncResult::SetupError: + if ( overallResult.status() != SyncResult::Error ) + overallResult.setStatus( SyncResult::SetupError ); + break; + case SyncResult::SyncAbortRequested: + overallResult.setStatus( SyncResult::SyncAbortRequested); + break; + case SyncResult::Paused: + overallResult.setStatus( SyncResult::Paused); + break; + } } } } else { @@ -723,30 +728,34 @@ SyncResult FolderMan::accountStatus(const QList &folders) int various = 0; foreach ( Folder *folder, folders ) { - SyncResult folderResult = folder->syncResult(); - SyncResult::Status syncStatus = folderResult.status(); - - switch( syncStatus ) { - case SyncResult::Undefined: - case SyncResult::NotYetStarted: - case SyncResult::SyncPrepare: - various++; - break; - case SyncResult::SyncRunning: - runSeen++; - break; - case SyncResult::Problem: // don't show the problem icon in tray. - case SyncResult::Success: - goodSeen++; - break; - case SyncResult::Error: - case SyncResult::SetupError: - errorsSeen++; - break; - case SyncResult::SyncAbortRequested: - case SyncResult::Paused: + if( folder->syncPaused() ) { abortSeen++; - // no default case on purpose, check compiler warnings + } else { + SyncResult folderResult = folder->syncResult(); + SyncResult::Status syncStatus = folderResult.status(); + + switch( syncStatus ) { + case SyncResult::Undefined: + case SyncResult::NotYetStarted: + case SyncResult::SyncPrepare: + various++; + break; + case SyncResult::SyncRunning: + runSeen++; + break; + case SyncResult::Problem: // don't show the problem icon in tray. + case SyncResult::Success: + goodSeen++; + break; + case SyncResult::Error: + case SyncResult::SetupError: + errorsSeen++; + break; + case SyncResult::SyncAbortRequested: + case SyncResult::Paused: + abortSeen++; + // no default case on purpose, check compiler warnings + } } } bool set = false; @@ -772,7 +781,7 @@ SyncResult FolderMan::accountStatus(const QList &folders) return overallResult; } -QString FolderMan::statusToString( SyncResult syncStatus, bool enabled ) const +QString FolderMan::statusToString( SyncResult syncStatus, bool paused ) const { QString folderMessage; switch( syncStatus.status() ) { @@ -807,7 +816,7 @@ QString FolderMan::statusToString( SyncResult syncStatus, bool enabled ) const break; // no default case on purpose, check compiler warnings } - if( !enabled ) { + if( paused ) { // sync is disabled. folderMessage = tr( "%1 (Sync is paused)" ).arg(folderMessage); } diff --git a/src/mirall/folderman.h b/src/mirall/folderman.h index c3a8d0012d..1b4c55188a 100644 --- a/src/mirall/folderman.h +++ b/src/mirall/folderman.h @@ -77,7 +77,7 @@ public: /** Creates a new and empty local directory. */ bool startFromScratch( const QString& ); - QString statusToString( SyncResult, bool enabled ) const; + QString statusToString(SyncResult, bool paused ) const; static SyncResult accountStatus( const QList &folders ); @@ -88,6 +88,8 @@ signals: /** * signal to indicate a folder named by alias has changed its sync state. * Get the state via the Folder Map or the syncResult and syncState methods. + * + * Attention: The alias string may be zero. Do a general update of the state than. */ void folderSyncStateChange( const QString & ); @@ -95,7 +97,7 @@ signals: public slots: void slotRemoveFolder( const QString& ); - void slotEnableFolder( const QString&, bool ); + void slotSetFolderPaused(const QString&, bool paused); void slotFolderSyncStarted(); void slotFolderSyncFinished( const SyncResult& ); diff --git a/src/mirall/folderstatusmodel.h b/src/mirall/folderstatusmodel.h index 74acaa08af..77120b324d 100644 --- a/src/mirall/folderstatusmodel.h +++ b/src/mirall/folderstatusmodel.h @@ -42,7 +42,7 @@ class FolderStatusDelegate : public QStyledItemDelegate FolderRemotePath, FolderStatus, FolderErrorMsg, - FolderSyncEnabled, + FolderSyncPaused, FolderStatusIconRole, SyncProgressOverallPercent, diff --git a/src/mirall/owncloudgui.cpp b/src/mirall/owncloudgui.cpp index baa84bb1f5..9bb2743b95 100644 --- a/src/mirall/owncloudgui.cpp +++ b/src/mirall/owncloudgui.cpp @@ -249,7 +249,7 @@ void ownCloudGui::slotComputeOverallSyncStatus() QStringList allStatusStrings; foreach(Folder* folder, map.values()) { qDebug() << "Folder in overallStatus Message: " << folder << " with name " << folder->alias(); - QString folderMessage = folderMan->statusToString(folder->syncResult().status(), folder->syncEnabled()); + QString folderMessage = folderMan->statusToString(folder->syncResult().status(), folder->syncPaused()); allStatusStrings += tr("Folder %1: %2").arg(folder->alias(), folderMessage); }