diff --git a/src/libsync/propagatedownload.cpp b/src/libsync/propagatedownload.cpp index 2edd3c4c5ba82..08ab484891501 100644 --- a/src/libsync/propagatedownload.cpp +++ b/src/libsync/propagatedownload.cpp @@ -1198,8 +1198,15 @@ void PropagateDownloadFile::downloadFinished() } } - // Apply the remote permissions - FileSystem::setFileReadOnlyWeak(_tmpFile.fileName(), !_item->_remotePerm.isNull() && !_item->_remotePerm.hasPermission(RemotePermissions::CanWrite)); + if (_item->_locked == SyncFileItem::LockStatus::LockedItem && (_item->_lockOwnerType != SyncFileItem::LockOwnerType::UserLock || _item->_lockOwnerId != propagator()->account()->davUser())) { + qCDebug(lcPropagateDownload()) << _tmpFile << "file is locked: making it read only"; + FileSystem::setFileReadOnly(_tmpFile.fileName(), true); + } else { + qCDebug(lcPropagateDownload()) << _tmpFile << "file is not locked: making it" + << ((!_item->_remotePerm.isNull() && !_item->_remotePerm.hasPermission(RemotePermissions::CanWrite)) ? "read only" + : "read write"); + FileSystem::setFileReadOnlyWeak(_tmpFile.fileName(), (!_item->_remotePerm.isNull() && !_item->_remotePerm.hasPermission(RemotePermissions::CanWrite))); + } const auto isConflict = (_item->_instruction == CSYNC_INSTRUCTION_CONFLICT && (QFileInfo(filename).isDir() || !FileSystem::fileEquals(filename, _tmpFile.fileName()))) || @@ -1262,12 +1269,6 @@ void PropagateDownloadFile::downloadFinished() return; } - qCInfo(lcPropagateDownload()) << propagator()->account()->davUser() << propagator()->account()->davDisplayName() << propagator()->account()->displayName(); - if (_item->_locked == SyncFileItem::LockStatus::LockedItem && (_item->_lockOwnerType != SyncFileItem::LockOwnerType::UserLock || _item->_lockOwnerId != propagator()->account()->davUser())) { - qCInfo(lcPropagateDownload()) << "file is locked: making it read only"; - FileSystem::setFileReadOnly(filename, true); - } - FileSystem::setFileHidden(filename, false); // Maybe we downloaded a newer version of the file than we thought we would... @@ -1346,6 +1347,14 @@ void PropagateDownloadFile::updateMetadata(bool isConflict) handleRecallFile(fn, propagator()->localPath(), *propagator()->_journal); } + if (_item->_locked == SyncFileItem::LockStatus::LockedItem && (_item->_lockOwnerType != SyncFileItem::LockOwnerType::UserLock || _item->_lockOwnerId != propagator()->account()->davUser())) { + qCDebug(lcPropagateDownload()) << fn << "file is locked: making it read only"; + FileSystem::setFileReadOnly(fn, true); + } else { + qCDebug(lcPropagateDownload()) << fn << "file is not locked: making it" << ((!_item->_remotePerm.isNull() && !_item->_remotePerm.hasPermission(RemotePermissions::CanWrite)) ? "read only" : "read write"); + FileSystem::setFileReadOnlyWeak(fn, (!_item->_remotePerm.isNull() && !_item->_remotePerm.hasPermission(RemotePermissions::CanWrite))); + } + qint64 duration = _stopwatch.elapsed(); if (isLikelyFinishedQuickly() && duration > 5 * 1000) { qCWarning(lcPropagateDownload) << "WARNING: Unexpectedly slow connection, took" << duration << "msec for" << _item->_size - _resumeStart << "bytes for" << _item->_file; diff --git a/test/testpermissions.cpp b/test/testpermissions.cpp index 0aba5f501c42e..6aecc3a5cc9c3 100644 --- a/test/testpermissions.cpp +++ b/test/testpermissions.cpp @@ -67,6 +67,10 @@ class TestPermissions : public QObject Q_OBJECT private slots: + void initTestCase() + { + OCC::Logger::instance()->setLogDebug(true); + } void t7pl() { diff --git a/test/testsyncengine.cpp b/test/testsyncengine.cpp index 746ccde3dc322..ec5aebeb24892 100644 --- a/test/testsyncengine.cpp +++ b/test/testsyncengine.cpp @@ -85,6 +85,11 @@ class TestSyncEngine : public QObject Q_OBJECT private slots: + void initTestCase() + { + OCC::Logger::instance()->setLogDebug(true); + } + void testFileDownload() { FakeFolder fakeFolder{FileInfo::A12_B12_C12_S12()}; ItemCompletedSpy completeSpy(fakeFolder);