mirror of
https://github.com/kovidgoyal/calibre.git
synced 2025-07-09 03:04:10 -04:00
Handle case of bulk series changing index of existing book
This commit is contained in:
parent
6423745c0c
commit
8241d78c16
@ -1179,9 +1179,11 @@ class Cache(object):
|
|||||||
if q == icu_lower(val):
|
if q == icu_lower(val):
|
||||||
books = book_ids
|
books = book_ids
|
||||||
break
|
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:
|
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)
|
return _get_next_series_num_for_list(tuple(series_indices), unwrap=False)
|
||||||
|
|
||||||
@read_api
|
@read_api
|
||||||
|
@ -233,19 +233,19 @@ class MyBlockingBusyNew(QDialog): # {{{
|
|||||||
cache.set_field('timestamp', {bid:args.adddate for bid in self.ids})
|
cache.set_field('timestamp', {bid:args.adddate for bid in self.ids})
|
||||||
|
|
||||||
if args.do_series:
|
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})
|
cache.set_field('series', {bid:args.series for bid in self.ids})
|
||||||
if not args.series:
|
if not args.series:
|
||||||
cache.set_field('series_index', {bid:1.0 for bid in self.ids})
|
cache.set_field('series_index', {bid:1.0 for bid in self.ids})
|
||||||
else:
|
else:
|
||||||
def next_series_num(i):
|
def next_series_num(bid, i):
|
||||||
if args.do_series_restart:
|
if args.do_series_restart:
|
||||||
return sval + i
|
return sval + i
|
||||||
next_num = _get_next_series_num_for_list(sval, unwrap=False)
|
next_num = _get_next_series_num_for_list(sorted(sval.itervalues()), unwrap=False)
|
||||||
sval.append(next_num)
|
sval[bid] = next_num
|
||||||
return 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:
|
if args.do_autonumber:
|
||||||
cache.set_field('series_index', smap)
|
cache.set_field('series_index', smap)
|
||||||
elif tweaks['series_index_auto_increment'] != 'no_change':
|
elif tweaks['series_index_auto_increment'] != 'no_change':
|
||||||
|
Loading…
x
Reference in New Issue
Block a user