Status Icons: Rename the syncEnable method to isPaused.

Previously, in folder and folderman there have been the syncEnabled
properties, but they confused the semantics: While in FolderMan the
syncEnabled flag represents the network connection and stuff, in
Folder it represented if the user paused or resumed the folder.

This resulted in mixed use of both, which lead to wrong icon states.
This patch renames the folder methods and properties to isPaused to
make more clear about what it is.
This commit is contained in:
Klaas Freitag 2014-08-19 13:58:20 +02:00
parent b62b87eed3
commit 01b0ee49de
7 changed files with 145 additions and 132 deletions

View File

@ -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.<br/>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.<br/>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 );
}
}

View File

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

View File

@ -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<SyncEngine> _engine;
QStringList _errors;

View File

@ -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<Folder*> &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<Folder*> &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<Folder*> &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);
}

View File

@ -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<Folder*> &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& );

View File

@ -42,7 +42,7 @@ class FolderStatusDelegate : public QStyledItemDelegate
FolderRemotePath,
FolderStatus,
FolderErrorMsg,
FolderSyncEnabled,
FolderSyncPaused,
FolderStatusIconRole,
SyncProgressOverallPercent,

View File

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