diff --git a/nw/constants/constants.py b/nw/constants/constants.py index cf0ab4eb..92378a73 100644 --- a/nw/constants/constants.py +++ b/nw/constants/constants.py @@ -45,6 +45,7 @@ class nwFiles(): INDEX_FILE = "tagsIndex.json" OPTS_FILE = "guiOptions.json" RECENT_FILE = "recentProjects.json" + BUILD_CACHE = "prevBuild.json" # END Class nwFiles diff --git a/nw/gui/build.py b/nw/gui/build.py index d30ef7de..6c424ddb 100644 --- a/nw/gui/build.py +++ b/nw/gui/build.py @@ -26,6 +26,7 @@ """ import logging +import json import nw from os import path @@ -45,7 +46,7 @@ from PyQt5.QtWidgets import ( from nw.gui.additions import QSwitch from nw.core import ToHtml from nw.constants import ( - nwAlert, nwItemType, nwItemLayout, nwItemClass + nwAlert, nwFiles, nwItemType, nwItemLayout, nwItemClass ) logger = logging.getLogger(__name__) @@ -372,6 +373,15 @@ class GuiBuildNovel(QDialog): logger.debug("GuiBuildNovel initialisation complete") + # Load from Cache + if self._loadCache(): + self.docView.setStyleSheet(self.htmlStyle) + self.docView.setContent(self.htmlText) + else: + self.htmlText = [] + self.htmlStyle = [] + self.nwdText = [] + return ## @@ -459,6 +469,8 @@ class GuiBuildNovel(QDialog): self.docView.setStyleSheet(self.htmlStyle) self.docView.setContent(self.htmlText) + self._saveCache() + return def _checkInclude(self, theItem, noteFiles, novelFiles, ignoreFlag): @@ -683,6 +695,60 @@ class GuiBuildNovel(QDialog): self.textSize.setValue(theFont.pointSize()) return + def _loadCache(self): + """Save the current data to cache. + """ + buildCache = path.join(self.theProject.projCache, nwFiles.BUILD_CACHE) + dataCount = 0 + if path.isfile(buildCache): + + logger.debug("Loading build cache") + try: + with open(buildCache, mode="r", encoding="utf8") as inFile: + theJson = inFile.read() + theData = json.loads(theJson) + except Exception as e: + logger.error("Failed to load build cache") + logger.error(str(e)) + return False + + if "htmlText" in theData.keys(): + self.htmlText = theData["htmlText"] + dataCount += 1 + if "htmlStyle" in theData.keys(): + self.htmlStyle = theData["htmlStyle"] + dataCount += 1 + if "nwdText" in theData.keys(): + self.nwdText = theData["nwdText"] + dataCount += 1 + + return dataCount == 3 + + def _saveCache(self): + """Save the current data to cache. + """ + buildCache = path.join(self.theProject.projCache, nwFiles.BUILD_CACHE) + + if self.mainConf.debugInfo: + nIndent = 2 + else: + nIndent = None + + logger.debug("Saving build cache") + try: + with open(buildCache, mode="w+", encoding="utf8") as outFile: + outFile.write(json.dumps({ + "htmlText" : self.htmlText, + "htmlStyle" : self.htmlStyle, + "nwdText" : self.nwdText, + }, indent=nIndent)) + except Exception as e: + logger.error("Failed to save build cache") + logger.error(str(e)) + return False + + return True + def _doClose(self): """Close button was clicked. """ @@ -762,6 +828,11 @@ class GuiBuildNovelDocView(QTextBrowser): self.qDocument = self.document() self.qDocument.setDocumentMargin(self.mainConf.textMargin) + self.setPlaceholderText( + "This area will show the content of the document to be " + "exported or printed. Press the \"Build Novel Project\" " + "button to generate content." + ) theFont = QFont() if self.mainConf.textFont is None: