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:
|
else:
|
||||||
s_index = self.db.get_custom_extra(book_id, num=self.col_id,
|
s_index = self.db.get_custom_extra(book_id, num=self.col_id,
|
||||||
index_is_id=True)
|
index_is_id=True)
|
||||||
if s_index is None:
|
|
||||||
s_index = 1.0
|
|
||||||
extras.append(s_index)
|
extras.append(s_index)
|
||||||
self.db.set_custom_bulk(book_ids, val, extras=extras,
|
self.db.set_custom_bulk(book_ids, val, extras=extras,
|
||||||
num=self.col_id, notify=notify)
|
num=self.col_id, notify=notify)
|
||||||
|
@ -375,7 +375,7 @@ class MetadataBulkDialog(QDialog, Ui_MetadataBulkDialog):
|
|||||||
else:
|
else:
|
||||||
val = mi.get(field, None)
|
val = mi.get(field, None)
|
||||||
if val is None:
|
if val is None:
|
||||||
val = []
|
val = ['']
|
||||||
elif not fm['is_multiple']:
|
elif not fm['is_multiple']:
|
||||||
val = [val]
|
val = [val]
|
||||||
elif field == 'authors':
|
elif field == 'authors':
|
||||||
@ -547,11 +547,7 @@ class MetadataBulkDialog(QDialog, Ui_MetadataBulkDialog):
|
|||||||
if not dest:
|
if not dest:
|
||||||
dest = source
|
dest = source
|
||||||
dfm = self.db.field_metadata[dest]
|
dfm = self.db.field_metadata[dest]
|
||||||
|
|
||||||
mi = self.db.get_metadata(id, index_is_id=True,)
|
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_regexp(mi)
|
||||||
val = self.s_r_do_destination(mi, val)
|
val = self.s_r_do_destination(mi, val)
|
||||||
if dfm['is_multiple']:
|
if dfm['is_multiple']:
|
||||||
|
@ -725,9 +725,7 @@ class BooksModel(QAbstractTableModel): # {{{
|
|||||||
return False
|
return False
|
||||||
val = qt_to_dt(val, as_utc=False)
|
val = qt_to_dt(val, as_utc=False)
|
||||||
elif typ == 'series':
|
elif typ == 'series':
|
||||||
val, s_index = parse_series_string(self.db, label, value.toString())
|
val = unicode(value.toString()).strip()
|
||||||
if not val:
|
|
||||||
val = s_index = None
|
|
||||||
elif typ == 'composite':
|
elif typ == 'composite':
|
||||||
tmpl = unicode(value.toString()).strip()
|
tmpl = unicode(value.toString()).strip()
|
||||||
disp = cc['display']
|
disp = cc['display']
|
||||||
|
@ -445,6 +445,9 @@ class CustomColumns(object):
|
|||||||
index_is_id=True)
|
index_is_id=True)
|
||||||
val = self.custom_data_adapters[data['datatype']](val, data)
|
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['normalized']:
|
||||||
if data['datatype'] == 'enumeration' and (
|
if data['datatype'] == 'enumeration' and (
|
||||||
val and val not in data['display']['enum_values']):
|
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.execute('DELETE FROM tags WHERE id=?', (id,))
|
||||||
self.conn.commit()
|
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):
|
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 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 series:
|
||||||
if not isinstance(series, unicode):
|
if not isinstance(series, unicode):
|
||||||
series = series.decode(preferred_encoding, 'replace')
|
series = series.decode(preferred_encoding, 'replace')
|
||||||
@ -2147,6 +2165,8 @@ class LibraryDatabase2(LibraryDatabase, SchemaUpgrade, CustomColumns):
|
|||||||
else:
|
else:
|
||||||
aid = self.conn.execute('INSERT INTO series(name) VALUES (?)', (series,)).lastrowid
|
aid = self.conn.execute('INSERT INTO series(name) VALUES (?)', (series,)).lastrowid
|
||||||
self.conn.execute('INSERT INTO books_series_link(book, series) VALUES (?,?)', (id, aid))
|
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)
|
self.dirtied([id], commit=False)
|
||||||
if commit:
|
if commit:
|
||||||
self.conn.commit()
|
self.conn.commit()
|
||||||
|
Loading…
x
Reference in New Issue
Block a user