From 6e3809528e5d160f5f08e110a8ffd897acd3508a Mon Sep 17 00:00:00 2001 From: Jocelyn Turcotte Date: Tue, 5 Jan 2016 15:03:23 +0100 Subject: [PATCH] Fix OK statuses not being broadcasted during a sync #3944 Since the presence of any path in SyncEngine::_syncedItems would translate in a SYNC status, platforms that don't refresh all their status cache after an UPDATE_VIEW message like OS X or Windows would keep displaying that status even after all files are successfully synchronized. - Read SyncFileItem::_status to determine the status to display mid-sync - Match moved paths also to _renameTarget since this might be the path to match - Make sure that PropagateDirectory jobs also set SyncFileItem::_status properly --- src/libsync/owncloudpropagator.cpp | 3 ++- src/libsync/syncengine.cpp | 16 ++++++++++++---- 2 files changed, 14 insertions(+), 5 deletions(-) diff --git a/src/libsync/owncloudpropagator.cpp b/src/libsync/owncloudpropagator.cpp index f01660145..4d31c42ff 100644 --- a/src/libsync/owncloudpropagator.cpp +++ b/src/libsync/owncloudpropagator.cpp @@ -663,8 +663,9 @@ void PropagateDirectory::finalize() } } _state = Finished; + _item->_status = _hasError == SyncFileItem::NoStatus ? SyncFileItem::Success : _hasError; emit itemCompleted(*_item, *this); - emit finished(_hasError == SyncFileItem::NoStatus ? SyncFileItem::Success : _hasError); + emit finished(_item->_status); } qint64 PropagateDirectory::committedDiskSpace() const diff --git a/src/libsync/syncengine.cpp b/src/libsync/syncengine.cpp index 0fa7dc880..e5312e727 100644 --- a/src/libsync/syncengine.cpp +++ b/src/libsync/syncengine.cpp @@ -1221,12 +1221,20 @@ bool SyncEngine::estimateState(QString fn, csync_ftw_type_e t, SyncFileStatus* s } Q_FOREACH(const SyncFileItemPtr &item, _syncedItems) { - //qDebug() << Q_FUNC_INFO << fn << item._file << fn.startsWith(item._file) << item._file.startsWith(fn); + //qDebug() << Q_FUNC_INFO << fn << item->_status << item->_file << fn.startsWith(item->_file) << item->_file.startsWith(fn); if (item->_file.startsWith(pat) || - item->_file == fn /* the same directory or file */) { - qDebug() << Q_FUNC_INFO << "Setting" << fn << " to STATUS_EVAL"; - s->set(SyncFileStatus::STATUS_EVAL); + item->_file == fn || item->_renameTarget == fn /* the same directory or file */) { + if (item->_status == SyncFileItem::NormalError + || item->_status == SyncFileItem::FatalError) + s->set(SyncFileStatus::STATUS_ERROR); + else if (item->_status == SyncFileItem::FileIgnored) + s->set(SyncFileStatus::STATUS_IGNORE); + else if (item->_status == SyncFileItem::Success) + s->set(SyncFileStatus::STATUS_SYNC); + else + s->set(SyncFileStatus::STATUS_EVAL); + qDebug() << Q_FUNC_INFO << "Setting" << fn << "to" << s->toSocketAPIString(); return true; } } -- 2.30.2