From e35860a2b2ca314c6540c5600309bea97006709c Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Sun, 10 Apr 2011 13:58:05 -0600 Subject: [PATCH] Fix #756807 (unhandled exception when creating catalogs in EPUB or MOBI format) --- src/calibre/gui2/catalog/catalog_epub_mobi.py | 5 +++- .../gui2/preferences/metadata_sources.py | 29 ++++++++++++++++++- 2 files changed, 32 insertions(+), 2 deletions(-) diff --git a/src/calibre/gui2/catalog/catalog_epub_mobi.py b/src/calibre/gui2/catalog/catalog_epub_mobi.py index d5149569be..8af72e51c0 100644 --- a/src/calibre/gui2/catalog/catalog_epub_mobi.py +++ b/src/calibre/gui2/catalog/catalog_epub_mobi.py @@ -193,7 +193,10 @@ class PluginWidget(QWidget,Ui_Form): opts_dict['header_note_source_field'] = self.header_note_source_field_name # Append the output profile - opts_dict['output_profile'] = [load_defaults('page_setup')['output_profile']] + try: + opts_dict['output_profile'] = [load_defaults('page_setup')['output_profile']] + except: + opts_dict['output_profile'] = ['default'] if False: print "opts_dict" for opt in sorted(opts_dict.keys()): diff --git a/src/calibre/gui2/preferences/metadata_sources.py b/src/calibre/gui2/preferences/metadata_sources.py index a912e6f956..66fd35e038 100644 --- a/src/calibre/gui2/preferences/metadata_sources.py +++ b/src/calibre/gui2/preferences/metadata_sources.py @@ -9,7 +9,7 @@ __docformat__ = 'restructuredtext en' from operator import attrgetter -from PyQt4.Qt import (QAbstractTableModel, Qt) +from PyQt4.Qt import (QAbstractTableModel, Qt, QAbstractListModel) from calibre.gui2.preferences import ConfigWidgetBase, test_widget from calibre.gui2.preferences.metadata_sources_ui import Ui_Form @@ -125,6 +125,29 @@ class SourcesModel(QAbstractTableModel): # {{{ # }}} +class FieldsModel(QAbstractListModel): # {{{ + + def __init__(self, parent=None): + QAbstractTableModel.__init__(self, parent) + + self.fields = [] + + def rowCount(self, parent=None): + return len(self.fields) + + def initialize(self): + fields = set() + for p in all_metadata_plugins(): + fields |= p.touched_fields + self.fields = [] + for x in fields: + if not x.startswith('identifiers:'): + self.fields.append(x) + self.reset() + + +# }}} + class ConfigWidget(ConfigWidgetBase, Ui_Form): def genesis(self, gui): @@ -139,6 +162,10 @@ class ConfigWidget(ConfigWidgetBase, Ui_Form): self.sources_view.setModel(self.sources_model) self.sources_model.dataChanged.connect(self.changed_signal) + self.fields_model = FieldsModel(self) + self.fields_view.setModel(self.fields_model) + self.fields_model.dataChanged.connect(self.changed_signal) + def configure_plugin(self): pass