SocketAPI: fix status after a failure to move

Issue #7759
This commit is contained in:
Olivier Goffart 2020-03-25 11:37:03 +01:00 committed by Olivier Goffart
parent 6a42468513
commit 242e4e1d70
3 changed files with 55 additions and 5 deletions

View File

@ -0,0 +1,6 @@
Bugfix: Fix status icon after move errors
The file status icon was not showing an error when a move operation failed
https://github.com/owncloud/client/issues/7759

View File

@ -229,10 +229,10 @@ void SyncFileStatusTracker::slotAboutToPropagate(SyncFileItemVector &items)
_dirtyPaths.remove(item->destination());
if (hasErrorStatus(*item)) {
_syncProblems[item->_file] = SyncFileStatus::StatusError;
_syncProblems[item->destination()] = SyncFileStatus::StatusError;
invalidateParentPaths(item->destination());
} else if (hasExcludedStatus(*item)) {
_syncProblems[item->_file] = SyncFileStatus::StatusExcluded;
_syncProblems[item->destination()] = SyncFileStatus::StatusExcluded;
}
SharedFlag sharedFlag = item->_remotePerm.hasPermission(RemotePermissions::IsShared) ? Shared : NotShared;
@ -273,12 +273,12 @@ void SyncFileStatusTracker::slotItemCompleted(const SyncFileItemPtr &item)
qCDebug(lcStatusTracker) << "Item completed" << item->destination() << item->_status << item->_instruction;
if (hasErrorStatus(*item)) {
_syncProblems[item->_file] = SyncFileStatus::StatusError;
_syncProblems[item->destination()] = SyncFileStatus::StatusError;
invalidateParentPaths(item->destination());
} else if (hasExcludedStatus(*item)) {
_syncProblems[item->_file] = SyncFileStatus::StatusExcluded;
_syncProblems[item->destination()] = SyncFileStatus::StatusExcluded;
} else {
_syncProblems.erase(item->_file);
_syncProblems.erase(item->destination());
}
SharedFlag sharedFlag = item->_remotePerm.hasPermission(RemotePermissions::IsShared) ? Shared : NotShared;

View File

@ -465,6 +465,50 @@ private slots:
QCOMPARE(fakeFolder.currentLocalState(), fakeFolder.currentRemoteState());
}
void renameError() {
FakeFolder fakeFolder{FileInfo::A12_B12_C12_S12()};
fakeFolder.serverErrorPaths().append("A/a1");
fakeFolder.localModifier().rename("A/a1", "A/a1m");
fakeFolder.localModifier().rename("B/b1", "B/b1m");
StatusPushSpy statusSpy(fakeFolder.syncEngine());
fakeFolder.scheduleSync();
fakeFolder.execUntilBeforePropagation();
verifyThatPushMatchesPull(fakeFolder, statusSpy);
QCOMPARE(statusSpy.statusOf("A/a1m"), SyncFileStatus(SyncFileStatus::StatusSync));
QCOMPARE(statusSpy.statusOf("A/a1"), statusSpy.statusOf("A/a1notexist"));
QCOMPARE(statusSpy.statusOf("A"), SyncFileStatus(SyncFileStatus::StatusSync));
QCOMPARE(statusSpy.statusOf(""), SyncFileStatus(SyncFileStatus::StatusSync));
QCOMPARE(statusSpy.statusOf("B"), SyncFileStatus(SyncFileStatus::StatusSync));
QCOMPARE(statusSpy.statusOf("B/b1m"), SyncFileStatus(SyncFileStatus::StatusSync));
fakeFolder.execUntilFinished();
verifyThatPushMatchesPull(fakeFolder, statusSpy);
QCOMPARE(statusSpy.statusOf("A/a1m"), SyncFileStatus(SyncFileStatus::StatusError));
QCOMPARE(statusSpy.statusOf("A/a1"), statusSpy.statusOf("A/a1notexist"));
QCOMPARE(statusSpy.statusOf("A"), SyncFileStatus(SyncFileStatus::StatusWarning));
QCOMPARE(statusSpy.statusOf(""), SyncFileStatus(SyncFileStatus::StatusWarning));
QCOMPARE(statusSpy.statusOf("B"), SyncFileStatus(SyncFileStatus::StatusUpToDate));
QCOMPARE(statusSpy.statusOf("B/b1m"), SyncFileStatus(SyncFileStatus::StatusUpToDate));
statusSpy.clear();
QVERIFY(!fakeFolder.syncOnce());
verifyThatPushMatchesPull(fakeFolder, statusSpy);
statusSpy.clear();
QVERIFY(!fakeFolder.syncOnce());
verifyThatPushMatchesPull(fakeFolder, statusSpy);
QCOMPARE(statusSpy.statusOf("A/a1m"), SyncFileStatus(SyncFileStatus::StatusError));
QCOMPARE(statusSpy.statusOf("A/a1"), statusSpy.statusOf("A/a1notexist"));
QCOMPARE(statusSpy.statusOf("A"), SyncFileStatus(SyncFileStatus::StatusWarning));
QCOMPARE(statusSpy.statusOf(""), SyncFileStatus(SyncFileStatus::StatusWarning));
QCOMPARE(statusSpy.statusOf("B"), SyncFileStatus(SyncFileStatus::StatusNone));
QCOMPARE(statusSpy.statusOf("B/b1m"), SyncFileStatus(SyncFileStatus::StatusNone));
statusSpy.clear();
}
};
QTEST_GUILESS_MAIN(TestSyncFileStatusTracker)