From 84fd93db93796fadc4d9848f4c2e95a77b4c72ca Mon Sep 17 00:00:00 2001 From: Matthieu Gallien Date: Tue, 30 Apr 2024 13:31:54 +0200 Subject: [PATCH] ensure proper VFS metadata when restoring folders when remote move is forbidden, desktop client will move back the folder to its original name in such cases, we were forgetting to set VFS metadata in their proper state (i.e. placeholder in sync) so ensure that when a remote move fails, we still touch VFS metadata when appropriate and handle errors Signed-off-by: Matthieu Gallien --- src/libsync/propagateremotemove.cpp | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/src/libsync/propagateremotemove.cpp b/src/libsync/propagateremotemove.cpp index 401a8f27b..6d2c0a229 100644 --- a/src/libsync/propagateremotemove.cpp +++ b/src/libsync/propagateremotemove.cpp @@ -217,7 +217,19 @@ void PropagateRemoteMove::slotMoveJobFinished() qCWarning(lcPropagateRemoteMove) << "Could not MOVE file" << filePathOriginal << " to" << filePath << " with error:" << _job->errorString() << " and successfully restored it."; + + auto restoredItem = *_item; + restoredItem._renameTarget = _item->_originalFile; + const auto result = propagator()->updateMetadata(restoredItem); + if (!result) { + 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(restoredItem._file), ErrorCategory::GenericError); + return; + } } + done(status, _job->errorString(), ErrorCategory::GenericError); return; } -- 2.30.2