diff --git a/novelwriter/core/project.py b/novelwriter/core/project.py index f018cfd7..69aaadcf 100644 --- a/novelwriter/core/project.py +++ b/novelwriter/core/project.py @@ -356,6 +356,7 @@ class NWProject: self.setProjectChanged(False) self._valid = True self._state = NWProjectState.READY + self._storage.lockSession() # Lock only after a successful open. See issue #1977. SHARED.newStatusMessage(self.tr("Opened Project: {0}").format(self._data.name)) diff --git a/novelwriter/core/storage.py b/novelwriter/core/storage.py index 258c379c..73a3bcb5 100644 --- a/novelwriter/core/storage.py +++ b/novelwriter/core/storage.py @@ -235,7 +235,6 @@ class NWStorage: if child.is_dir() and child.name.startswith("data_"): legacy.legacyDataFolder(basePath, child) - self._writeLockFile() self._ready = True return NWStorageOpen.READY @@ -249,6 +248,12 @@ class NWStorage: return True return True + def lockSession(self) -> None: + """Lock the session when the project is successfully opened.""" + if self._ready: + self._writeLockFile() + return + def closeSession(self) -> None: """Run tasks related to closing the session.""" self._clearLockFile() diff --git a/tests/test_core/test_core_storage.py b/tests/test_core/test_core_storage.py index ee6e50a0..76be9679 100644 --- a/tests/test_core/test_core_storage.py +++ b/tests/test_core/test_core_storage.py @@ -142,7 +142,9 @@ def testCoreStorage_InitProjectStorage(monkeypatch, mockGUI, fncPath, mockRnd): storage.clear() # Open twice, where second should fail due to lockfile + # Note that locking is only possible after a successful open assert storage.initProjectStorage(fncPath) == NWStorageOpen.READY + storage.lockSession() assert storage.initProjectStorage(fncPath) == NWStorageOpen.LOCKED assert isinstance(storage.lockStatus, list) assert len(storage.lockStatus) == 4