diff --git a/changelog/unreleased/7759 b/changelog/unreleased/7759 new file mode 100644 index 00000000000..d5597019d58 --- /dev/null +++ b/changelog/unreleased/7759 @@ -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 + diff --git a/src/libsync/syncfilestatustracker.cpp b/src/libsync/syncfilestatustracker.cpp index abfdf003365..9bf802ca84a 100644 --- a/src/libsync/syncfilestatustracker.cpp +++ b/src/libsync/syncfilestatustracker.cpp @@ -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; diff --git a/test/testsyncfilestatustracker.cpp b/test/testsyncfilestatustracker.cpp index 29143be6bf5..f1b27447c72 100644 --- a/test/testsyncfilestatustracker.cpp +++ b/test/testsyncfilestatustracker.cpp @@ -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)