fix many errors when querying/setting pin state of virtual files

Signed-off-by: Matthieu Gallien <matthieu.gallien@nextcloud.com>
This commit is contained in:
Matthieu Gallien 2022-11-22 15:44:43 +01:00
parent a00ec1aaa5
commit 361db77d3c
3 changed files with 14 additions and 11 deletions

View file

@ -1871,7 +1871,7 @@ bool ProcessDirectoryJob::isVfsWithSuffix() const
void ProcessDirectoryJob::computePinState(PinState parentState)
{
_pinState = parentState;
if (_queryLocal != ParentDontExist) {
if (_queryLocal != ParentDontExist && QFileInfo::exists(_discoveryData->_localDir + _currentFolder._local)) {
if (auto state = _discoveryData->_syncOptions._vfs->pinState(_currentFolder._local)) // ouch! pin local or original?
_pinState = *state;
}

View file

@ -251,7 +251,7 @@ void PropagateRemoteMove::finalize()
return;
}
auto &vfs = propagator()->syncOptions()._vfs;
auto pinState = vfs->pinState(_item->_originalFile);
auto pinState = vfs->pinState(_item->_renameTarget);
const auto targetFile = propagator()->fullLocalPath(_item->_renameTarget);

View file

@ -222,11 +222,19 @@ void PropagateLocalRename::start()
if (propagator()->_abortRequested)
return;
auto &vfs = propagator()->syncOptions()._vfs;
const auto previousNameInDb = propagator()->adjustRenamedPath(_item->_file);
const auto existingFile = propagator()->fullLocalPath(propagator()->adjustRenamedPath(_item->_file));
const auto targetFile = propagator()->fullLocalPath(_item->_renameTarget);
const auto fileAlreadyMoved = !QFileInfo::exists(propagator()->fullLocalPath(_item->_originalFile));
auto pinState = OCC::PinState::Unspecified;
if (!fileAlreadyMoved) {
auto pinStateResult = vfs->pinState(propagator()->adjustRenamedPath(_item->_file));
if (pinStateResult) {
pinState = pinStateResult.get();
}
}
// if the file is a file underneath a moved dir, the _item->file is equal
// to _item->renameTarget and the file is not moved as a result.
@ -269,10 +277,10 @@ void PropagateLocalRename::start()
return;
}
auto &vfs = propagator()->syncOptions()._vfs;
auto pinState = vfs->pinState(_item->_renameTarget);
if (!vfs->setPinState(_item->_renameTarget, PinState::Inherited)) {
qCWarning(lcPropagateLocalRename) << "Could not set pin state of" << _item->_renameTarget << "to inherited";
if (pinState != OCC::PinState::Unspecified && !vfs->setPinState(_item->_renameTarget, pinState)) {
qCWarning(lcPropagateLocalRename) << "Could not set pin state of" << _item->_renameTarget << "to old value" << pinState;
done(SyncFileItem::NormalError, tr("Error setting pin state"));
return;
}
const auto oldFile = _item->_file;
@ -331,11 +339,6 @@ void PropagateLocalRename::start()
return;
}
}
if (pinState && *pinState != PinState::Inherited
&& !vfs->setPinState(_item->_renameTarget, *pinState)) {
done(SyncFileItem::NormalError, tr("Error setting pin state"));
return;
}
propagator()->_journal->commit("localRename");