mirror of
https://github.com/kovidgoyal/calibre.git
synced 2025-07-09 03:04:10 -04:00
Tag mapper for adding books from the GUI
This commit is contained in:
parent
28dcce5418
commit
b63766fdc5
@ -298,6 +298,9 @@ class Adder(QObject):
|
||||
break
|
||||
if mi.application_id == '__calibre_dummy__':
|
||||
mi.application_id = None
|
||||
if gprefs.get('tag_map_on_add_rules'):
|
||||
from calibre.ebooks.metadata.tag_mapper import map_tags
|
||||
mi.tags = map_tags(mi.tags, gprefs['tag_map_on_add_rules'])
|
||||
|
||||
self.pd.msg = mi.title
|
||||
|
||||
|
@ -62,15 +62,15 @@ class Worker(Thread):
|
||||
|
||||
files = [x for x in os.listdir(self.path) if
|
||||
# Must not be in the process of being added to the db
|
||||
x not in self.staging
|
||||
x not in self.staging and
|
||||
# Firefox creates 0 byte placeholder files when downloading
|
||||
and os.stat(os.path.join(self.path, x)).st_size > 0
|
||||
os.stat(os.path.join(self.path, x)).st_size > 0 and
|
||||
# Must be a file
|
||||
and os.path.isfile(os.path.join(self.path, x))
|
||||
os.path.isfile(os.path.join(self.path, x)) and
|
||||
# Must have read and write permissions
|
||||
and os.access(os.path.join(self.path, x), os.R_OK|os.W_OK)
|
||||
os.access(os.path.join(self.path, x), os.R_OK|os.W_OK) and
|
||||
# Must be a known ebook file type
|
||||
and os.path.splitext(x)[1][1:].lower() in self.allowed
|
||||
os.path.splitext(x)[1][1:].lower() in self.allowed
|
||||
]
|
||||
data = {}
|
||||
# Give any in progress copies time to complete
|
||||
@ -201,8 +201,11 @@ class AutoAdder(QObject):
|
||||
mi = os.path.join(tdir, 'metadata.opf')
|
||||
if not os.access(mi, os.R_OK):
|
||||
continue
|
||||
mi = [OPF(open(mi, 'rb'), tdir,
|
||||
populate_spine=False).to_book_metadata()]
|
||||
mi = OPF(open(mi, 'rb'), tdir, populate_spine=False).to_book_metadata()
|
||||
if gprefs.get('tag_map_on_add_rules'):
|
||||
from calibre.ebooks.metadata.tag_mapper import map_tags
|
||||
mi.tags = map_tags(mi.tags, gprefs['tag_map_on_add_rules'])
|
||||
mi = [mi]
|
||||
dups, ids = m.add_books(paths,
|
||||
[os.path.splitext(fname)[1][1:].upper()], mi,
|
||||
add_duplicates=not gprefs['auto_add_check_for_duplicates'],
|
||||
@ -268,4 +271,3 @@ class AutoAdder(QObject):
|
||||
def do_auto_convert(self, added_ids):
|
||||
gui = self.parent()
|
||||
gui.iactions['Convert Books'].auto_convert_auto_add(added_ids)
|
||||
|
||||
|
@ -50,6 +50,17 @@ class ConfigWidget(ConfigWidgetBase, Ui_Form):
|
||||
for signal in ('Activated', 'Changed', 'DoubleClicked', 'Clicked'):
|
||||
signal = getattr(self.opt_blocked_auto_formats, 'item'+signal)
|
||||
signal.connect(self.blocked_auto_formats_changed)
|
||||
self.tag_map_rules = None
|
||||
self.tag_map_rules_button.clicked.connect(self.change_tag_map_rules)
|
||||
|
||||
def change_tag_map_rules(self):
|
||||
from calibre.gui2.tag_mapper import RulesDialog
|
||||
d = RulesDialog(self)
|
||||
if gprefs.get('tag_map_on_add_rules'):
|
||||
d.rules = gprefs['tag_map_on_add_rules']
|
||||
if d.exec_() == d.Accepted:
|
||||
self.tag_map_rules = d.rules
|
||||
self.changed_signal.emit()
|
||||
|
||||
def choose_aa_path(self):
|
||||
path = choose_dir(self, 'auto add path choose',
|
||||
@ -64,6 +75,7 @@ class ConfigWidget(ConfigWidgetBase, Ui_Form):
|
||||
self.filename_pattern.blockSignals(False)
|
||||
self.init_blocked_auto_formats()
|
||||
self.opt_automerge.setEnabled(self.opt_add_formats_to_existing.isChecked())
|
||||
self.tag_map_rules = None
|
||||
|
||||
# Blocked auto formats {{{
|
||||
def blocked_auto_formats_changed(self, *args):
|
||||
@ -133,6 +145,11 @@ class ConfigWidget(ConfigWidgetBase, Ui_Form):
|
||||
changed = set(fmts) != set(old)
|
||||
if changed:
|
||||
gprefs['blocked_auto_formats'] = self.current_blocked_auto_formats
|
||||
if self.tag_map_rules is not None:
|
||||
if self.tag_map_rules:
|
||||
gprefs['tag_map_on_add_rules'] = self.tag_map_rules
|
||||
else:
|
||||
gprefs.pop('tag_map_on_add_rules', None)
|
||||
ret = ConfigWidgetBase.commit(self)
|
||||
return changed or ret
|
||||
|
||||
|
@ -68,7 +68,7 @@
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="8" column="0" colspan="3">
|
||||
<item row="9" column="0" colspan="3">
|
||||
<widget class="QGroupBox" name="metadata_box">
|
||||
<property name="title">
|
||||
<string>&Configure metadata from file name</string>
|
||||
@ -175,6 +175,16 @@ Title match ignores leading indefinite articles ("the", "a",
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="8" column="0">
|
||||
<widget class="QPushButton" name="tag_map_rules_button">
|
||||
<property name="toolTip">
|
||||
<string>Create rules that can filter or transform tags on added books automatically as soon as they are added. </string>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Create &rules to filter/transform tags</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
<widget class="QWidget" name="tab_4">
|
||||
|
@ -336,6 +336,10 @@ class RulesDialog(Dialog):
|
||||
self.edit_widget.rules = rules
|
||||
|
||||
def save_ruleset(self):
|
||||
if not self.rules:
|
||||
error_dialog(self, _('No rules'), _(
|
||||
'Cannot save as no rules have been created'), show=True)
|
||||
return
|
||||
text, ok = QInputDialog.getText(self, _('Save ruleset as'), _(
|
||||
'Enter a name for this ruleset:'), text=self.loaded_ruleset or '')
|
||||
if ok and text:
|
||||
|
Loading…
x
Reference in New Issue
Block a user