mirror of
https://github.com/olivierkes/manuskript.git
synced 2024-05-10 07:52:35 +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))
|
||||
ret = True
|
||||
|
||||
if ret:
|
||||
#QMessageBox.information(
|
||||
#settingsWidget,
|
||||
#qApp.translate("Import", "OPML Import"),
|
||||
#qApp.translate("Import", "Import Complete."))
|
||||
pass
|
||||
else:
|
||||
if not ret:
|
||||
QMessageBox.critical(
|
||||
settingsWidget,
|
||||
qApp.translate("Import", "OPML Import"),
|
||||
|
@ -61,58 +55,6 @@ class opmlImporter(abstractImporter):
|
|||
|
||||
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
|
||||
def parseItems(cls, underElement, parentItem=None):
|
||||
title = underElement.get('text')
|
||||
|
|
|
@ -5,7 +5,7 @@ import os
|
|||
|
||||
from PyQt5.QtCore import Qt, QTimer
|
||||
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.ui.importers.importer_ui import Ui_importer
|
||||
|
@ -49,6 +49,7 @@ class importerDialog(QWidget, Ui_importer):
|
|||
self.btnChoseFile.clicked.connect(self.selectFile)
|
||||
self.btnClearFileName.clicked.connect(self.setFileName)
|
||||
self.btnPreview.clicked.connect(self.preview)
|
||||
self.btnImport.clicked.connect(self.doImport)
|
||||
self.cmbImporters.currentTextChanged.connect(self.updateSettings)
|
||||
|
||||
#self.setFileName("")
|
||||
|
@ -170,26 +171,63 @@ class importerDialog(QWidget, Ui_importer):
|
|||
|
||||
def preview(self):
|
||||
|
||||
# We find the current selected format
|
||||
F = self.currentFormat()
|
||||
|
||||
# Temporary outlineModel
|
||||
# Creating a temporary outlineModel
|
||||
previewModel = outlineModel(self)
|
||||
previewModel.loadFromXML(
|
||||
self.mw.mdlOutline.saveToXML(),
|
||||
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
|
||||
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,
|
||||
parentItem,
|
||||
self.settingsWidget)
|
||||
|
||||
# Do transformations
|
||||
# ------------------
|
||||
items = self.doTransformations(items)
|
||||
|
||||
return True
|
||||
|
||||
def doTransformations(self, items):
|
||||
"""
|
||||
Do general transformations.
|
||||
"""
|
||||
|
||||
# Trim long titles
|
||||
if self.settingsWidget.trimLongTitles():
|
||||
|
@ -201,19 +239,6 @@ class importerDialog(QWidget, Ui_importer):
|
|||
for i in items:
|
||||
trim(i)
|
||||
|
||||
if 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()
|
||||
return items
|
||||
|
||||
|
||||
|
|
Loading…
Reference in a new issue