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' %
(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']
for r in results:
if tm_rules:
r.tags = map_tags(r.tags, tm_rules)
r.tags = r.tags[:max_tags]
if getattr(r.pubdate, 'year', 2000) <= UNDEFINED_DATE.year:
r.pubdate = None

View File

@ -19,6 +19,7 @@ msprefs.defaults['swap_author_names'] = False
msprefs.defaults['fewer_tags'] = True
msprefs.defaults['find_first_edition_date'] = False
msprefs.defaults['append_comments'] = False
msprefs.defaults['tag_map_rules'] = []
# Google covers are often poor quality (scans/errors) but they have high
# 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.changed_signal)
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):
for index in self.sources_view.selectionModel().selectedRows():
@ -343,11 +345,21 @@ class ConfigWidget(ConfigWidgetBase, Ui_Form):
self.stack.removeWidget(self.pc)
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):
ConfigWidgetBase.initialize(self)
self.sources_model.initialize()
self.sources_view.resizeColumnsToContents()
self.fields_model.initialize()
self.tag_map_rules = None
def restore_defaults(self):
ConfigWidgetBase.restore_defaults(self)
@ -358,6 +370,11 @@ class ConfigWidget(ConfigWidgetBase, Ui_Form):
def commit(self):
self.sources_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)
if __name__ == '__main__':

View File

@ -14,7 +14,16 @@
<string>Form</string>
</property>
<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>
</property>
<item>
@ -28,7 +37,7 @@
</property>
</widget>
</item>
<item row="7" column="1">
<item row="8" column="1">
<widget class="QLabel" name="label_3">
<property name="text">
<string>Max. &amp;time to wait after first match is found:</string>
@ -38,7 +47,7 @@
</property>
</widget>
</item>
<item row="8" column="1">
<item row="9" column="1">
<widget class="QLabel" name="label_4">
<property name="text">
<string>Max. time to wait after first &amp;cover is found:</string>
@ -48,14 +57,14 @@
</property>
</widget>
</item>
<item row="8" column="2">
<item row="9" column="2">
<widget class="QSpinBox" name="opt_wait_after_first_cover_result">
<property name="suffix">
<string> secs</string>
</property>
</widget>
</item>
<item row="4" column="1" colspan="2">
<item row="5" column="1" colspan="2">
<widget class="QCheckBox" name="opt_fewer_tags">
<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.
@ -69,6 +78,13 @@
</property>
</widget>
</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">
<widget class="QGroupBox" name="groupBox_2">
<property name="title">
@ -129,34 +145,27 @@
</property>
</widget>
</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 row="7" column="2">
<widget class="QSpinBox" name="opt_max_tags"/>
</item>
<item row="6" column="1">
<item row="7" column="1">
<widget class="QLabel" name="label_2">
<property name="text">
<string>Max. number of &amp;tags to download:</string>
<string>Max. &amp;number of tags to download:</string>
</property>
<property name="buddy">
<cstring>opt_max_tags</cstring>
</property>
</widget>
</item>
<item row="6" column="2">
<widget class="QSpinBox" name="opt_max_tags"/>
</item>
<item row="7" column="2">
<item row="8" column="2">
<widget class="QSpinBox" name="opt_wait_after_first_identify_result">
<property name="suffix">
<string> secs</string>
</property>
</widget>
</item>
<item row="0" column="0" rowspan="9">
<item row="0" column="0" rowspan="10">
<widget class="QGroupBox" name="groupBox">
<property name="title">
<string>Metadata sources</string>
@ -207,7 +216,7 @@
</layout>
</widget>
</item>
<item row="5" column="1" colspan="2">
<item row="4" column="1">
<widget class="QCheckBox" name="opt_append_comments">
<property name="toolTip">
<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>
</widget>
</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>
</widget>
<widget class="QWidget" name="page_2"/>