mirror of
https://github.com/kovidgoyal/calibre.git
synced 2025-07-09 03:04:10 -04:00
Trigger backup for all books when adding/modifying a custom column
Merge branch 'master' of https://github.com/cbhaley/calibre
This commit is contained in:
commit
4908ef7cad
@ -371,6 +371,8 @@ class DB(object):
|
||||
UPDATE authors SET sort=author_to_author_sort(name) WHERE sort IS NULL;
|
||||
''')
|
||||
|
||||
# Initialize_prefs must be called before initialize_custom_columns because
|
||||
# icc can set a pref.
|
||||
self.initialize_prefs(default_prefs, restore_all_prefs, progress_callback)
|
||||
self.initialize_custom_columns()
|
||||
self.initialize_tables()
|
||||
@ -425,6 +427,7 @@ class DB(object):
|
||||
defs['virtual_libraries'] = {}
|
||||
defs['virtual_lib_on_startup'] = defs['cs_virtual_lib_on_startup'] = ''
|
||||
defs['virt_libs_hidden'] = defs['virt_libs_order'] = ()
|
||||
defs['backup_all_metadata_on_start'] = 'no'
|
||||
|
||||
# Migrate the bool tristate tweak
|
||||
defs['bools_are_tristate'] = \
|
||||
@ -539,7 +542,7 @@ class DB(object):
|
||||
DROP TABLE IF EXISTS {lt};
|
||||
'''.format(table=table, lt=lt)
|
||||
)
|
||||
self.custom_columns_deleted = True
|
||||
self.prefs.set('backup_all_metadata_on_start', 'yes')
|
||||
self.conn.execute('DELETE FROM custom_columns WHERE mark_for_delete=1')
|
||||
|
||||
# Load metadata for custom columns
|
||||
@ -808,6 +811,7 @@ class DB(object):
|
||||
if display is not None:
|
||||
self.conn.execute('UPDATE custom_columns SET display=? WHERE id=?', (json.dumps(display), num))
|
||||
changed = True
|
||||
# Note: the caller is responsible for scheduling a metadata backup if necessary
|
||||
return changed
|
||||
|
||||
def create_custom_column(self, label, name, datatype, is_multiple, editable=True, display={}): # {{{
|
||||
@ -964,6 +968,7 @@ class DB(object):
|
||||
]
|
||||
script = ' \n'.join(lines)
|
||||
self.conn.execute(script)
|
||||
self.prefs.set('backup_all_metadata_on_start', 'yes')
|
||||
return num
|
||||
# }}}
|
||||
|
||||
|
@ -308,9 +308,9 @@ class Cache(object):
|
||||
field.author_sort_field = self.fields['author_sort']
|
||||
elif name == 'title':
|
||||
field.title_sort_field = self.fields['sort']
|
||||
if self.backend.custom_columns_deleted:
|
||||
if self.backend.prefs['backup_all_metadata_on_start'] == 'yes':
|
||||
self.mark_as_dirty(self.all_book_ids())
|
||||
self.backend.custom_columns_deleted = False
|
||||
self.backend.prefs.set('backup_all_metadata_on_start', 'no')
|
||||
|
||||
@read_api
|
||||
def field_for(self, name, book_id, default_value=None):
|
||||
@ -1604,8 +1604,15 @@ class Cache(object):
|
||||
self.backend.create_custom_column(label, name, datatype, is_multiple, editable=editable, display=display)
|
||||
|
||||
@write_api
|
||||
def set_custom_column_metadata(self, num, name=None, label=None, is_editable=None, display=None):
|
||||
return self.backend.set_custom_column_metadata(num, name=name, label=label, is_editable=is_editable, display=display)
|
||||
def set_custom_column_metadata(self, num, name=None, label=None, is_editable=None,
|
||||
display=None, immediate_backup=False):
|
||||
changed = self.backend.set_custom_column_metadata(num, name=name, label=label, is_editable=is_editable, display=display)
|
||||
if changed:
|
||||
if immediate_backup:
|
||||
self.mark_as_dirty(self._all_book_ids())
|
||||
else:
|
||||
self.backend.prefs.set('backup_all_metadata_on_start', 'yes')
|
||||
return changed
|
||||
|
||||
@read_api
|
||||
def get_books_for_category(self, category, item_id_or_composite_value):
|
||||
|
@ -684,8 +684,10 @@ class LibraryDatabase(object):
|
||||
def create_custom_column(self, label, name, datatype, is_multiple, editable=True, display={}):
|
||||
self.new_api.create_custom_column(label, name, datatype, is_multiple, editable=editable, display=display)
|
||||
|
||||
def set_custom_column_metadata(self, num, name=None, label=None, is_editable=None, display=None, notify=True):
|
||||
changed = self.new_api.set_custom_column_metadata(num, name=name, label=label, is_editable=is_editable, display=display)
|
||||
def set_custom_column_metadata(self, num, name=None, label=None, is_editable=None, display=None,
|
||||
notify=True, immediate_backup=False):
|
||||
changed = self.new_api.set_custom_column_metadata(num, name=name, label=label, is_editable=is_editable,
|
||||
display=display, immediate_backup=immediate_backup)
|
||||
if changed and notify:
|
||||
self.notify('metadata', [])
|
||||
|
||||
|
@ -939,7 +939,8 @@ class BooksModel(QAbstractTableModel): # {{{
|
||||
tmpl = unicode(value.toString()).strip()
|
||||
disp = cc['display']
|
||||
disp['composite_template'] = tmpl
|
||||
self.db.set_custom_column_metadata(cc['colnum'], display=disp)
|
||||
self.db.set_custom_column_metadata(cc['colnum'], display=disp,
|
||||
immediate_backup=True)
|
||||
self.refresh(reset=True)
|
||||
return True
|
||||
|
||||
|
@ -29,7 +29,6 @@ class CustomColumns(object):
|
||||
'SELECT name FROM sqlite_master WHERE type="table" AND '
|
||||
'(name GLOB "custom_column_*" OR name GLOB "books_custom_column_*")')])
|
||||
|
||||
|
||||
def __init__(self):
|
||||
# Verify that CUSTOM_DATA_TYPES is a (possibly improper) subset of
|
||||
# VALID_DATA_TYPES
|
||||
@ -378,7 +377,7 @@ class CustomColumns(object):
|
||||
self.conn.commit()
|
||||
|
||||
def set_custom_column_metadata(self, num, name=None, label=None,
|
||||
is_editable=None, display=None, notify=True):
|
||||
is_editable=None, display=None, notify=True, immediate_backup=False):
|
||||
changed = False
|
||||
if name is not None:
|
||||
self.conn.execute('UPDATE custom_columns SET name=? WHERE id=?',
|
||||
|
Loading…
x
Reference in New Issue
Block a user