mirror of
https://github.com/kovidgoyal/calibre.git
synced 2025-07-09 03:04:10 -04:00
Implement tag mapper for metadata downloading as well
This commit is contained in:
parent
b63766fdc5
commit
c7ddf59cd2
@ -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
|
||||||
|
@ -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
|
||||||
|
@ -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__':
|
||||||
|
@ -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. &time to wait after first match is found:</string>
|
<string>Max. &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 &cover is found:</string>
|
<string>Max. time to wait after first &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><p>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><p>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 &tags to download:</string>
|
<string>Max. &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><p>When downloading comments, append the downloaded comments to any existing comment, instead of overwriting them.</string>
|
<string><p>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 &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"/>
|
||||||
|
Loading…
x
Reference in New Issue
Block a user