diff --git a/src/calibre/db/cache.py b/src/calibre/db/cache.py index a669b7017b..d3aea991ac 100644 --- a/src/calibre/db/cache.py +++ b/src/calibre/db/cache.py @@ -1170,7 +1170,7 @@ class Cache(object): self._update_last_modified(tuple(formats_map.iterkeys())) @read_api - def get_next_series_num_for(self, series, field='series'): + def get_next_series_num_for(self, series, field='series', current_indices=False): books = () sf = self.fields[field] if series: @@ -1180,6 +1180,8 @@ class Cache(object): books = book_ids break series_indices = sorted(self._field_for(sf.index_field.name, book_id) for book_id in books) + if current_indices: + return series_indices return _get_next_series_num_for_list(tuple(series_indices), unwrap=False) @read_api diff --git a/src/calibre/gui2/dialogs/metadata_bulk.py b/src/calibre/gui2/dialogs/metadata_bulk.py index 51845a3cf2..277e887a09 100644 --- a/src/calibre/gui2/dialogs/metadata_bulk.py +++ b/src/calibre/gui2/dialogs/metadata_bulk.py @@ -27,7 +27,7 @@ from calibre.utils.config import prefs, tweaks from calibre.utils.magick.draw import identify_data from calibre.utils.date import qt_to_dt from calibre.ptempfile import SpooledTemporaryFile -from calibre.db import SPOOL_SIZE +from calibre.db import SPOOL_SIZE, _get_next_series_num_for_list def get_cover_data(stream, ext): # {{{ from calibre.ebooks.metadata.meta import get_metadata @@ -237,8 +237,15 @@ class MyBlockingBusyNew(QDialog): if not args.series: cache.set_field('series_index', {bid:1.0 for bid in self.ids}) else: - sval = args.series_start_value if args.do_series_restart else cache.get_next_series_num_for(args.series) - smap = {bid:((sval + i) if args.do_autonumber else 1.0) for i, bid in enumerate(self.ids)} + sval = args.series_start_value if args.do_series_restart else list(cache.get_next_series_num_for(args.series, current_indices=True)) + def next_series_num(i): + if args.do_series_restart: + return sval + i + next_num = _get_next_series_num_for_list(sval, unwrap=False) + sval.append(next_num) + return next_num + + smap = {bid:next_series_num(i) for i, bid in enumerate(self.ids)} if args.do_autonumber or tweaks['series_index_auto_increment'] != 'no_change': cache.set_field('series_index', smap)