}
}
- if (item->_status == SyncFileItem::FileNameInvalid && !item->isDirectory()) {
+ if (item->_status == SyncFileItem::FileNameInvalid) {
_dirItem->_isAnyInvalidCharChild = true;
+ } else if (item->_status == SyncFileItem::FileNameClash) {
+ _dirItem->_isAnyCaseClashChild = true;
}
-
_childIgnored = true;
emit _discoveryData->itemDiscovered(item);
return true;
auto *subJob = dynamic_cast<PropagatorJob *>(sender());
ASSERT(subJob);
- if (!_isAnyChildInConflict) {
+ if (!_isAnyInvalidCharChild || !_isAnyCaseClashChild) {
+ SyncFileItemPtr childDirItem;
if (const auto propagateDirectoryjob = qobject_cast<PropagateDirectory *>(subJob)) {
- _isAnyChildInConflict = propagateDirectoryjob->_item && propagateDirectoryjob->_item->_status == SyncFileItem::FileNameClash;
+ childDirItem = propagateDirectoryjob->_item;
} else if (const auto propagateIgnoreJob = qobject_cast<PropagateIgnoreJob *>(subJob)) {
- _isAnyChildInConflict =
- propagateIgnoreJob->_item && propagateIgnoreJob->_item->_status == SyncFileItem::FileNameInvalid;
+ childDirItem = propagateIgnoreJob->_item;
+ }
+ if (childDirItem) {
+ _isAnyCaseClashChild = _isAnyCaseClashChild || childDirItem->_status == SyncFileItem::FileNameClash || childDirItem->_isAnyCaseClashChild;
+ _isAnyInvalidCharChild = _isAnyInvalidCharChild || childDirItem->_status == SyncFileItem::FileNameInvalid || childDirItem->_isAnyInvalidCharChild;
}
}
void PropagateDirectory::slotSubJobsFinished(SyncFileItem::Status status)
{
if (!_item->isEmpty() && status == SyncFileItem::Success) {
+ _item->_isAnyCaseClashChild = _item->_isAnyCaseClashChild || _subJobs._isAnyCaseClashChild;
+ _item->_isAnyInvalidCharChild = _item->_isAnyInvalidCharChild || _subJobs._isAnyInvalidCharChild;
// If a directory is renamed, recursively delete any stale items
// that may still exist below the old path.
if (_item->_instruction == CSYNC_INSTRUCTION_RENAME && _item->_originalFile != _item->_renameTarget) {
}
}
#endif
- if (!_subJobs._isAnyChildInConflict) {
+ if (!_item->_isAnyCaseClashChild && !_item->_isAnyInvalidCharChild) {
const auto result = propagator()->updateMetadata(*_item);
if (!result) {
status = _item->_status = SyncFileItem::FatalError;
QVector<PropagatorJob *> _runningJobs;
SyncFileItem::Status _hasError = SyncFileItem::NoStatus; // NoStatus, or NormalError / SoftError if there was an error
quint64 _abortsCount = 0;
- bool _isAnyChildInConflict = false;
+ bool _isAnyCaseClashChild = false;
+ bool _isAnyInvalidCharChild = false;
explicit PropagatorCompositeJob(OwncloudPropagator *propagator)
: PropagatorJob(propagator)
}
if (Utility::fsCasePreserving() && propagator()->localFileNameClash(_item->_file)) {
- _item->_isCaseClashFolder = true;
qCWarning(lcPropagateLocalMkdir) << "New folder to create locally already exists with different case:" << _item->_file;
done(SyncFileItem::FileNameClash, tr("Folder %1 cannot be created because of a local file or folder name clash!").arg(newDirStr), ErrorCategory::GenericError);
return;
bool _isEncryptedMetadataNeedUpdate = false;
- bool _isCaseClashFolder = false;
-
bool _isAnyInvalidCharChild = false;
+ bool _isAnyCaseClashChild = false;
};
inline bool operator<(const SyncFileItemPtr &item1, const SyncFileItemPtr &item2)