item->_file = path._target;
item->_originalFile = path._original;
item->_inode = localEntry.inode;
+ item->_isSelectiveSync = true;
if (dbEntry.isValid() && ((dbEntry._modtime == localEntry.modtime && dbEntry._fileSize == localEntry.size) || (localEntry.isDirectory && dbEntry.isDirectory()))) {
item->_instruction = CSYNC_INSTRUCTION_REMOVE;
item->_direction = SyncFileItem::Down;
item->_status = SyncFileItem::Conflict;
}
return;
- } else if (item->_instruction == CSYNC_INSTRUCTION_REMOVE) {
+ } else if (item->_instruction == CSYNC_INSTRUCTION_REMOVE && !item->_isSelectiveSync) {
_hasRemoveFile = true;
} else if (item->_instruction == CSYNC_INSTRUCTION_RENAME) {
_hasNoneFiles = true; // If a file (or every file) has been renamed, it means not al files where deleted
, _errorMayBeBlacklisted(false)
, _status(NoStatus)
, _isRestoration(false)
+ , _isSelectiveSync(false)
{
}
// Variables useful to report to the user
Status _status BITFIELD(4);
bool _isRestoration BITFIELD(1); // The original operation was forbidden, and this is a restoration
+ bool _isSelectiveSync BITFIELD(1); // The file is removed or ignored because it is in the selective sync list
quint16 _httpErrorCode = 0;
RemotePermissions _remotePerm;
QString _errorString; // Contains a string only in case of error
QCOMPARE(aboutToRemoveAllFilesCalled, 0);
QCOMPARE(fakeFolder.currentLocalState(), fakeFolder.currentRemoteState());
}
+
+ void testSelectiveSyncNoPopup() {
+ // Unselecting all folder should not cause the popup to be shown
+ FakeFolder fakeFolder{FileInfo::A12_B12_C12_S12()};
+
+ int aboutToRemoveAllFilesCalled = 0;
+ QObject::connect(&fakeFolder.syncEngine(), &SyncEngine::aboutToRemoveAllFiles,
+ [&](SyncFileItem::Direction , bool *) {
+ aboutToRemoveAllFilesCalled++;
+ QFAIL("should not be called");
+ });
+
+ QVERIFY(fakeFolder.syncOnce());
+ QCOMPARE(aboutToRemoveAllFilesCalled, 0);
+ QCOMPARE(fakeFolder.currentLocalState(), fakeFolder.currentRemoteState());
+
+ fakeFolder.syncEngine().journal()->setSelectiveSyncList(SyncJournalDb::SelectiveSyncBlackList,
+ QStringList() << "A/" << "B/" << "C/" << "S/");
+
+ QVERIFY(fakeFolder.syncOnce());
+ QCOMPARE(fakeFolder.currentLocalState(), FileInfo{}); // all files should be one localy
+ QCOMPARE(fakeFolder.currentRemoteState(), FileInfo::A12_B12_C12_S12()); // Server not changed
+ QCOMPARE(aboutToRemoveAllFilesCalled, 0); // But we did not show the popup
+ }
+
+
};
QTEST_GUILESS_MAIN(TestAllFilesDeleted)