From 586aa592459ea7c3279166393218ceb24463a649 Mon Sep 17 00:00:00 2001 From: Charles Haley <> Date: Tue, 26 Jul 2011 13:53:45 +0100 Subject: [PATCH] Fix 815573: Series number Tweak will not accept constant value --- resources/default_tweaks.py | 14 +++++++++++++- src/calibre/ebooks/metadata/opf2.py | 8 +++++++- src/calibre/library/database2.py | 13 ++++++++----- 3 files changed, 28 insertions(+), 7 deletions(-) diff --git a/resources/default_tweaks.py b/resources/default_tweaks.py index 3e2cc4da57..65cb030f96 100644 --- a/resources/default_tweaks.py +++ b/resources/default_tweaks.py @@ -11,7 +11,7 @@ defaults. ''' #: Auto increment series index -# The algorithm used to assign a new book in an existing series a series number. +# The algorithm used to assign a book added to an existing series a series number. # New series numbers assigned using this tweak are always integer values, except # if a constant non-integer is specified. # Possible values are: @@ -27,7 +27,19 @@ defaults. # series_index_auto_increment = 'next' # series_index_auto_increment = 'next_free' # series_index_auto_increment = 16.5 +# +# Set the use_series_auto_increment_tweak_when_importing tweak to True to +# use the above values when importing/adding books. If this tweak is set to +# False (the default) then the series number will be set to 1 if it is not +# explicitly set to something else during the import. If set to True, then the +# series index will be set according to the series_index_auto_increment setting. +# Note that the use_series_auto_increment_tweak_when_importing tweak is used +# only when a value is not provided during import. If the importing regular +# expression produces a value for series_index, or if you are reading metadata +# from books and the import plugin produces a value, than that value will +# be used irrespective of the setting of the tweak. series_index_auto_increment = 'next' +use_series_auto_increment_tweak_when_importing = False #: Add separator after completing an author name # Should the completion separator be append diff --git a/src/calibre/ebooks/metadata/opf2.py b/src/calibre/ebooks/metadata/opf2.py index 186821b0c3..7ad741848e 100644 --- a/src/calibre/ebooks/metadata/opf2.py +++ b/src/calibre/ebooks/metadata/opf2.py @@ -22,6 +22,7 @@ from calibre.utils.date import parse_date, isoformat from calibre.utils.localization import get_lang from calibre import prints, guess_type from calibre.utils.cleantext import clean_ascii_chars +from calibre.utils.config import tweaks class Resource(object): # {{{ ''' @@ -527,7 +528,12 @@ class OPF(object): # {{{ category = MetadataField('type') rights = MetadataField('rights') series = MetadataField('series', is_dc=False) - series_index = MetadataField('series_index', is_dc=False, formatter=float, none_is=1) + if tweaks['use_series_auto_increment_tweak_when_importing']: + series_index = MetadataField('series_index', is_dc=False, + formatter=float, none_is=None) + else: + series_index = MetadataField('series_index', is_dc=False, + formatter=float, none_is=1) title_sort = TitleSortField('title_sort', is_dc=False) rating = MetadataField('rating', is_dc=False, formatter=int) pubdate = MetadataField('date', formatter=parse_date, diff --git a/src/calibre/library/database2.py b/src/calibre/library/database2.py index 8d16ffbc52..9ae8f0569b 100644 --- a/src/calibre/library/database2.py +++ b/src/calibre/library/database2.py @@ -3023,8 +3023,8 @@ class LibraryDatabase2(LibraryDatabase, SchemaUpgrade, CustomColumns): stream.seek(0) mi = get_metadata(stream, format, use_libprs_metadata=False) stream.seek(0) - if not mi.series_index: - mi.series_index = 1.0 + if mi.series_index is None: + mi.series_index = self.get_next_series_num_for(mi.series) mi.tags = [_('News')] if arg['add_title_tag']: mi.tags += [arg['title']] @@ -3076,7 +3076,8 @@ class LibraryDatabase2(LibraryDatabase, SchemaUpgrade, CustomColumns): self._add_newbook_tag(mi) if not add_duplicates and self.has_book(mi): return None - series_index = 1.0 if mi.series_index is None else mi.series_index + series_index = self.get_next_series_num_for(mi.series) \ + if mi.series_index is None else mi.series_index aus = mi.author_sort if mi.author_sort else self.author_sort_from_authors(mi.authors) title = mi.title if isbytestring(aus): @@ -3123,7 +3124,8 @@ class LibraryDatabase2(LibraryDatabase, SchemaUpgrade, CustomColumns): if not add_duplicates and self.has_book(mi): duplicates.append((path, format, mi)) continue - series_index = 1.0 if mi.series_index is None else mi.series_index + series_index = self.get_next_series_num_for(mi.series) \ + if mi.series_index is None else mi.series_index aus = mi.author_sort if mi.author_sort else self.author_sort_from_authors(mi.authors) title = mi.title if isinstance(aus, str): @@ -3157,7 +3159,8 @@ class LibraryDatabase2(LibraryDatabase, SchemaUpgrade, CustomColumns): def import_book(self, mi, formats, notify=True, import_hooks=True, apply_import_tags=True, preserve_uuid=False): - series_index = 1.0 if mi.series_index is None else mi.series_index + series_index = self.get_next_series_num_for(mi.series) \ + if mi.series_index is None else mi.series_index if apply_import_tags: self._add_newbook_tag(mi) if not mi.title: