Let the shared class handle project open/save/close and recreating the project instance

This commit is contained in:
Veronica Berglyd Olsen
2023-08-13 20:16:37 +02:00
parent 8154293d92
commit 150f6603cd
10 changed files with 79 additions and 86 deletions
+33 -4
View File
@@ -42,6 +42,7 @@ class SharedData:
self._gui = None
self._theme = None
self._project = None
self._lockedBy = None
return
@property
@@ -69,6 +70,10 @@ class SharedData:
def hasProject(self) -> bool:
return self.project.isValid
@property
def projectLock(self) -> list | None:
return self._lockedBy
##
# Methods
##
@@ -84,16 +89,38 @@ class SharedData:
logger.debug("SharedData instance initialised")
return
def openProject(self, path: str | Path) -> None:
return
def openProject(self, path: str | Path) -> bool:
"""Open a project."""
if self.project.isValid:
logger.error("A project is already open")
return False
def saveProject(self):
return
self._lockedBy = None
status = self.project.openProject(path)
if status is False:
# We must cache the lock status before resetting the project
self._lockedBy = self.project.lockStatus
self._resetProject()
return status
def saveProject(self, autoSave: bool = False) -> bool:
"""Save the current project."""
if not self.project.isValid:
logger.error("There is no project open")
return False
return self.project.saveProject(autoSave=autoSave)
def closeProject(self, idleTime: float) -> None:
"""Close the current project."""
self.project.closeProject(idleTime)
self._resetProject()
return
def unlockProject(self) -> bool:
"""Remove the project lock."""
return self.project.storage.clearLockFile()
##
# Internal Functions
##
@@ -101,6 +128,8 @@ class SharedData:
def _resetProject(self) -> None:
"""Create a new project instance."""
from novelwriter.core.project import NWProject
if isinstance(self._project, NWProject):
self._project.deleteLater()
self._project = NWProject(self.mainGui)
return