From 5207eddfbbf05ac6e92ecb587d29a146606ee8ee Mon Sep 17 00:00:00 2001 From: Olivier Keshavjee Date: Tue, 14 Nov 2017 08:24:43 +0100 Subject: [PATCH] Fixes 213: Program Crash on Import with images --- manuskript/importer/abstractImporter.py | 11 +++++++++++ manuskript/importer/folderImporter.py | 25 +++++++++++++++---------- 2 files changed, 26 insertions(+), 10 deletions(-) diff --git a/manuskript/importer/abstractImporter.py b/manuskript/importer/abstractImporter.py index 440068b7..ba810afc 100644 --- a/manuskript/importer/abstractImporter.py +++ b/manuskript/importer/abstractImporter.py @@ -27,6 +27,7 @@ class abstractImporter: engine = "Internal" def __init__(self): + self.settingsList = [] # Keep the name of the settings in order self.settings = {} def startImport(self, filePath, parentItem, settingsWidget): @@ -73,6 +74,7 @@ class abstractImporter: def addSetting(self, name, type, label, widget=None, default=None, tooltip=None, min=None, max=None, vals=None, suffix=""): + self.settingsList.append(name) self.settings[name] = self.setting(name, type, label, widget, default, tooltip, min, max, vals, suffix) @@ -84,6 +86,15 @@ class abstractImporter: if name in self.settings: return self.settings[name] + def addSettingsTo(self, widget): + """ + Adds all the settings to the given widget. Assume that the settings + have not been called yet, so calling `.widget()` will create their + widgets. + """ + for name in self.settingsList: + self.settings[name].widget(widget) + class setting: """ diff --git a/manuskript/importer/folderImporter.py b/manuskript/importer/folderImporter.py index 4a3929cc..6789dc20 100644 --- a/manuskript/importer/folderImporter.py +++ b/manuskript/importer/folderImporter.py @@ -24,7 +24,7 @@ class folderImporter(abstractImporter): Imports from a folder. """ ext = self.getSetting("ext").value() - ext = [e.strip().replace("*", "") for e in ext.split(",")] + ext = [e.strip().replace("*", "").lower() for e in ext.split(",")] sorting = self.getSetting("sortItems").value() @@ -42,11 +42,16 @@ class folderImporter(abstractImporter): def addFile(f): fName, fExt = os.path.splitext(f) - if fExt in ext: - child = outlineItem(title=fName, _type="md", parent=item) - with open(os.path.join(dirpath, f), "r") as fr: - child._data[Outline.text] = fr.read() - items.append(child) + if fExt.lower() in ext: + try: + with open(os.path.join(dirpath, f), "r") as fr: + content = fr.read() + child = outlineItem(title=fName, _type="md", parent=item) + child._data[Outline.text] = content + items.append(child) + except UnicodeDecodeError: + # Probably not a text file + pass def addFolder(d): child = outlineItem(title=d, parent=item) @@ -93,10 +98,11 @@ class folderImporter(abstractImporter): #group = cls.addPage(widget, "Folder import") self.addSetting("info", "label", - qApp.translate("Import", """Info: Imports a whole + qApp.translate("Import", """

Info: Imports a whole directory structure. Folders are added as folders, and plaintext documents within (you chose which ones by extension) - are added as scene.
 """)) + are added as scene.

+

Only text files are supported (not images, binary or others).

""")) self.addSetting("ext", "text", qApp.translate("Import", "Include only those extensions:"), @@ -111,8 +117,7 @@ class folderImporter(abstractImporter): qApp.translate("Import", "Import folder then files"), default=True), - for s in self.settings: - self.settings[s].widget(group) + self.addSettingsTo(group) return widget