Clean up build tool and extend export tests

This commit is contained in:
Veronica K. B. Olsen
2021-02-06 17:40:39 +01:00
parent b59b3a3a74
commit f4988c5d86
6 changed files with 613 additions and 73 deletions
+45 -67
View File
@@ -35,7 +35,7 @@ from datetime import datetime
from PyQt5.QtCore import Qt, QByteArray, QTimer
from PyQt5.QtPrintSupport import QPrinter, QPrintPreviewDialog
from PyQt5.QtGui import (
QPalette, QColor, QTextDocumentWriter, QFont, QCursor, QFontInfo
QPalette, QColor, QFont, QCursor, QFontInfo
)
from PyQt5.QtWidgets import (
qApp, QDialog, QVBoxLayout, QHBoxLayout, QTextBrowser, QPushButton, QLabel,
@@ -62,9 +62,8 @@ class GuiBuildNovel(QDialog):
FMT_MD = 5
FMT_GH = 6
FMT_NWD = 7
FMT_TXT = 8
FMT_JSON_H = 9
FMT_JSON_M = 10
FMT_JSON_H = 8
FMT_JSON_M = 9
def __init__(self, theParent, theProject):
QDialog.__init__(self, theParent)
@@ -377,11 +376,24 @@ class GuiBuildNovel(QDialog):
self.buttonBox = QHBoxLayout()
self.btnPrint = QPushButton("Print")
self.btnPrint.clicked.connect(self._printDocument)
# Printing
self.printMenu = QMenu(self)
self.btnPrint = QPushButton("Print")
self.btnPrint.setMenu(self.printMenu)
self.printSend = QAction("Send to Printer", self)
self.printSend.triggered.connect(self._printDocument)
self.printMenu.addAction(self.printSend)
self.printFile = QAction("Print to PDF", self)
self.printFile.triggered.connect(lambda: self._saveDocument(self.FMT_PDF))
self.printMenu.addAction(self.printFile)
# Saving to File
self.btnSave = QPushButton("Save As")
self.saveMenu = QMenu(self)
self.btnSave = QPushButton("Save As")
self.btnSave.setMenu(self.saveMenu)
self.saveODT = QAction("Open Document (.odt)", self)
@@ -392,10 +404,6 @@ class GuiBuildNovel(QDialog):
self.saveFODT.triggered.connect(lambda: self._saveDocument(self.FMT_FODT))
self.saveMenu.addAction(self.saveFODT)
self.savePDF = QAction("Portable Document Format (.pdf)", self)
self.savePDF.triggered.connect(lambda: self._saveDocument(self.FMT_PDF))
self.saveMenu.addAction(self.savePDF)
self.saveHTM = QAction("novelWriter HTML (.htm)", self)
self.saveHTM.triggered.connect(lambda: self._saveDocument(self.FMT_HTM))
self.saveMenu.addAction(self.saveHTM)
@@ -412,10 +420,6 @@ class GuiBuildNovel(QDialog):
self.saveGH.triggered.connect(lambda: self._saveDocument(self.FMT_GH))
self.saveMenu.addAction(self.saveGH)
self.saveTXT = QAction("Plain Text (.txt)", self)
self.saveTXT.triggered.connect(lambda: self._saveDocument(self.FMT_TXT))
self.saveMenu.addAction(self.saveTXT)
self.saveJsonH = QAction("JSON + novelWriter HTML (.json)", self)
self.saveJsonH.triggered.connect(lambda: self._saveDocument(self.FMT_JSON_H))
self.saveMenu.addAction(self.saveJsonH)
@@ -530,7 +534,6 @@ class GuiBuildNovel(QDialog):
self.docView.setText(
"Failed to generate preview. The result is too big."
)
self._enableQtSave(False)
else:
self.htmlText = []
@@ -583,12 +586,10 @@ class GuiBuildNovel(QDialog):
if self.htmlSize < nwConst.MAX_BUILDSIZE:
self.docView.setContent(self.htmlText, self.buildTime)
self._enableQtSave(True)
else:
self.docView.setText(
"Failed to generate preview. The result is too big."
)
self._enableQtSave(False)
self._saveCache()
@@ -676,7 +677,7 @@ class GuiBuildNovel(QDialog):
bldObj.doPostProcessing()
except Exception:
logger.error("Failed to generate html of document '%s'" % tItem.itemHandle)
logger.error("Failed to build document '%s'" % tItem.itemHandle)
nw.logException()
if isPreview:
self.docView.setText((
@@ -748,7 +749,6 @@ class GuiBuildNovel(QDialog):
"""
replaceTabs = self.replaceTabs.isChecked()
byteFmt = QByteArray()
fileExt = ""
textFmt = ""
@@ -763,14 +763,14 @@ class GuiBuildNovel(QDialog):
fileExt = "fodt"
textFmt = "Flat Open Document"
elif theFmt == self.FMT_PDF:
fileExt = "pdf"
textFmt = "PDF"
elif theFmt == self.FMT_HTM:
fileExt = "htm"
textFmt = "Plain HTML"
elif theFmt == self.FMT_NWD:
fileExt = "nwd"
textFmt = "novelWriter Markdown"
elif theFmt == self.FMT_MD:
fileExt = "md"
textFmt = "Standard Markdown"
@@ -779,15 +779,6 @@ class GuiBuildNovel(QDialog):
fileExt = "md"
textFmt = "GitHub Markdown"
elif theFmt == self.FMT_NWD:
fileExt = "nwd"
textFmt = "novelWriter Markdown"
elif theFmt == self.FMT_TXT:
byteFmt.append("plaintext")
fileExt = "txt"
textFmt = "Plain Text"
elif theFmt == self.FMT_JSON_H:
fileExt = "json"
textFmt = "JSON + novelWriter HTML"
@@ -796,6 +787,10 @@ class GuiBuildNovel(QDialog):
fileExt = "json"
textFmt = "JSON + novelWriter Markdown"
elif theFmt == self.FMT_PDF:
fileExt = "pdf"
textFmt = "PDF"
else:
return False
@@ -830,11 +825,23 @@ class GuiBuildNovel(QDialog):
errMsg = ""
wSuccess = False
if theFmt == self.FMT_TXT:
docWriter = QTextDocumentWriter()
docWriter.setFileName(savePath)
docWriter.setFormat(byteFmt)
wSuccess = docWriter.write(self.docView.qDocument)
if theFmt == self.FMT_ODT:
makeOdt = ToOdt(self.theProject, self.theParent, isFlat=False)
self._doBuild(makeOdt)
try:
makeOdt.saveOpenDocText(savePath)
wSuccess = True
except Exception as e:
errMsg = str(e)
elif theFmt == self.FMT_FODT:
makeOdt = ToOdt(self.theProject, self.theParent, isFlat=True)
self._doBuild(makeOdt)
try:
makeOdt.saveFlatXML(savePath)
wSuccess = True
except Exception as e:
errMsg = str(e)
elif theFmt == self.FMT_HTM:
makeHtml = ToHtml(self.theProject, self.theParent)
@@ -878,24 +885,6 @@ class GuiBuildNovel(QDialog):
except Exception as e:
errMsg = str(e)
elif theFmt == self.FMT_FODT:
makeOdt = ToOdt(self.theProject, self.theParent, isFlat=True)
self._doBuild(makeOdt)
try:
makeOdt.saveFlatXML(savePath)
wSuccess = True
except Exception as e:
errMsg = str(e)
elif theFmt == self.FMT_ODT:
makeOdt = ToOdt(self.theProject, self.theParent, isFlat=False)
self._doBuild(makeOdt)
try:
makeOdt.saveOpenDocText(savePath)
wSuccess = True
except Exception as e:
errMsg = str(e)
elif theFmt == self.FMT_JSON_H or theFmt == self.FMT_JSON_M:
jsonData = {
"meta" : {
@@ -1077,17 +1066,6 @@ class GuiBuildNovel(QDialog):
# Internal Functions
##
def _enableQtSave(self, theState):
"""Set the enabled status of Save menu entries that depend on
the QTextDocument.
"""
self.saveODT.setEnabled(theState)
self.savePDF.setEnabled(theState)
self.saveTXT.setEnabled(theState)
if self.mainConf.verQtValue >= 51400:
self.saveMD.setEnabled(theState)
return
def _saveSettings(self):
"""Save the various user settings.
"""