Checkpoint: import now works.

This commit is contained in:
Olivier Keshavjee 2017-11-07 14:40:46 +01:00
parent 543d5a232a
commit fb50d42348
2 changed files with 48 additions and 81 deletions

View file

@ -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')

View file

@ -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