From 8241d78c16967ae5c2360a185a33fce36148533c Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Mon, 22 Jul 2013 11:57:48 +0530 Subject: [PATCH] Handle case of bulk series changing index of existing book --- src/calibre/db/cache.py | 6 ++++-- src/calibre/gui2/dialogs/metadata_bulk.py | 10 +++++----- 2 files changed, 9 insertions(+), 7 deletions(-) diff --git a/src/calibre/db/cache.py b/src/calibre/db/cache.py index e49c719a62..6cdb9419c6 100644 --- a/src/calibre/db/cache.py +++ b/src/calibre/db/cache.py @@ -1179,9 +1179,11 @@ class Cache(object): if q == icu_lower(val): books = book_ids break - series_indices = sorted(self._field_for(sf.index_field.name, book_id) for book_id in books) + idf = sf.index_field + index_map = {book_id:self._fast_field_for(idf, book_id, default_value=1.0) for book_id in books} if current_indices: - return series_indices + return index_map + series_indices = sorted(index_map.itervalues()) 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 72ec1440a1..c72f1533a5 100644 --- a/src/calibre/gui2/dialogs/metadata_bulk.py +++ b/src/calibre/gui2/dialogs/metadata_bulk.py @@ -233,19 +233,19 @@ class MyBlockingBusyNew(QDialog): # {{{ cache.set_field('timestamp', {bid:args.adddate for bid in self.ids}) if args.do_series: - sval = args.series_start_value if args.do_series_restart else list(cache.get_next_series_num_for(args.series, current_indices=True)) + sval = args.series_start_value if args.do_series_restart else cache.get_next_series_num_for(args.series, current_indices=True) cache.set_field('series', {bid:args.series for bid in self.ids}) if not args.series: cache.set_field('series_index', {bid:1.0 for bid in self.ids}) else: - def next_series_num(i): + def next_series_num(bid, i): if args.do_series_restart: return sval + i - next_num = _get_next_series_num_for_list(sval, unwrap=False) - sval.append(next_num) + next_num = _get_next_series_num_for_list(sorted(sval.itervalues()), unwrap=False) + sval[bid] = next_num return next_num - smap = {bid:next_series_num(i) for i, bid in enumerate(self.ids)} + smap = {bid:next_series_num(bid, i) for i, bid in enumerate(self.ids)} if args.do_autonumber: cache.set_field('series_index', smap) elif tweaks['series_index_auto_increment'] != 'no_change':