Don't try to lock folders when editing locally
authorClaudio Cambra <claudio.cambra@nextcloud.com>
Mon, 9 Jan 2023 16:11:33 +0000 (17:11 +0100)
committerClaudio Cambra <claudio.cambra@gmail.com>
Mon, 23 Jan 2023 16:46:43 +0000 (17:46 +0100)
Signed-off-by: Claudio Cambra <claudio.cambra@nextcloud.com>
src/gui/editlocallyjob.cpp
src/gui/editlocallyjob.h

index fc18fddd4e18dfd3255a5a90fa5926eb47326be6..7764e0b053f3596a7325a4340a37b2b6d36b70d1 100644 (file)
@@ -253,7 +253,7 @@ void EditLocallyJob::startSyncBeforeOpening()
 {
     eraseBlacklistRecordForItem();
     if (!checkIfFileParentSyncIsNeeded()) {
-        lockFile();
+        processLocalItem();
         return;
     }
 
@@ -467,7 +467,7 @@ void EditLocallyJob::slotItemCompleted(const OCC::SyncFileItemPtr &item)
     if (item->_file == _relativePathToRemoteRoot) {
         disconnect(&_folderForFile->syncEngine(), &SyncEngine::itemCompleted, this, &EditLocallyJob::slotItemCompleted);
         disconnect(&_folderForFile->syncEngine(), &SyncEngine::itemDiscovered, this, &EditLocallyJob::slotItemDiscovered);
-        lockFile();
+        processLocalItem();
     }
 }
 
@@ -557,6 +557,21 @@ void EditLocallyJob::openFile()
     });
 }
 
+void EditLocallyJob::processLocalItem()
+{
+    Q_ASSERT(_folderForFile);
+
+    SyncJournalFileRecord rec;
+    const auto ok = _folderForFile->journalDb()->getFileRecord(_relativePathToRemoteRoot, &rec);
+    Q_ASSERT(ok);
+
+    if (rec.isDirectory()) { // Directories not lock-able
+        openFile();
+    } else {
+        lockFile();
+    }
+}
+
 void EditLocallyJob::lockFile()
 {
     Q_ASSERT(_accountState);
index 64564924602b9bfa40adc0d2062a6507060f65ff..582d5049fdff8ed266d8ff87f189e5ad07e5e56f 100644 (file)
@@ -71,6 +71,7 @@ private slots:
     void slotLsColJobFinishedWithError(QNetworkReply *reply);
     void slotDirectoryListingIterated(const QString &name, const QMap<QString, QString> &properties);
 
+    void processLocalItem();
     void openFile();
     void lockFile();