mirror of
https://github.com/kovidgoyal/calibre.git
synced 2025-07-09 03:04:10 -04:00
#7964: Allow setting the series index in bulk metadata search&replace
This commit is contained in:
parent
0e0f992934
commit
3d3bc6e8d7
@ -587,8 +587,6 @@ class BulkSeries(BulkBase):
|
||||
else:
|
||||
s_index = self.db.get_custom_extra(book_id, num=self.col_id,
|
||||
index_is_id=True)
|
||||
if s_index is None:
|
||||
s_index = 1.0
|
||||
extras.append(s_index)
|
||||
self.db.set_custom_bulk(book_ids, val, extras=extras,
|
||||
num=self.col_id, notify=notify)
|
||||
|
@ -375,7 +375,7 @@ class MetadataBulkDialog(QDialog, Ui_MetadataBulkDialog):
|
||||
else:
|
||||
val = mi.get(field, None)
|
||||
if val is None:
|
||||
val = []
|
||||
val = ['']
|
||||
elif not fm['is_multiple']:
|
||||
val = [val]
|
||||
elif field == 'authors':
|
||||
@ -547,11 +547,7 @@ class MetadataBulkDialog(QDialog, Ui_MetadataBulkDialog):
|
||||
if not dest:
|
||||
dest = source
|
||||
dfm = self.db.field_metadata[dest]
|
||||
|
||||
mi = self.db.get_metadata(id, index_is_id=True,)
|
||||
val = mi.get(source)
|
||||
if val is None:
|
||||
return
|
||||
val = self.s_r_do_regexp(mi)
|
||||
val = self.s_r_do_destination(mi, val)
|
||||
if dfm['is_multiple']:
|
||||
|
@ -725,9 +725,7 @@ class BooksModel(QAbstractTableModel): # {{{
|
||||
return False
|
||||
val = qt_to_dt(val, as_utc=False)
|
||||
elif typ == 'series':
|
||||
val, s_index = parse_series_string(self.db, label, value.toString())
|
||||
if not val:
|
||||
val = s_index = None
|
||||
val = unicode(value.toString()).strip()
|
||||
elif typ == 'composite':
|
||||
tmpl = unicode(value.toString()).strip()
|
||||
disp = cc['display']
|
||||
|
@ -445,6 +445,9 @@ class CustomColumns(object):
|
||||
index_is_id=True)
|
||||
val = self.custom_data_adapters[data['datatype']](val, data)
|
||||
|
||||
if data['datatype'] == 'series' and extra is None:
|
||||
(val, extra) = self._get_series_values(val)
|
||||
|
||||
if data['normalized']:
|
||||
if data['datatype'] == 'enumeration' and (
|
||||
val and val not in data['display']['enum_values']):
|
||||
|
@ -2133,9 +2133,27 @@ class LibraryDatabase2(LibraryDatabase, SchemaUpgrade, CustomColumns):
|
||||
self.conn.execute('DELETE FROM tags WHERE id=?', (id,))
|
||||
self.conn.commit()
|
||||
|
||||
series_index_pat = re.compile(r'(.*)\[([.0-9]+)\]')
|
||||
|
||||
def _get_series_values(self, val):
|
||||
if not val:
|
||||
return (val, None)
|
||||
match = self.series_index_pat.match(val)
|
||||
if match is not None:
|
||||
idx = match.group(2)
|
||||
try:
|
||||
idx = float(idx)
|
||||
return (match.group(1).strip(), idx)
|
||||
except:
|
||||
pass
|
||||
return (val, None)
|
||||
|
||||
def set_series(self, id, series, notify=True, commit=True):
|
||||
self.conn.execute('DELETE FROM books_series_link WHERE book=?',(id,))
|
||||
self.conn.execute('DELETE FROM series WHERE (SELECT COUNT(id) FROM books_series_link WHERE series=series.id) < 1')
|
||||
self.conn.execute('''DELETE FROM series
|
||||
WHERE (SELECT COUNT(id) FROM books_series_link
|
||||
WHERE series=series.id) < 1''')
|
||||
(series, idx) = self._get_series_values(series)
|
||||
if series:
|
||||
if not isinstance(series, unicode):
|
||||
series = series.decode(preferred_encoding, 'replace')
|
||||
@ -2147,6 +2165,8 @@ class LibraryDatabase2(LibraryDatabase, SchemaUpgrade, CustomColumns):
|
||||
else:
|
||||
aid = self.conn.execute('INSERT INTO series(name) VALUES (?)', (series,)).lastrowid
|
||||
self.conn.execute('INSERT INTO books_series_link(book, series) VALUES (?,?)', (id, aid))
|
||||
if idx:
|
||||
self.set_series_index(id, idx, notify=notify, commit=commit)
|
||||
self.dirtied([id], commit=False)
|
||||
if commit:
|
||||
self.conn.commit()
|
||||
|
Loading…
x
Reference in New Issue
Block a user