Implement tag mapper for metadata downloading as well

This commit is contained in:
Kovid Goyal 2015-09-24 21:43:04 +05:30
parent b63766fdc5
commit c7ddf59cd2
4 changed files with 58 additions and 19 deletions

View File

@ -494,9 +494,14 @@ def identify(log, abort, # {{{
log('We have %d merged results, merging took: %.2f seconds' % log('We have %d merged results, merging took: %.2f seconds' %
(len(results), time.time() - start_time)) (len(results), time.time() - start_time))
tm_rules = msprefs['tag_map_rules']
if tm_rules:
from calibre.ebooks.metadata.tag_mapper import map_tags
max_tags = msprefs['max_tags'] max_tags = msprefs['max_tags']
for r in results: for r in results:
if tm_rules:
r.tags = map_tags(r.tags, tm_rules)
r.tags = r.tags[:max_tags] r.tags = r.tags[:max_tags]
if getattr(r.pubdate, 'year', 2000) <= UNDEFINED_DATE.year: if getattr(r.pubdate, 'year', 2000) <= UNDEFINED_DATE.year:
r.pubdate = None r.pubdate = None

View File

@ -19,6 +19,7 @@ msprefs.defaults['swap_author_names'] = False
msprefs.defaults['fewer_tags'] = True msprefs.defaults['fewer_tags'] = True
msprefs.defaults['find_first_edition_date'] = False msprefs.defaults['find_first_edition_date'] = False
msprefs.defaults['append_comments'] = False msprefs.defaults['append_comments'] = False
msprefs.defaults['tag_map_rules'] = []
# Google covers are often poor quality (scans/errors) but they have high # Google covers are often poor quality (scans/errors) but they have high
# resolution, so they trump covers from better sources. So make sure they # resolution, so they trump covers from better sources. So make sure they

View File

@ -319,6 +319,8 @@ class ConfigWidget(ConfigWidgetBase, Ui_Form):
self.select_default_button.clicked.connect(self.fields_model.select_user_defaults) self.select_default_button.clicked.connect(self.fields_model.select_user_defaults)
self.select_default_button.clicked.connect(self.changed_signal) self.select_default_button.clicked.connect(self.changed_signal)
self.set_as_default_button.clicked.connect(self.fields_model.commit_user_defaults) self.set_as_default_button.clicked.connect(self.fields_model.commit_user_defaults)
self.tag_map_rules = None
self.tag_map_rules_button.clicked.connect(self.change_tag_map_rules)
def configure_plugin(self): def configure_plugin(self):
for index in self.sources_view.selectionModel().selectedRows(): for index in self.sources_view.selectionModel().selectedRows():
@ -343,11 +345,21 @@ class ConfigWidget(ConfigWidgetBase, Ui_Form):
self.stack.removeWidget(self.pc) self.stack.removeWidget(self.pc)
self.pc = None self.pc = None
def change_tag_map_rules(self):
from calibre.gui2.tag_mapper import RulesDialog
d = RulesDialog(self)
if msprefs.get('tag_map_rules'):
d.rules = msprefs['tag_map_rules']
if d.exec_() == d.Accepted:
self.tag_map_rules = d.rules
self.changed_signal.emit()
def initialize(self): def initialize(self):
ConfigWidgetBase.initialize(self) ConfigWidgetBase.initialize(self)
self.sources_model.initialize() self.sources_model.initialize()
self.sources_view.resizeColumnsToContents() self.sources_view.resizeColumnsToContents()
self.fields_model.initialize() self.fields_model.initialize()
self.tag_map_rules = None
def restore_defaults(self): def restore_defaults(self):
ConfigWidgetBase.restore_defaults(self) ConfigWidgetBase.restore_defaults(self)
@ -358,6 +370,11 @@ class ConfigWidget(ConfigWidgetBase, Ui_Form):
def commit(self): def commit(self):
self.sources_model.commit() self.sources_model.commit()
self.fields_model.commit() self.fields_model.commit()
if self.tag_map_rules is not None:
if self.tag_map_rules:
msprefs['tag_map_rules'] = self.tag_map_rules
else:
msprefs.pop('tag_map_rules', None)
return ConfigWidgetBase.commit(self) return ConfigWidgetBase.commit(self)
if __name__ == '__main__': if __name__ == '__main__':

View File

@ -14,7 +14,16 @@
<string>Form</string> <string>Form</string>
</property> </property>
<layout class="QVBoxLayout" name="verticalLayout"> <layout class="QVBoxLayout" name="verticalLayout">
<property name="margin"> <property name="leftMargin">
<number>0</number>
</property>
<property name="topMargin">
<number>0</number>
</property>
<property name="rightMargin">
<number>0</number>
</property>
<property name="bottomMargin">
<number>0</number> <number>0</number>
</property> </property>
<item> <item>
@ -28,7 +37,7 @@
</property> </property>
</widget> </widget>
</item> </item>
<item row="7" column="1"> <item row="8" column="1">
<widget class="QLabel" name="label_3"> <widget class="QLabel" name="label_3">
<property name="text"> <property name="text">
<string>Max. &amp;time to wait after first match is found:</string> <string>Max. &amp;time to wait after first match is found:</string>
@ -38,7 +47,7 @@
</property> </property>
</widget> </widget>
</item> </item>
<item row="8" column="1"> <item row="9" column="1">
<widget class="QLabel" name="label_4"> <widget class="QLabel" name="label_4">
<property name="text"> <property name="text">
<string>Max. time to wait after first &amp;cover is found:</string> <string>Max. time to wait after first &amp;cover is found:</string>
@ -48,14 +57,14 @@
</property> </property>
</widget> </widget>
</item> </item>
<item row="8" column="2"> <item row="9" column="2">
<widget class="QSpinBox" name="opt_wait_after_first_cover_result"> <widget class="QSpinBox" name="opt_wait_after_first_cover_result">
<property name="suffix"> <property name="suffix">
<string> secs</string> <string> secs</string>
</property> </property>
</widget> </widget>
</item> </item>
<item row="4" column="1" colspan="2"> <item row="5" column="1" colspan="2">
<widget class="QCheckBox" name="opt_fewer_tags"> <widget class="QCheckBox" name="opt_fewer_tags">
<property name="toolTip"> <property name="toolTip">
<string>&lt;p&gt;Different metadata sources have different sets of tags for the same book. If this option is checked, then calibre will use the smaller tag sets. These tend to be more like genres, while the larger tag sets tend to describe the books content. <string>&lt;p&gt;Different metadata sources have different sets of tags for the same book. If this option is checked, then calibre will use the smaller tag sets. These tend to be more like genres, while the larger tag sets tend to describe the books content.
@ -69,6 +78,13 @@
</property> </property>
</widget> </widget>
</item> </item>
<item row="2" column="1" colspan="2">
<widget class="QCheckBox" name="opt_swap_author_names">
<property name="text">
<string>Swap author names from FN LN to LN, FN</string>
</property>
</widget>
</item>
<item row="0" column="1" colspan="2"> <item row="0" column="1" colspan="2">
<widget class="QGroupBox" name="groupBox_2"> <widget class="QGroupBox" name="groupBox_2">
<property name="title"> <property name="title">
@ -129,34 +145,27 @@
</property> </property>
</widget> </widget>
</item> </item>
<item row="2" column="1" colspan="2"> <item row="7" column="2">
<widget class="QCheckBox" name="opt_swap_author_names"> <widget class="QSpinBox" name="opt_max_tags"/>
<property name="text">
<string>Swap author names from FN LN to LN, FN</string>
</property>
</widget>
</item> </item>
<item row="6" column="1"> <item row="7" column="1">
<widget class="QLabel" name="label_2"> <widget class="QLabel" name="label_2">
<property name="text"> <property name="text">
<string>Max. number of &amp;tags to download:</string> <string>Max. &amp;number of tags to download:</string>
</property> </property>
<property name="buddy"> <property name="buddy">
<cstring>opt_max_tags</cstring> <cstring>opt_max_tags</cstring>
</property> </property>
</widget> </widget>
</item> </item>
<item row="6" column="2"> <item row="8" column="2">
<widget class="QSpinBox" name="opt_max_tags"/>
</item>
<item row="7" column="2">
<widget class="QSpinBox" name="opt_wait_after_first_identify_result"> <widget class="QSpinBox" name="opt_wait_after_first_identify_result">
<property name="suffix"> <property name="suffix">
<string> secs</string> <string> secs</string>
</property> </property>
</widget> </widget>
</item> </item>
<item row="0" column="0" rowspan="9"> <item row="0" column="0" rowspan="10">
<widget class="QGroupBox" name="groupBox"> <widget class="QGroupBox" name="groupBox">
<property name="title"> <property name="title">
<string>Metadata sources</string> <string>Metadata sources</string>
@ -207,7 +216,7 @@
</layout> </layout>
</widget> </widget>
</item> </item>
<item row="5" column="1" colspan="2"> <item row="4" column="1">
<widget class="QCheckBox" name="opt_append_comments"> <widget class="QCheckBox" name="opt_append_comments">
<property name="toolTip"> <property name="toolTip">
<string>&lt;p&gt;When downloading comments, append the downloaded comments to any existing comment, instead of overwriting them.</string> <string>&lt;p&gt;When downloading comments, append the downloaded comments to any existing comment, instead of overwriting them.</string>
@ -220,6 +229,13 @@
</property> </property>
</widget> </widget>
</item> </item>
<item row="6" column="1" colspan="2">
<widget class="QPushButton" name="tag_map_rules_button">
<property name="text">
<string>Create &amp;rules to filter/transform tags</string>
</property>
</widget>
</item>
</layout> </layout>
</widget> </widget>
<widget class="QWidget" name="page_2"/> <widget class="QWidget" name="page_2"/>