mirror of
https://github.com/kovidgoyal/calibre.git
synced 2025-07-09 03:04:10 -04:00
Added cross_reference_authors switch to CLI and GUI
This commit is contained in:
parent
5cdbd831af
commit
119c169c07
@ -239,10 +239,11 @@ class PluginWidget(QWidget,Ui_Form):
|
|||||||
|
|
||||||
def initialize(self, name, db):
|
def initialize(self, name, db):
|
||||||
'''
|
'''
|
||||||
|
|
||||||
CheckBoxControls (c_type: check_box):
|
CheckBoxControls (c_type: check_box):
|
||||||
['generate_titles','generate_series','generate_genres',
|
['cross_reference_authors',
|
||||||
'generate_recently_added','generate_descriptions','include_hr']
|
'generate_titles','generate_series','generate_genres',
|
||||||
|
'generate_recently_added','generate_descriptions',
|
||||||
|
'include_hr']
|
||||||
ComboBoxControls (c_type: combo_box):
|
ComboBoxControls (c_type: combo_box):
|
||||||
['exclude_source_field','header_note_source_field',
|
['exclude_source_field','header_note_source_field',
|
||||||
'merge_source_field']
|
'merge_source_field']
|
||||||
|
@ -305,7 +305,7 @@ The default pattern \[.+\]|\+ excludes tags of the form [tag], e.g., [Test book]
|
|||||||
<string>Other options</string>
|
<string>Other options</string>
|
||||||
</property>
|
</property>
|
||||||
<layout class="QGridLayout" name="gridLayout_3">
|
<layout class="QGridLayout" name="gridLayout_3">
|
||||||
<item row="2" column="1">
|
<item row="3" column="1">
|
||||||
<layout class="QHBoxLayout" name="merge_with_comments_hl">
|
<layout class="QHBoxLayout" name="merge_with_comments_hl">
|
||||||
<item>
|
<item>
|
||||||
<widget class="QComboBox" name="merge_source_field">
|
<widget class="QComboBox" name="merge_source_field">
|
||||||
@ -372,7 +372,7 @@ The default pattern \[.+\]|\+ excludes tags of the form [tag], e.g., [Test book]
|
|||||||
</item>
|
</item>
|
||||||
</layout>
|
</layout>
|
||||||
</item>
|
</item>
|
||||||
<item row="2" column="0">
|
<item row="3" column="0">
|
||||||
<widget class="QLabel" name="label_9">
|
<widget class="QLabel" name="label_9">
|
||||||
<property name="minimumSize">
|
<property name="minimumSize">
|
||||||
<size>
|
<size>
|
||||||
@ -397,7 +397,7 @@ The default pattern \[.+\]|\+ excludes tags of the form [tag], e.g., [Test book]
|
|||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item row="0" column="0">
|
<item row="1" column="0">
|
||||||
<widget class="QLabel" name="label_4">
|
<widget class="QLabel" name="label_4">
|
||||||
<property name="minimumSize">
|
<property name="minimumSize">
|
||||||
<size>
|
<size>
|
||||||
@ -413,7 +413,7 @@ The default pattern \[.+\]|\+ excludes tags of the form [tag], e.g., [Test book]
|
|||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item row="0" column="1">
|
<item row="1" column="1">
|
||||||
<layout class="QHBoxLayout" name="replace_cover_hl">
|
<layout class="QHBoxLayout" name="replace_cover_hl">
|
||||||
<item>
|
<item>
|
||||||
<widget class="QRadioButton" name="generate_new_cover">
|
<widget class="QRadioButton" name="generate_new_cover">
|
||||||
@ -447,7 +447,7 @@ The default pattern \[.+\]|\+ excludes tags of the form [tag], e.g., [Test book]
|
|||||||
</item>
|
</item>
|
||||||
</layout>
|
</layout>
|
||||||
</item>
|
</item>
|
||||||
<item row="1" column="0">
|
<item row="2" column="0">
|
||||||
<widget class="QLabel" name="label_3">
|
<widget class="QLabel" name="label_3">
|
||||||
<property name="text">
|
<property name="text">
|
||||||
<string>E&xtra Description note:</string>
|
<string>E&xtra Description note:</string>
|
||||||
@ -460,7 +460,7 @@ The default pattern \[.+\]|\+ excludes tags of the form [tag], e.g., [Test book]
|
|||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item row="1" column="1">
|
<item row="2" column="1">
|
||||||
<layout class="QHBoxLayout" name="horizontalLayout">
|
<layout class="QHBoxLayout" name="horizontalLayout">
|
||||||
<item>
|
<item>
|
||||||
<widget class="QComboBox" name="header_note_source_field">
|
<widget class="QComboBox" name="header_note_source_field">
|
||||||
@ -561,6 +561,27 @@ The default pattern \[.+\]|\+ excludes tags of the form [tag], e.g., [Test book]
|
|||||||
</item>
|
</item>
|
||||||
</layout>
|
</layout>
|
||||||
</item>
|
</item>
|
||||||
|
<item row="0" column="0">
|
||||||
|
<widget class="QLabel" name="label_2">
|
||||||
|
<property name="text">
|
||||||
|
<string>Author cross-references:</string>
|
||||||
|
</property>
|
||||||
|
<property name="alignment">
|
||||||
|
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="0" column="1">
|
||||||
|
<layout class="QHBoxLayout" name="cross_references_hl">
|
||||||
|
<item>
|
||||||
|
<widget class="QCheckBox" name="cross_reference_authors">
|
||||||
|
<property name="text">
|
||||||
|
<string>For books with multiple authors, list each author separately</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</item>
|
||||||
</layout>
|
</layout>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
|
@ -41,6 +41,13 @@ class EPUB_MOBI(CatalogPlugin):
|
|||||||
help = _('Title of generated catalog used as title in metadata.\n'
|
help = _('Title of generated catalog used as title in metadata.\n'
|
||||||
"Default: '%default'\n"
|
"Default: '%default'\n"
|
||||||
"Applies to: AZW3, ePub, MOBI output formats")),
|
"Applies to: AZW3, ePub, MOBI output formats")),
|
||||||
|
Option('--cross-reference-authors',
|
||||||
|
default=False,
|
||||||
|
dest='cross_reference_authors',
|
||||||
|
action = 'store_true',
|
||||||
|
help=_("Create cross-references in Authors section for books with multiple authors.\n"
|
||||||
|
"Default: '%default'\n"
|
||||||
|
"Applies to: AZW3, ePub, MOBI output formats")),
|
||||||
Option('--debug-pipeline',
|
Option('--debug-pipeline',
|
||||||
default=None,
|
default=None,
|
||||||
dest='debug_pipeline',
|
dest='debug_pipeline',
|
||||||
@ -58,7 +65,6 @@ class EPUB_MOBI(CatalogPlugin):
|
|||||||
help=_("Regex describing tags to exclude as genres.\n"
|
help=_("Regex describing tags to exclude as genres.\n"
|
||||||
"Default: '%default' excludes bracketed tags, e.g. '[Project Gutenberg]', and '+', the default tag for read books.\n"
|
"Default: '%default' excludes bracketed tags, e.g. '[Project Gutenberg]', and '+', the default tag for read books.\n"
|
||||||
"Applies to: AZW3, ePub, MOBI output formats")),
|
"Applies to: AZW3, ePub, MOBI output formats")),
|
||||||
|
|
||||||
Option('--exclusion-rules',
|
Option('--exclusion-rules',
|
||||||
default="(('Catalogs','Tags','Catalog'),)",
|
default="(('Catalogs','Tags','Catalog'),)",
|
||||||
dest='exclusion_rules',
|
dest='exclusion_rules',
|
||||||
@ -72,7 +78,6 @@ class EPUB_MOBI(CatalogPlugin):
|
|||||||
"When multiple rules are defined, all rules will be applied.\n"
|
"When multiple rules are defined, all rules will be applied.\n"
|
||||||
"Default: \n" + '"' + '%default' + '"' + "\n"
|
"Default: \n" + '"' + '%default' + '"' + "\n"
|
||||||
"Applies to AZW3, ePub, MOBI output formats")),
|
"Applies to AZW3, ePub, MOBI output formats")),
|
||||||
|
|
||||||
Option('--generate-authors',
|
Option('--generate-authors',
|
||||||
default=False,
|
default=False,
|
||||||
dest='generate_authors',
|
dest='generate_authors',
|
||||||
@ -318,8 +323,8 @@ class EPUB_MOBI(CatalogPlugin):
|
|||||||
build_log.append(" opts:")
|
build_log.append(" opts:")
|
||||||
for key in keys:
|
for key in keys:
|
||||||
if key in ['catalog_title','author_clip','connected_kindle','creator',
|
if key in ['catalog_title','author_clip','connected_kindle','creator',
|
||||||
'description_clip','exclude_book_marker','exclude_genre',
|
'cross_reference_authors','description_clip','exclude_book_marker',
|
||||||
'exclude_tags','exclusion_rules', 'fmt',
|
'exclude_genre','exclude_tags','exclusion_rules', 'fmt',
|
||||||
'header_note_source_field','merge_comments_rule',
|
'header_note_source_field','merge_comments_rule',
|
||||||
'output_profile','prefix_rules','read_book_marker',
|
'output_profile','prefix_rules','read_book_marker',
|
||||||
'search_text','sort_by','sort_descriptions_by_author','sync',
|
'search_text','sort_by','sort_descriptions_by_author','sync',
|
||||||
|
@ -727,7 +727,8 @@ class CatalogBuilder(object):
|
|||||||
|
|
||||||
books_by_author = list(self.books_to_catalog)
|
books_by_author = list(self.books_to_catalog)
|
||||||
self.detect_author_sort_mismatches(books_by_author)
|
self.detect_author_sort_mismatches(books_by_author)
|
||||||
books_by_author = self.relist_multiple_authors(books_by_author)
|
if self.opts.cross_reference_authors:
|
||||||
|
books_by_author = self.relist_multiple_authors(books_by_author)
|
||||||
|
|
||||||
#books_by_author = sorted(list(books_by_author), key=self._kf_books_by_author_sorter_author)
|
#books_by_author = sorted(list(books_by_author), key=self._kf_books_by_author_sorter_author)
|
||||||
|
|
||||||
@ -4720,17 +4721,10 @@ class CatalogBuilder(object):
|
|||||||
with multiple authors
|
with multiple authors
|
||||||
|
|
||||||
Return:
|
Return:
|
||||||
(list): books_by_author with additional entries for books with
|
(list): books_by_author with additional cloned entries for books with
|
||||||
multiple authors
|
multiple authors
|
||||||
"""
|
"""
|
||||||
|
|
||||||
# Scan list looking for entries with len(authors) > 1
|
|
||||||
# Clone multiples, swapping additional author into first place,
|
|
||||||
# computing author_sort to match
|
|
||||||
|
|
||||||
# from calibre.ebooks.metadata import authors_to_string
|
|
||||||
# return authors_to_string(self.authors)
|
|
||||||
|
|
||||||
multiple_author_books = []
|
multiple_author_books = []
|
||||||
|
|
||||||
# Find the multiple author books
|
# Find the multiple author books
|
||||||
@ -4749,7 +4743,6 @@ class CatalogBuilder(object):
|
|||||||
new_book['authors'] = list(cloned_authors)
|
new_book['authors'] = list(cloned_authors)
|
||||||
asl = [author_to_author_sort(auth) for auth in cloned_authors]
|
asl = [author_to_author_sort(auth) for auth in cloned_authors]
|
||||||
new_book['author_sort'] = ' & '.join(asl)
|
new_book['author_sort'] = ' & '.join(asl)
|
||||||
#print("'%s' (%s) (%s)" % (new_book['title'], new_book['authors'], new_book['author_sort']))
|
|
||||||
books_by_author.append(new_book)
|
books_by_author.append(new_book)
|
||||||
|
|
||||||
return books_by_author
|
return books_by_author
|
||||||
|
Loading…
x
Reference in New Issue
Block a user