Allow creating rules to transform author names. Accessible via Preferences->Adding books->Adding actions. Fixes #1780152 [[enhancement] author alternate spellings](https://bugs.launchpad.net/calibre/+bug/1780152)

This commit is contained in:
Kovid Goyal 2018-07-18 14:11:11 +05:30
parent a460c1ffef
commit 848a7267d2
No known key found for this signature in database
GPG Key ID: 06BC317B515ACE7C
2 changed files with 20 additions and 0 deletions

View File

@ -20,6 +20,7 @@ from calibre.constants import DEBUG, iswindows, isosx, filesystem_encoding
from calibre.customize.ui import run_plugins_on_postimport, run_plugins_on_postadd
from calibre.db.adding import find_books_in_directory, compile_rule
from calibre.db.utils import find_identical_books
from calibre.ebooks.metadata import authors_to_sort_string
from calibre.ebooks.metadata.book.base import Metadata
from calibre.ebooks.metadata.opf2 import OPF
from calibre.gui2 import error_dialog, warning_dialog, gprefs
@ -64,6 +65,10 @@ class Adder(QObject):
if not validate_source(source, parent):
return
QObject.__init__(self, parent)
self.author_map_rules = None
if gprefs.get('author_map_on_add_rules'):
from calibre.ebooks.metadata.author_mapper import compile_rules as acr
self.author_map_rules = acr(gprefs['author_map_on_add_rules'])
self.single_book_per_directory = single_book_per_directory
self.ignore_opf = False
self.list_of_archives = list_of_archives
@ -331,6 +336,15 @@ class Adder(QObject):
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'])
if self.author_map_rules:
from calibre.ebooks.metadata.author_mapper import map_authors
new_authors = map_authors(mi.authors, self.author_map_rules)
if new_authors != mi.authors:
mi.authors = new_authors
if self.db is None:
mi.author_sort = authors_to_sort_string(mi.authors)
else:
mi.author_sort = self.db.author_sort_from_authors(mi.authors)
self.pd.msg = mi.title

View File

@ -254,6 +254,12 @@ class AutoAdder(QObject):
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'])
if gprefs.get('author_map_on_add_rules'):
from calibre.ebooks.metadata.author_mapper import map_authors, compile_rules
new_authors = map_authors(mi.authors, compile_rules(gprefs['author_map_on_add_rules']))
if new_authors != mi.authors:
mi.authors = new_authors
mi.author_sort = gui.current_db.new_api.author_sort_from_authors(mi.authors)
mi = [mi]
dups, ids = m.add_books(paths,
[os.path.splitext(fname)[1][1:].upper()], mi,