From ef89256d394fad5037eb1b250e09523bcbfff322 Mon Sep 17 00:00:00 2001 From: allexzander Date: Fri, 30 Apr 2021 18:44:23 +0300 Subject: [PATCH 1/2] VFS. Allow dehydartion of readonly files. Preserve 'readonly' flag when creating a placeholder. Signed-off-by: allexzander --- src/libsync/propagatedownload.cpp | 12 ++++++++++++ src/libsync/vfs/cfapi/vfs_cfapi.cpp | 2 +- 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/src/libsync/propagatedownload.cpp b/src/libsync/propagatedownload.cpp index 9db454db6c..96d48a9360 100644 --- a/src/libsync/propagatedownload.cpp +++ b/src/libsync/propagatedownload.cpp @@ -427,6 +427,12 @@ void PropagateDownloadFile::startAfterIsEncryptedIsChecked() } propagator()->_journal->deleteFileRecord(_item->_originalFile); updateMetadata(false); + + if (!_item->_remotePerm.isNull() && !_item->_remotePerm.hasPermission(RemotePermissions::CanWrite)) { + // make sure ReadOnly flag is preserved for placeholder, similarly to regular files + FileSystem::setFileReadOnlyWeak(propagator()->fullLocalPath(_item->_file), true); + } + return; } if (vfs->mode() == Vfs::Off && _item->_type == ItemTypeVirtualFile) { @@ -446,6 +452,12 @@ void PropagateDownloadFile::startAfterIsEncryptedIsChecked() return; } updateMetadata(false); + + if (!_item->_remotePerm.isNull() && !_item->_remotePerm.hasPermission(RemotePermissions::CanWrite)) { + // make sure ReadOnly flag is preserved for placeholder, similarly to regular files + FileSystem::setFileReadOnlyWeak(propagator()->fullLocalPath(_item->_file), true); + } + return; } diff --git a/src/libsync/vfs/cfapi/vfs_cfapi.cpp b/src/libsync/vfs/cfapi/vfs_cfapi.cpp index dcd75d46d0..667e4c82b9 100644 --- a/src/libsync/vfs/cfapi/vfs_cfapi.cpp +++ b/src/libsync/vfs/cfapi/vfs_cfapi.cpp @@ -129,7 +129,7 @@ Result VfsCfApi::dehydratePlaceholder(const SyncFileItem &item) { const auto previousPin = pinState(item._file); - if (!QFile::remove(_setupParams.filesystemPath + item._file)) { + if (!FileSystem::remove(_setupParams.filesystemPath + item._file)) { return QStringLiteral("Couldn't remove %1 to fulfill dehydration").arg(item._file); } From d754bb710241dbb30ea175403b5b6d0e4778c192 Mon Sep 17 00:00:00 2001 From: allexzander Date: Wed, 5 May 2021 20:41:28 +0300 Subject: [PATCH 2/2] Fix review comments. Signed-off-by: allexzander --- src/libsync/propagatedownload.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/libsync/propagatedownload.cpp b/src/libsync/propagatedownload.cpp index 96d48a9360..b4c50e27a7 100644 --- a/src/libsync/propagatedownload.cpp +++ b/src/libsync/propagatedownload.cpp @@ -430,7 +430,7 @@ void PropagateDownloadFile::startAfterIsEncryptedIsChecked() if (!_item->_remotePerm.isNull() && !_item->_remotePerm.hasPermission(RemotePermissions::CanWrite)) { // make sure ReadOnly flag is preserved for placeholder, similarly to regular files - FileSystem::setFileReadOnlyWeak(propagator()->fullLocalPath(_item->_file), true); + FileSystem::setFileReadOnly(propagator()->fullLocalPath(_item->_file), true); } return; @@ -455,7 +455,7 @@ void PropagateDownloadFile::startAfterIsEncryptedIsChecked() if (!_item->_remotePerm.isNull() && !_item->_remotePerm.hasPermission(RemotePermissions::CanWrite)) { // make sure ReadOnly flag is preserved for placeholder, similarly to regular files - FileSystem::setFileReadOnlyWeak(propagator()->fullLocalPath(_item->_file), true); + FileSystem::setFileReadOnly(propagator()->fullLocalPath(_item->_file), true); } return;