mirror of
https://github.com/olivierkes/manuskript.git
synced 2024-05-20 21:02:23 +12:00
Adds: OPML import with preview (using @camstevenson's importer) #200
This commit is contained in:
parent
fb50d42348
commit
a29eddabea
|
@ -6,7 +6,7 @@ from manuskript.importer.markdownImporter import markdownImporter
|
||||||
from manuskript.importer.opmlImporter import opmlImporter
|
from manuskript.importer.opmlImporter import opmlImporter
|
||||||
|
|
||||||
importers = [
|
importers = [
|
||||||
markdownImporter,
|
#markdownImporter,
|
||||||
opmlImporter,
|
opmlImporter,
|
||||||
folderImporter,
|
#folderImporter,
|
||||||
]
|
]
|
||||||
|
|
|
@ -8,5 +8,5 @@ class markdownImporter(abstractImporter):
|
||||||
|
|
||||||
name = "Markdown"
|
name = "Markdown"
|
||||||
description = ""
|
description = ""
|
||||||
fileFormat = "Markdown files (*.md; *.txt; *)"
|
fileFormat = "Markdown files (*.md *.txt *)"
|
||||||
icon = "text-x-markdown"
|
icon = "text-x-markdown"
|
||||||
|
|
|
@ -12,7 +12,7 @@ class opmlImporter(abstractImporter):
|
||||||
|
|
||||||
name = "OPML"
|
name = "OPML"
|
||||||
description = ""
|
description = ""
|
||||||
fileFormat = "OPML Files (*.opml)"
|
fileFormat = "OPML Files (*.opml *.xml)"
|
||||||
icon = "text-x-opml+xml"
|
icon = "text-x-opml+xml"
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
|
@ -23,15 +23,16 @@ class opmlImporter(abstractImporter):
|
||||||
ret = False
|
ret = False
|
||||||
|
|
||||||
try:
|
try:
|
||||||
with open(filePath, 'r') as opmlFile:
|
with open(filePath, 'rb') as opmlFile:
|
||||||
opmlContent = cls.saveNewlines(opmlFile.read())
|
#opmlContent = cls.saveNewlines(opmlFile.read())
|
||||||
|
opmlContent = opmlFile.read()
|
||||||
except:
|
except:
|
||||||
QMessageBox.critical(settingsWidget,
|
QMessageBox.critical(settingsWidget,
|
||||||
qApp.translate("Import", "OPML Import"),
|
qApp.translate("Import", "OPML Import"),
|
||||||
qApp.translate("Import", "File open failed."))
|
qApp.translate("Import", "File open failed."))
|
||||||
return None
|
return None
|
||||||
|
|
||||||
parsed = ET.fromstring(bytes(opmlContent, 'utf-8'))
|
parsed = ET.fromstring(opmlContent)
|
||||||
|
|
||||||
opmlNode = parsed
|
opmlNode = parsed
|
||||||
bodyNode = opmlNode.find("body")
|
bodyNode = opmlNode.find("body")
|
||||||
|
@ -65,7 +66,8 @@ class opmlImporter(abstractImporter):
|
||||||
body = ""
|
body = ""
|
||||||
note = underElement.get('_note')
|
note = underElement.get('_note')
|
||||||
if note is not None and not cls.isWhitespaceOnly(note):
|
if note is not None and not cls.isWhitespaceOnly(note):
|
||||||
body = cls.restoreNewLines(note)
|
#body = cls.restoreNewLines(note)
|
||||||
|
body = note
|
||||||
|
|
||||||
children = underElement.findall('outline')
|
children = underElement.findall('outline')
|
||||||
if children is not None and len(children) > 0:
|
if children is not None and len(children) > 0:
|
||||||
|
|
|
@ -37,9 +37,11 @@ class Ui_generalSettings(object):
|
||||||
self.formLayout_4.setRowWrapPolicy(QtWidgets.QFormLayout.WrapLongRows)
|
self.formLayout_4.setRowWrapPolicy(QtWidgets.QFormLayout.WrapLongRows)
|
||||||
self.formLayout_4.setObjectName("formLayout_4")
|
self.formLayout_4.setObjectName("formLayout_4")
|
||||||
self.chkGeneralSplitScenes = QtWidgets.QCheckBox(self.general)
|
self.chkGeneralSplitScenes = QtWidgets.QCheckBox(self.general)
|
||||||
|
self.chkGeneralSplitScenes.setEnabled(False)
|
||||||
self.chkGeneralSplitScenes.setObjectName("chkGeneralSplitScenes")
|
self.chkGeneralSplitScenes.setObjectName("chkGeneralSplitScenes")
|
||||||
self.formLayout_4.setWidget(2, QtWidgets.QFormLayout.LabelRole, self.chkGeneralSplitScenes)
|
self.formLayout_4.setWidget(2, QtWidgets.QFormLayout.LabelRole, self.chkGeneralSplitScenes)
|
||||||
self.txtGeneralSplitScenes = QtWidgets.QLineEdit(self.general)
|
self.txtGeneralSplitScenes = QtWidgets.QLineEdit(self.general)
|
||||||
|
self.txtGeneralSplitScenes.setEnabled(False)
|
||||||
self.txtGeneralSplitScenes.setObjectName("txtGeneralSplitScenes")
|
self.txtGeneralSplitScenes.setObjectName("txtGeneralSplitScenes")
|
||||||
self.formLayout_4.setWidget(2, QtWidgets.QFormLayout.FieldRole, self.txtGeneralSplitScenes)
|
self.formLayout_4.setWidget(2, QtWidgets.QFormLayout.FieldRole, self.txtGeneralSplitScenes)
|
||||||
self.chkGeneralTrimTitles = QtWidgets.QCheckBox(self.general)
|
self.chkGeneralTrimTitles = QtWidgets.QCheckBox(self.general)
|
||||||
|
|
|
@ -80,13 +80,20 @@ QToolBox::tab:selected, QToolBox::tab:hover{
|
||||||
</property>
|
</property>
|
||||||
<item row="2" column="0">
|
<item row="2" column="0">
|
||||||
<widget class="QCheckBox" name="chkGeneralSplitScenes">
|
<widget class="QCheckBox" name="chkGeneralSplitScenes">
|
||||||
|
<property name="enabled">
|
||||||
|
<bool>false</bool>
|
||||||
|
</property>
|
||||||
<property name="text">
|
<property name="text">
|
||||||
<string>Split scenes at:</string>
|
<string>Split scenes at:</string>
|
||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item row="2" column="1">
|
<item row="2" column="1">
|
||||||
<widget class="QLineEdit" name="txtGeneralSplitScenes"/>
|
<widget class="QLineEdit" name="txtGeneralSplitScenes">
|
||||||
|
<property name="enabled">
|
||||||
|
<bool>false</bool>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item row="3" column="0" colspan="2">
|
<item row="3" column="0" colspan="2">
|
||||||
<widget class="QCheckBox" name="chkGeneralTrimTitles">
|
<widget class="QCheckBox" name="chkGeneralTrimTitles">
|
||||||
|
|
|
@ -25,6 +25,7 @@ class importerDialog(QWidget, Ui_importer):
|
||||||
".rst": "text-plain",
|
".rst": "text-plain",
|
||||||
".tex": "text-x-tex",
|
".tex": "text-x-tex",
|
||||||
".opml": "text-x-opml+xml",
|
".opml": "text-x-opml+xml",
|
||||||
|
".xml": "text-x-opml+xml",
|
||||||
".html": "text-html",
|
".html": "text-html",
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -38,6 +39,7 @@ class importerDialog(QWidget, Ui_importer):
|
||||||
self.setStyleSheet(style.mainWindowSS())
|
self.setStyleSheet(style.mainWindowSS())
|
||||||
self.tree.setStyleSheet("QTreeView{background:transparent;}")
|
self.tree.setStyleSheet("QTreeView{background:transparent;}")
|
||||||
self.editor.setStyleSheet("QWidget{background:transparent;}")
|
self.editor.setStyleSheet("QWidget{background:transparent;}")
|
||||||
|
self.editor.toggleSpellcheck(False)
|
||||||
|
|
||||||
# Register importFormats:
|
# Register importFormats:
|
||||||
self.importers = importer.importers
|
self.importers = importer.importers
|
||||||
|
@ -52,12 +54,8 @@ class importerDialog(QWidget, Ui_importer):
|
||||||
self.btnImport.clicked.connect(self.doImport)
|
self.btnImport.clicked.connect(self.doImport)
|
||||||
self.cmbImporters.currentTextChanged.connect(self.updateSettings)
|
self.cmbImporters.currentTextChanged.connect(self.updateSettings)
|
||||||
|
|
||||||
#self.setFileName("")
|
self.setFileName("")
|
||||||
QTimer.singleShot(50, lambda:
|
self.updateSettings()
|
||||||
self.cmbImporters.setCurrentText("OPML"))
|
|
||||||
QTimer.singleShot(50, lambda:
|
|
||||||
self.setFileName("/home/olivier/Dropbox/Documents/Travail/Geekeries/Python/PyCharmProjects/manuskript/test-projects/IMPORTS/End Plan 2.opml")
|
|
||||||
)
|
|
||||||
|
|
||||||
############################################################################
|
############################################################################
|
||||||
# Combobox / Formats
|
# Combobox / Formats
|
||||||
|
@ -108,14 +106,18 @@ class importerDialog(QWidget, Ui_importer):
|
||||||
self.lblFileName.setText(os.path.basename(fileName))
|
self.lblFileName.setText(os.path.basename(fileName))
|
||||||
self.lblFileName.setToolTip(fileName)
|
self.lblFileName.setToolTip(fileName)
|
||||||
ext = os.path.splitext(fileName)[1]
|
ext = os.path.splitext(fileName)[1]
|
||||||
|
icon = None
|
||||||
if ext and ext in self.formatsIcon:
|
if ext and ext in self.formatsIcon:
|
||||||
icon = QIcon.fromTheme(self.formatsIcon[ext])
|
icon = QIcon.fromTheme(self.formatsIcon[ext])
|
||||||
elif os.path.isdir(fileName):
|
elif os.path.isdir(fileName):
|
||||||
icon = QIcon.fromTheme("folder")
|
icon = QIcon.fromTheme("folder")
|
||||||
|
|
||||||
#self.lblIcon.setVisible(True)
|
if icon:
|
||||||
h = self.lblFileName.height()
|
self.lblIcon.setVisible(True)
|
||||||
self.lblIcon.setPixmap(icon.pixmap(h, h))
|
h = self.lblFileName.height()
|
||||||
|
self.lblIcon.setPixmap(icon.pixmap(h, h))
|
||||||
|
else:
|
||||||
|
self.lblIcon.hide()
|
||||||
|
|
||||||
else:
|
else:
|
||||||
self.fileName = None
|
self.fileName = None
|
||||||
|
|
Loading…
Reference in a new issue