mirror of
https://github.com/nextcloud/desktop.git
synced 2024-11-21 20:45:51 +03:00
on receiving reply of a remote MOVE: always record it
even if local item has disappeared, record the result of a remote MOVE when receiving the reply enable better state tracking when syncing rename or move operations Signed-off-by: Matthieu Gallien <matthieu.gallien@nextcloud.com>
This commit is contained in:
parent
471ed2f4e9
commit
0eb5ddd442
2 changed files with 5 additions and 10 deletions
|
@ -1714,7 +1714,7 @@ void ProcessDirectoryJob::processFileFinalize(
|
|||
item->_instruction = CSyncEnums::CSYNC_INSTRUCTION_UPDATE_VFS_METADATA;
|
||||
}
|
||||
|
||||
if (path._original != path._target && (item->_instruction == CSYNC_INSTRUCTION_UPDATE_METADATA || item->_instruction == CSYNC_INSTRUCTION_NONE)) {
|
||||
if (path._original != path._target && (item->_instruction == CSYNC_INSTRUCTION_UPDATE_VFS_METADATA || item->_instruction == CSYNC_INSTRUCTION_UPDATE_METADATA || item->_instruction == CSYNC_INSTRUCTION_NONE)) {
|
||||
ASSERT(_dirItem && _dirItem->_instruction == CSYNC_INSTRUCTION_RENAME);
|
||||
// This is because otherwise subitems are not updated! (ideally renaming a directory could
|
||||
// update the database for all items! See PropagateDirectory::slotSubJobsFinished)
|
||||
|
|
|
@ -290,22 +290,17 @@ void PropagateRemoteMove::finalize()
|
|||
}
|
||||
}
|
||||
|
||||
if (!FileSystem::fileExists(targetFile)) {
|
||||
propagator()->_journal->commit("Remote Rename");
|
||||
done(SyncFileItem::Success, {}, ErrorCategory::NoError);
|
||||
return;
|
||||
}
|
||||
|
||||
const auto result = propagator()->updateMetadata(newItem);
|
||||
if (!result) {
|
||||
if (!result && QFileInfo::exists(targetFile)) {
|
||||
done(SyncFileItem::FatalError, tr("Error updating metadata: %1").arg(result.error()), ErrorCategory::GenericError);
|
||||
return;
|
||||
} else if (*result == Vfs::ConvertToPlaceholderResult::Locked) {
|
||||
done(SyncFileItem::SoftError, tr("The file %1 is currently in use").arg(newItem._file), ErrorCategory::GenericError);
|
||||
return;
|
||||
}
|
||||
if (pinState && *pinState != PinState::Inherited
|
||||
&& !vfs->setPinState(newItem._renameTarget, *pinState)) {
|
||||
if (pinState && *pinState != PinState::Inherited &&
|
||||
!vfs->setPinState(newItem._renameTarget, *pinState) &&
|
||||
QFileInfo::exists(targetFile)) {
|
||||
done(SyncFileItem::NormalError, tr("Error setting pin state"), ErrorCategory::GenericError);
|
||||
return;
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue