manuskript/manuskript/converters/pandocConverter.py
TheJackiMonster a33249fc9d
Added guard to catch errors with translation
Signed-off-by: TheJackiMonster <thejackimonster@gmail.com>
2022-05-17 11:43:22 +02:00

88 lines
2.2 KiB
Python

#!/usr/bin/env python
# --!-- coding: utf8 --!--
import os
import shutil
import subprocess
from PyQt5.QtCore import Qt
from PyQt5.QtWidgets import qApp, QMessageBox
from PyQt5.QtGui import QCursor
from manuskript.converters import abstractConverter
from manuskript.functions import mainWindow, safeTranslate
import logging
LOGGER = logging.getLogger(__name__)
class pandocConverter(abstractConverter):
name = "pandoc"
cmd = "pandoc"
@classmethod
def isValid(self):
if self.path() != None:
return 2
elif self.customPath() and os.path.exists(self.customPath):
return 1
else:
return 0
@classmethod
def customPath(self):
settings = QSettings()
return settings.value("Exporters/{}_customPath".format(self.name), "")
@classmethod
def path(self):
return shutil.which(self.cmd)
@classmethod
def convert(self, src, _from="markdown", to="html", args=None, outputfile=None):
if not self.isValid:
LOGGER.error("pandocConverter is called but not valid.")
return ""
cmd = [self.runCmd()]
cmd += ["--from={}".format(_from)]
cmd += ["--to={}".format(to)]
if args:
cmd += args
if outputfile:
cmd.append("--output={}".format(outputfile))
qApp.setOverrideCursor(QCursor(Qt.WaitCursor))
p = subprocess.Popen(
cmd,
stdin=subprocess.PIPE,
stdout=subprocess.PIPE,
stderr=subprocess.PIPE
)
if not type(src) == bytes:
src = src.encode("utf-8") # assumes utf-8
stdout, stderr = p.communicate(src)
qApp.restoreOverrideCursor()
if stderr:
err = stderr.decode("utf-8")
LOGGER.error(err)
QMessageBox.critical(mainWindow().dialog,
safeTranslate(qApp, "Export", "Error"), err)
return None
return stdout.decode("utf-8")
@classmethod
def runCmd(self):
if self.isValid() == 2:
return self.cmd
elif self.isValid() == 1:
return self.customPath