From a7c163968aba615fb19d1109cfc1c73e10a5ebd0 Mon Sep 17 00:00:00 2001 From: Matthieu Gallien Date: Fri, 18 Aug 2023 16:24:30 +0200 Subject: [PATCH] update read-only status of virtual files when needed for lock state Signed-off-by: Matthieu Gallien --- src/libsync/syncengine.cpp | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/src/libsync/syncengine.cpp b/src/libsync/syncengine.cpp index 656689a55..47d88fa68 100644 --- a/src/libsync/syncengine.cpp +++ b/src/libsync/syncengine.cpp @@ -389,6 +389,18 @@ void OCC::SyncEngine::slotItemDiscovered(const OCC::SyncFileItemPtr &item) modificationHappened = true; } + if (item->_type == CSyncEnums::ItemTypeVirtualFile) { + if (item->_locked == SyncFileItem::LockStatus::LockedItem && (item->_lockOwnerType != SyncFileItem::LockOwnerType::UserLock || item->_lockOwnerId != account()->davUser())) { + qCDebug(lcEngine()) << filePath << "file is locked: making it read only"; + FileSystem::setFileReadOnly(filePath, true); + } else { + qCDebug(lcEngine()) << filePath << "file is not locked: making it" + << ((!item->_remotePerm.isNull() && !item->_remotePerm.hasPermission(RemotePermissions::CanWrite)) ? "read only" + : "read write"); + FileSystem::setFileReadOnlyWeak(filePath, (!item->_remotePerm.isNull() && !item->_remotePerm.hasPermission(RemotePermissions::CanWrite))); + } + } + // Update on-disk virtual file metadata if (modificationHappened && item->_type == ItemTypeVirtualFile) { auto r = _syncOptions._vfs->updateMetadata(filePath, item->_modtime, item->_size, item->_fileId); -- 2.30.2