mirror of
https://github.com/olivierkes/manuskript.git
synced 2024-05-20 21:02:23 +12:00
Checkpoint: import now works.
This commit is contained in:
parent
543d5a232a
commit
fb50d42348
|
@ -45,13 +45,7 @@ class opmlImporter(abstractImporter):
|
||||||
items.append(cls.parseItems(element, parentItem))
|
items.append(cls.parseItems(element, parentItem))
|
||||||
ret = True
|
ret = True
|
||||||
|
|
||||||
if ret:
|
if not ret:
|
||||||
#QMessageBox.information(
|
|
||||||
#settingsWidget,
|
|
||||||
#qApp.translate("Import", "OPML Import"),
|
|
||||||
#qApp.translate("Import", "Import Complete."))
|
|
||||||
pass
|
|
||||||
else:
|
|
||||||
QMessageBox.critical(
|
QMessageBox.critical(
|
||||||
settingsWidget,
|
settingsWidget,
|
||||||
qApp.translate("Import", "OPML Import"),
|
qApp.translate("Import", "OPML Import"),
|
||||||
|
@ -61,58 +55,6 @@ class opmlImporter(abstractImporter):
|
||||||
|
|
||||||
return items
|
return items
|
||||||
|
|
||||||
def importOpml(opmlFilePath, idx):
|
|
||||||
"""
|
|
||||||
Import/export outline cards in OPML format.
|
|
||||||
#FIXME: delete me when done with startImport
|
|
||||||
"""
|
|
||||||
ret = False
|
|
||||||
mw = mainWindow()
|
|
||||||
|
|
||||||
try:
|
|
||||||
with open(opmlFilePath, 'r') as opmlFile:
|
|
||||||
opmlContent = saveNewlines(opmlFile.read())
|
|
||||||
except:
|
|
||||||
QMessageBox.critical(mw, mw.tr("OPML Import"),
|
|
||||||
mw.tr("File open failed."))
|
|
||||||
return False
|
|
||||||
|
|
||||||
mdl = mw.mdlOutline
|
|
||||||
|
|
||||||
if idx.internalPointer() is not None:
|
|
||||||
parentItem = idx.internalPointer()
|
|
||||||
else:
|
|
||||||
parentItem = mdl.rootItem
|
|
||||||
|
|
||||||
try:
|
|
||||||
parsed = ET.fromstring(bytes(opmlContent, 'utf-8'))
|
|
||||||
|
|
||||||
opmlNode = parsed
|
|
||||||
bodyNode = opmlNode.find("body")
|
|
||||||
|
|
||||||
if bodyNode is not None:
|
|
||||||
outlineEls = bodyNode.findall("outline")
|
|
||||||
|
|
||||||
if outlineEls is not None:
|
|
||||||
for element in outlineEls:
|
|
||||||
parseItems(element, parentItem)
|
|
||||||
|
|
||||||
mdl.layoutChanged.emit()
|
|
||||||
mw.treeRedacOutline.viewport().update()
|
|
||||||
ret = True
|
|
||||||
except:
|
|
||||||
pass
|
|
||||||
|
|
||||||
# TODO: Translation
|
|
||||||
if ret:
|
|
||||||
QMessageBox.information(mw, mw.tr("OPML Import"),
|
|
||||||
mw.tr("Import Complete."))
|
|
||||||
else:
|
|
||||||
QMessageBox.critical(mw, mw.tr("OPML Import"),
|
|
||||||
mw.tr("This does not appear to be a valid OPML file."))
|
|
||||||
|
|
||||||
return ret
|
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def parseItems(cls, underElement, parentItem=None):
|
def parseItems(cls, underElement, parentItem=None):
|
||||||
title = underElement.get('text')
|
title = underElement.get('text')
|
||||||
|
|
|
@ -5,7 +5,7 @@ import os
|
||||||
|
|
||||||
from PyQt5.QtCore import Qt, QTimer
|
from PyQt5.QtCore import Qt, QTimer
|
||||||
from PyQt5.QtGui import QBrush, QColor, QIcon
|
from PyQt5.QtGui import QBrush, QColor, QIcon
|
||||||
from PyQt5.QtWidgets import QWidget, QFileDialog
|
from PyQt5.QtWidgets import QWidget, QFileDialog, QMessageBox
|
||||||
|
|
||||||
from manuskript.functions import lightBlue, writablePath, appPath
|
from manuskript.functions import lightBlue, writablePath, appPath
|
||||||
from manuskript.ui.importers.importer_ui import Ui_importer
|
from manuskript.ui.importers.importer_ui import Ui_importer
|
||||||
|
@ -49,6 +49,7 @@ class importerDialog(QWidget, Ui_importer):
|
||||||
self.btnChoseFile.clicked.connect(self.selectFile)
|
self.btnChoseFile.clicked.connect(self.selectFile)
|
||||||
self.btnClearFileName.clicked.connect(self.setFileName)
|
self.btnClearFileName.clicked.connect(self.setFileName)
|
||||||
self.btnPreview.clicked.connect(self.preview)
|
self.btnPreview.clicked.connect(self.preview)
|
||||||
|
self.btnImport.clicked.connect(self.doImport)
|
||||||
self.cmbImporters.currentTextChanged.connect(self.updateSettings)
|
self.cmbImporters.currentTextChanged.connect(self.updateSettings)
|
||||||
|
|
||||||
#self.setFileName("")
|
#self.setFileName("")
|
||||||
|
@ -170,26 +171,63 @@ class importerDialog(QWidget, Ui_importer):
|
||||||
|
|
||||||
def preview(self):
|
def preview(self):
|
||||||
|
|
||||||
# We find the current selected format
|
# Creating a temporary outlineModel
|
||||||
F = self.currentFormat()
|
|
||||||
|
|
||||||
# Temporary outlineModel
|
|
||||||
previewModel = outlineModel(self)
|
previewModel = outlineModel(self)
|
||||||
previewModel.loadFromXML(
|
previewModel.loadFromXML(
|
||||||
self.mw.mdlOutline.saveToXML(),
|
self.mw.mdlOutline.saveToXML(),
|
||||||
fromString=True)
|
fromString=True)
|
||||||
|
|
||||||
|
# Inserting elements
|
||||||
|
result = self.startImport(previewModel)
|
||||||
|
|
||||||
|
if result:
|
||||||
|
self.tree.setModel(previewModel)
|
||||||
|
for i in range(1, previewModel.columnCount()):
|
||||||
|
self.tree.hideColumn(i)
|
||||||
|
self.tree.selectionModel().currentChanged.connect(self.editor.setCurrentModelIndex)
|
||||||
|
self.previewSplitter.setStretchFactor(0, 10)
|
||||||
|
self.previewSplitter.setStretchFactor(1, 40)
|
||||||
|
|
||||||
|
def doImport(self):
|
||||||
|
"""
|
||||||
|
Called by the Import button.
|
||||||
|
"""
|
||||||
|
self.startImport(self.mw.mdlOutline)
|
||||||
|
|
||||||
|
QMessageBox.information(self, self.tr("Import status"),
|
||||||
|
self.tr("Import Complete."))
|
||||||
|
|
||||||
|
self.close()
|
||||||
|
|
||||||
|
def startImport(self, outlineModel):
|
||||||
|
"""
|
||||||
|
Where most of the magic happens.
|
||||||
|
Is used by preview and by doImport (actual import).
|
||||||
|
|
||||||
|
`outlineModel` is the model where the imported items are added.
|
||||||
|
"""
|
||||||
|
|
||||||
|
# We find the current selected format
|
||||||
|
F = self.currentFormat()
|
||||||
|
|
||||||
# Parent item
|
# Parent item
|
||||||
ID = self.settingsWidget.importUnderID()
|
ID = self.settingsWidget.importUnderID()
|
||||||
parentItem = previewModel.getItemByID(ID)
|
parentItem = outlineModel.getItemByID(ID)
|
||||||
|
|
||||||
# Calling the importer in a temporary model
|
# Calling the importer
|
||||||
items = F.startImport(self.fileName,
|
items = F.startImport(self.fileName,
|
||||||
parentItem,
|
parentItem,
|
||||||
self.settingsWidget)
|
self.settingsWidget)
|
||||||
|
|
||||||
# Do transformations
|
# Do transformations
|
||||||
# ------------------
|
items = self.doTransformations(items)
|
||||||
|
|
||||||
|
return True
|
||||||
|
|
||||||
|
def doTransformations(self, items):
|
||||||
|
"""
|
||||||
|
Do general transformations.
|
||||||
|
"""
|
||||||
|
|
||||||
# Trim long titles
|
# Trim long titles
|
||||||
if self.settingsWidget.trimLongTitles():
|
if self.settingsWidget.trimLongTitles():
|
||||||
|
@ -201,19 +239,6 @@ class importerDialog(QWidget, Ui_importer):
|
||||||
for i in items:
|
for i in items:
|
||||||
trim(i)
|
trim(i)
|
||||||
|
|
||||||
if items:
|
return items
|
||||||
self.tree.setModel(previewModel)
|
|
||||||
for i in range(1, previewModel.columnCount()):
|
|
||||||
self.tree.hideColumn(i)
|
|
||||||
self.tree.selectionModel().currentChanged.connect(self.editor.setCurrentModelIndex)
|
|
||||||
self.previewSplitter.setStretchFactor(0, 10)
|
|
||||||
self.previewSplitter.setStretchFactor(1, 40)
|
|
||||||
|
|
||||||
|
|
||||||
def startImport(self):
|
|
||||||
pass
|
|
||||||
|
|
||||||
# Note: dont forget to emit: mdl.layoutChanged.emit()
|
|
||||||
# Maybe: mw.treeRedacOutline.viewport().update()
|
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue