diff --git a/src/mirall/application.cpp b/src/mirall/application.cpp index ea7c5ed976..48b5559f94 100644 --- a/src/mirall/application.cpp +++ b/src/mirall/application.cpp @@ -936,6 +936,10 @@ void Application::computeOverallSyncStatus() folderMessage = tr( "Waits to start syncing." ); overallResult.setStatus( SyncResult::NotYetStarted ); break; + case SyncResult::SyncPrepare: + folderMessage = tr( "Preparing for sync." ); + overallResult.setStatus( SyncResult::SyncPrepare ); + break; case SyncResult::SyncRunning: folderMessage = tr( "Sync is running." ); overallResult.setStatus( SyncResult::SyncRunning ); diff --git a/src/mirall/csyncfolder.cpp b/src/mirall/csyncfolder.cpp index 23868a9b07..66c2853f94 100644 --- a/src/mirall/csyncfolder.cpp +++ b/src/mirall/csyncfolder.cpp @@ -58,6 +58,8 @@ void CSyncFolder::startSync(const QStringList &pathList) delete _thread; _errors.clear(); _csyncError = false; + _syncResult.setStatus( SyncResult::SyncRunning ); + emit syncStateChange(); _thread = new QThread(this); _csync = new CSyncThread( path(), secondPath() ); diff --git a/src/mirall/csyncthread.cpp b/src/mirall/csyncthread.cpp index 61f0dec8d2..2276b17698 100644 --- a/src/mirall/csyncthread.cpp +++ b/src/mirall/csyncthread.cpp @@ -226,6 +226,14 @@ int CSyncThread::treewalkFile( TREE_WALK_FILE *file, bool remote ) int re = 0; + switch(file->instruction) { + case CSYNC_INSTRUCTION_NONE: + case CSYNC_INSTRUCTION_IGNORE: + break; + default: + if (!_needsUpdate) + _needsUpdate = true; + } switch(file->instruction) { case CSYNC_INSTRUCTION_NONE: // No need to do anything. @@ -289,10 +297,9 @@ void CSyncThread::startSync() bool doTreeWalk = true; int proxyPort = _proxy.port(); - emit(started()); - _mutex.lock(); _syncedItems.clear(); + _needsUpdate = false; if( csync_create(&csync, _source.toUtf8().data(), @@ -376,6 +383,9 @@ void CSyncThread::startSync() doTreeWalk = false; } + if (_needsUpdate) + emit(started()); + if( csync_propagate(csync) < 0 ) { CSYNC_ERROR_CODE err = csync_get_error( csync ); const char *errMsg = csync_get_error_string( csync ); diff --git a/src/mirall/csyncthread.h b/src/mirall/csyncthread.h index d227b1b662..2535eb9223 100644 --- a/src/mirall/csyncthread.h +++ b/src/mirall/csyncthread.h @@ -92,6 +92,7 @@ private: QString _source; QString _target; + bool _needsUpdate; }; } diff --git a/src/mirall/folder.cpp b/src/mirall/folder.cpp index 5dcc686e00..9c07b0afa9 100644 --- a/src/mirall/folder.cpp +++ b/src/mirall/folder.cpp @@ -247,12 +247,6 @@ void Folder::evaluateSync(const QStringList &pathList) } -void Folder::startSync( const QStringList &pathList ) -{ - _syncResult.setStatus( SyncResult::SyncRunning ); - emit syncStateChange(); -} - void Folder::slotPollTimerTimeout() { qDebug() << "* Polling" << alias() << "for changes. Ignoring all pending events until now"; diff --git a/src/mirall/miralltheme.cpp b/src/mirall/miralltheme.cpp index 3a7b209cd7..5c76a9b170 100644 --- a/src/mirall/miralltheme.cpp +++ b/src/mirall/miralltheme.cpp @@ -71,6 +71,7 @@ QIcon mirallTheme::syncStateIcon( SyncResult::Status status, bool sysTray ) cons statusIcon = QLatin1String("dialog-close"); break; case SyncResult::NotYetStarted: + case SyncResult::SyncPrepare: statusIcon = QLatin1String("task-ongoing"); break; case SyncResult::SyncRunning: diff --git a/src/mirall/owncloudfolder.cpp b/src/mirall/owncloudfolder.cpp index 449f40ac75..4f29ec8303 100644 --- a/src/mirall/owncloudfolder.cpp +++ b/src/mirall/owncloudfolder.cpp @@ -123,7 +123,8 @@ void ownCloudFolder::startSync(const QStringList &pathList) _syncResult.clearErrors(); // we now have watchers for everything, so every sync is remote. _syncResult.setLocalRunOnly( false ); - Folder::startSync( pathList ); + _syncResult.setStatus( SyncResult::SyncPrepare ); + emit syncStateChange(); QString url = replaceScheme(_secondPath); @@ -150,13 +151,14 @@ void ownCloudFolder::startSync(const QStringList &pathList) connect(_csync, SIGNAL(csyncUnavailable()), SLOT(slotCsyncUnavailable()), Qt::QueuedConnection); _thread->start(); QMetaObject::invokeMethod(_csync, "startSync", Qt::QueuedConnection); - + emit syncStarted(); } void ownCloudFolder::slotCSyncStarted() { qDebug() << " * csync thread started"; - emit syncStarted(); + _syncResult.setStatus(SyncResult::SyncRunning); + emit syncStateChange(); } void ownCloudFolder::slotCSyncError(const QString& err) diff --git a/src/mirall/owncloudtheme.cpp b/src/mirall/owncloudtheme.cpp index bbfe664b95..756cbe9600 100644 --- a/src/mirall/owncloudtheme.cpp +++ b/src/mirall/owncloudtheme.cpp @@ -124,6 +124,7 @@ QIcon ownCloudTheme::syncStateIcon( SyncResult::Status status, bool sysTray ) co case SyncResult::SyncRunning: statusIcon = QLatin1String("state-sync"); break; + case SyncResult::SyncPrepare: case SyncResult::Success: statusIcon = QLatin1String("state-ok"); break; diff --git a/src/mirall/syncfileitem.h b/src/mirall/syncfileitem.h index 37afcc47b5..d3ef2b1f35 100644 --- a/src/mirall/syncfileitem.h +++ b/src/mirall/syncfileitem.h @@ -21,6 +21,10 @@ public: return item._file == this->_file; } + bool isEmpty() const { + return _file.isEmpty(); + } + // variables QString _file; QString _renameTarget; diff --git a/src/mirall/syncresult.h b/src/mirall/syncresult.h index 9d3e0fc1e0..bb86cb7178 100644 --- a/src/mirall/syncresult.h +++ b/src/mirall/syncresult.h @@ -31,6 +31,7 @@ public: { Undefined, NotYetStarted, + SyncPrepare, SyncRunning, Success, Error, diff --git a/src/mirall/unisonfolder.cpp b/src/mirall/unisonfolder.cpp index c5b722fde3..1c8e679a56 100644 --- a/src/mirall/unisonfolder.cpp +++ b/src/mirall/unisonfolder.cpp @@ -61,6 +61,8 @@ bool UnisonFolder::isBusy() const void UnisonFolder::startSync(const QStringList &pathList) { QMutexLocker locker(&_syncMutex); + _syncResult.setStatus( SyncResult::SyncRunning ); + emit syncStateChange(); emit syncStarted();