mirror of
https://github.com/nextcloud/desktop.git
synced 2025-10-26 11:17:43 +00:00
Introduce SyncPrepare state
SyncPrepare is when the folder class prepares the actual syncing, i.e. does treewalks and runs the reconceiler in case of mirall. The actual SyncRunning state will only be entered if there is actually anything to sync. Fixes #289
This commit is contained in:
parent
7290afc6fe
commit
8dd97a358a
@ -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 );
|
||||
|
||||
@ -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() );
|
||||
|
||||
@ -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 );
|
||||
|
||||
@ -92,6 +92,7 @@ private:
|
||||
|
||||
QString _source;
|
||||
QString _target;
|
||||
bool _needsUpdate;
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
@ -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";
|
||||
|
||||
@ -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:
|
||||
|
||||
@ -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)
|
||||
|
||||
@ -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;
|
||||
|
||||
@ -21,6 +21,10 @@ public:
|
||||
return item._file == this->_file;
|
||||
}
|
||||
|
||||
bool isEmpty() const {
|
||||
return _file.isEmpty();
|
||||
}
|
||||
|
||||
// variables
|
||||
QString _file;
|
||||
QString _renameTarget;
|
||||
|
||||
@ -31,6 +31,7 @@ public:
|
||||
{
|
||||
Undefined,
|
||||
NotYetStarted,
|
||||
SyncPrepare,
|
||||
SyncRunning,
|
||||
Success,
|
||||
Error,
|
||||
|
||||
@ -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();
|
||||
|
||||
|
||||
Loading…
Reference in New Issue
Block a user