From: Matthieu Gallien Date: Tue, 22 Nov 2022 14:44:43 +0000 (+0100) Subject: fix many errors when querying/setting pin state of virtual files X-Git-Tag: archive/raspbian/3.16.7-1_deb13u1+rpi1~1^2~12^2~11^2~124^2 X-Git-Url: https://dgit.raspbian.org/?a=commitdiff_plain;h=361db77d3ccc262e88925842781893fe83dc8e5d;p=nextcloud-desktop.git fix many errors when querying/setting pin state of virtual files Signed-off-by: Matthieu Gallien --- diff --git a/src/libsync/discovery.cpp b/src/libsync/discovery.cpp index 53f2ce22b..368fc84a3 100644 --- a/src/libsync/discovery.cpp +++ b/src/libsync/discovery.cpp @@ -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; } diff --git a/src/libsync/propagateremotemove.cpp b/src/libsync/propagateremotemove.cpp index 882d7e077..d42ba3269 100644 --- a/src/libsync/propagateremotemove.cpp +++ b/src/libsync/propagateremotemove.cpp @@ -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); diff --git a/src/libsync/propagatorjobs.cpp b/src/libsync/propagatorjobs.cpp index 5dc6a2430..ce507b790 100644 --- a/src/libsync/propagatorjobs.cpp +++ b/src/libsync/propagatorjobs.cpp @@ -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");