Improve Open Project error handling (#1740)

This commit is contained in:
Veronica Berglyd Olsen
2024-03-09 12:50:48 +01:00
committed by GitHub
3 changed files with 17 additions and 8 deletions
+8 -4
View File
@@ -183,11 +183,15 @@ class NWStorage:
# 2. A full path to an nwProject.nwx file
if inPath.is_dir() and inPath != Path.home().resolve():
nwxFile = inPath / nwFiles.PROJ_FILE
elif inPath.is_file() and inPath.name == nwFiles.PROJ_FILE:
nwxFile = inPath
elif inPath.is_file():
if inPath.name == nwFiles.PROJ_FILE:
nwxFile = inPath
else:
logger.error("Not a novelWriter project")
return NWStorageOpen.UNKOWN
else:
logger.error("Not a novelWriter project")
return NWStorageOpen.UNKOWN
logger.error("Not found: %s", inPath)
return NWStorageOpen.NOT_FOUND
if not nwxFile.exists():
# The .nwx file must exist to continue
+5 -3
View File
@@ -796,7 +796,7 @@ class GuiMain(QMainWindow):
def showWelcomeDialog(self) -> None:
"""Open the welcome dialog."""
dialog = GuiWelcome(self)
dialog.openProjectRequest.connect(self._openProject)
dialog.openProjectRequest.connect(self._openProjectFromWelcome)
dialog.exec_()
return
@@ -1132,10 +1132,12 @@ class GuiMain(QMainWindow):
return
@pyqtSlot(Path)
def _openProject(self, path: Path) -> None:
"""Handle an open project request."""
def _openProjectFromWelcome(self, path: Path) -> None:
"""Handle an open project request from the welcome dialog."""
qApp.processEvents()
self.openProject(path)
if not SHARED.hasProject:
self.showWelcomeDialog()
return
@pyqtSlot(str, nwDocMode, str, bool)
+4 -1
View File
@@ -111,12 +111,15 @@ def testCoreStorage_InitProjectStorage(mockGUI, fncPath, mockRnd):
buildTestProject(project, fncPath)
# Init with the wrong file
foo = fncPath / "foobar.txt"
foo.touch()
assert storage.initProjectStorage(fncPath / "foobar.txt") == NWStorageOpen.UNKOWN
foo.unlink()
storage._clearLockFile()
storage.clear()
# Init with the user's home dir
assert storage.initProjectStorage(Path.home()) == NWStorageOpen.UNKOWN
assert storage.initProjectStorage(Path.home()) == NWStorageOpen.NOT_FOUND
storage._clearLockFile()
storage.clear()