Make sure the document isn't overwritten if it exists, but we have an error loading it due to encoding, or otherwise

This commit is contained in:
Veronica K. B. Olsen
2019-10-28 14:12:26 +01:00
parent f760eeb544
commit 4fcff94b05
3 changed files with 25 additions and 6 deletions
+13 -1
View File
@@ -162,9 +162,21 @@ class GuiDocEditor(QTextEdit):
return True
def loadText(self, tHandle):
"""Load text from a document into the editor. If we have an io error, we must handle this
and clear the editor so that we don't risk overwriting the file if it exists. This can for
instance happen of the file contains binary elements or an encoding that novelWriter does
not support. If load is successful, ot the document is new (empty string) we set up the
editor for editing the file.
"""
theDoc = self.nwDocument.openDocument(tHandle)
if theDoc is None:
# There was an io error
self.clearEditor()
return False
self.hLight.setHandle(tHandle)
self.setPlainText(self.nwDocument.openDocument(tHandle))
self.setPlainText(theDoc)
self.setCursorPosition(self.nwDocument.theItem.cursorPos)
self.lastEdit = time()
self._runCounter()
+6 -4
View File
@@ -332,10 +332,12 @@ class GuiMain(QMainWindow):
def openDocument(self, tHandle):
if self.hasProject:
self.closeDocument()
self.docEditor.loadText(tHandle)
self.docEditor.setFocus()
self.docEditor.changeWidth()
self.theProject.setLastEdited(tHandle)
if self.docEditor.loadText(tHandle):
self.docEditor.setFocus()
self.docEditor.changeWidth()
self.theProject.setLastEdited(tHandle)
else:
return False
return True
def saveDocument(self):
+6 -1
View File
@@ -57,8 +57,13 @@ class NWDoc():
theDoc = inFile.read()
except Exception as e:
self.makeAlert(["Failed to open document file.",str(e)], nwAlert.ERROR)
return ""
# Note: Document must be cleared in case of an io error, or else the auto-save or
# save will try to overwrite it with an empty file. Return None to alert the caller.
self.clearDocument()
return None
else:
# The document file does not exist, so we assume it's a new document and initialise an
# empty text string.
logger.debug("The requested document does not exist.")
return ""