From fb50d423484b1e8c6d5687c652398f0119a4ea2d Mon Sep 17 00:00:00 2001 From: Olivier Keshavjee Date: Tue, 7 Nov 2017 14:40:46 +0100 Subject: [PATCH] Checkpoint: import now works. --- manuskript/importer/opmlImporter.py | 60 +------------------------ manuskript/ui/importers/importer.py | 69 ++++++++++++++++++++--------- 2 files changed, 48 insertions(+), 81 deletions(-) diff --git a/manuskript/importer/opmlImporter.py b/manuskript/importer/opmlImporter.py index aff3728..6bb372b 100644 --- a/manuskript/importer/opmlImporter.py +++ b/manuskript/importer/opmlImporter.py @@ -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') diff --git a/manuskript/ui/importers/importer.py b/manuskript/ui/importers/importer.py index 721d045..5984fa4 100644 --- a/manuskript/ui/importers/importer.py +++ b/manuskript/ui/importers/importer.py @@ -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