diff --git a/src/libsync/discovery.cpp b/src/libsync/discovery.cpp index e842f82540808..ec4beb1234b61 100644 --- a/src/libsync/discovery.cpp +++ b/src/libsync/discovery.cpp @@ -1672,7 +1672,8 @@ void ProcessDirectoryJob::processFileFinalize( if (_discoveryData->_syncOptions._vfs && (item->_type == CSyncEnums::ItemTypeFile || item->_type == CSyncEnums::ItemTypeDirectory) && item->_instruction == CSyncEnums::CSYNC_INSTRUCTION_NONE && - FileSystem::isLnkFile((_discoveryData->_localDir + path._local))) { + FileSystem::isLnkFile((_discoveryData->_localDir + path._local)) && + !_discoveryData->_syncOptions._vfs->isPlaceHolderInSync(_discoveryData->_localDir + path._local)) { item->_instruction = CSyncEnums::CSYNC_INSTRUCTION_SYNC; item->_direction = SyncFileItem::Down; item->_type = CSyncEnums::ItemTypeVirtualFileDehydration; @@ -2204,20 +2205,24 @@ void ProcessDirectoryJob::setupDbPinStateActions(SyncJournalFileRecord &record) { // Only suffix-vfs uses the db for pin states. // Other plugins will set localEntry._type according to the file's pin state. - if (!isVfsWithSuffix()) + if (!isVfsWithSuffix()) { return; + } auto pin = _discoveryData->_statedb->internalPinStates().rawForPath(record._path); - if (!pin || *pin == PinState::Inherited) + if (!pin || *pin == PinState::Inherited) { pin = _pinState; + } // OnlineOnly hydrated files want to be dehydrated - if (record._type == ItemTypeFile && *pin == PinState::OnlineOnly) + if (record._type == ItemTypeFile && *pin == PinState::OnlineOnly) { record._type = ItemTypeVirtualFileDehydration; + } // AlwaysLocal dehydrated files want to be hydrated - if (record._type == ItemTypeVirtualFile && *pin == PinState::AlwaysLocal) + if (record._type == ItemTypeVirtualFile && *pin == PinState::AlwaysLocal) { record._type = ItemTypeVirtualFileDownload; + } } } diff --git a/src/libsync/propagatorjobs.cpp b/src/libsync/propagatorjobs.cpp index 6d7a36c9404b6..408d85623eaf6 100644 --- a/src/libsync/propagatorjobs.cpp +++ b/src/libsync/propagatorjobs.cpp @@ -118,7 +118,7 @@ void PropagateLocalRemove::start() QString removeError; const auto availability = propagator()->syncOptions()._vfs->availability(_item->_file, Vfs::AvailabilityRecursivity::RecursiveAvailability); - if (_moveToTrash && (!availability || (*availability != VfsItemAvailability::AllDehydrated && *availability != VfsItemAvailability::OnlineOnly && *availability != VfsItemAvailability::Mixed))) { + if (_moveToTrash && propagator()->syncOptions()._vfs->mode() != OCC::Vfs::WindowsCfApi) { if ((QDir(filename).exists() || FileSystem::fileExists(filename)) && !FileSystem::moveToTrash(filename, &removeError)) { done(SyncFileItem::NormalError, removeError, ErrorCategory::GenericError);