From c7591f63320258ecbac72d10b2b79efe5694214c Mon Sep 17 00:00:00 2001 From: alex-z Date: Mon, 29 Apr 2024 21:57:02 +0200 Subject: [PATCH 1/2] Bugfix. Files lock. Check lock owner type for setting readonly based on server capabilities (NC27/28 compatibility issue). Signed-off-by: alex-z --- src/libsync/syncengine.cpp | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/libsync/syncengine.cpp b/src/libsync/syncengine.cpp index 4a9f656a4712..8f8dcecec31c 100644 --- a/src/libsync/syncengine.cpp +++ b/src/libsync/syncengine.cpp @@ -390,7 +390,11 @@ void OCC::SyncEngine::slotItemDiscovered(const OCC::SyncFileItemPtr &item) } if (item->_type == CSyncEnums::ItemTypeVirtualFile) { - if (item->_locked == SyncFileItem::LockStatus::LockedItem && (item->_lockOwnerType != SyncFileItem::LockOwnerType::TokenLock || item->_lockOwnerId != account()->davUser())) { + const auto lockOwnerTypeToSkipReadonly = _account->capabilities().filesLockTypeAvailable() + ? SyncFileItem::LockOwnerType::TokenLock + : SyncFileItem::LockOwnerType::UserLock; + if (item->_locked == SyncFileItem::LockStatus::LockedItem + && (item->_lockOwnerType != lockOwnerTypeToSkipReadonly || item->_lockOwnerId != account()->davUser())) { qCDebug(lcEngine()) << filePath << "file is locked: making it read only"; FileSystem::setFileReadOnly(filePath, true); } else { From 04c0125bd10c3961af11f233f32b0408f0c21401 Mon Sep 17 00:00:00 2001 From: alex-z Date: Wed, 8 May 2024 00:45:08 +0200 Subject: [PATCH 2/2] Fix incorrect date parsing. Signed-off-by: alex-z --- src/libsync/syncfileitem.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/libsync/syncfileitem.cpp b/src/libsync/syncfileitem.cpp index 6bf10cd7af1b..a7fd1c7d53e9 100644 --- a/src/libsync/syncfileitem.cpp +++ b/src/libsync/syncfileitem.cpp @@ -219,8 +219,8 @@ SyncFileItemPtr SyncFileItem::fromProperties(const QString &filePath, const QMap const auto intConvertedValue = properties.value(QStringLiteral("lock-timeout")).toULongLong(&ok); item->_lockTimeout = ok ? intConvertedValue : 0; } - - const auto date = QDateTime::fromString(properties.value(QStringLiteral("getlastmodified")), Qt::RFC2822Date); + const auto lastModifiedValue = properties.value(QStringLiteral("getlastmodified")).replace("GMT", "+0000"); + const auto date = QDateTime::fromString(lastModifiedValue, Qt::RFC2822Date); Q_ASSERT(date.isValid()); if (date.toSecsSinceEpoch() > 0) { item->_modtime = date.toSecsSinceEpoch();