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;
|
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_prefs(default_prefs, restore_all_prefs, progress_callback)
|
||||||
self.initialize_custom_columns()
|
self.initialize_custom_columns()
|
||||||
self.initialize_tables()
|
self.initialize_tables()
|
||||||
@ -425,6 +427,7 @@ class DB(object):
|
|||||||
defs['virtual_libraries'] = {}
|
defs['virtual_libraries'] = {}
|
||||||
defs['virtual_lib_on_startup'] = defs['cs_virtual_lib_on_startup'] = ''
|
defs['virtual_lib_on_startup'] = defs['cs_virtual_lib_on_startup'] = ''
|
||||||
defs['virt_libs_hidden'] = defs['virt_libs_order'] = ()
|
defs['virt_libs_hidden'] = defs['virt_libs_order'] = ()
|
||||||
|
defs['backup_all_metadata_on_start'] = 'no'
|
||||||
|
|
||||||
# Migrate the bool tristate tweak
|
# Migrate the bool tristate tweak
|
||||||
defs['bools_are_tristate'] = \
|
defs['bools_are_tristate'] = \
|
||||||
@ -539,7 +542,7 @@ class DB(object):
|
|||||||
DROP TABLE IF EXISTS {lt};
|
DROP TABLE IF EXISTS {lt};
|
||||||
'''.format(table=table, lt=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')
|
self.conn.execute('DELETE FROM custom_columns WHERE mark_for_delete=1')
|
||||||
|
|
||||||
# Load metadata for custom columns
|
# Load metadata for custom columns
|
||||||
@ -808,6 +811,7 @@ class DB(object):
|
|||||||
if display is not None:
|
if display is not None:
|
||||||
self.conn.execute('UPDATE custom_columns SET display=? WHERE id=?', (json.dumps(display), num))
|
self.conn.execute('UPDATE custom_columns SET display=? WHERE id=?', (json.dumps(display), num))
|
||||||
changed = True
|
changed = True
|
||||||
|
# Note: the caller is responsible for scheduling a metadata backup if necessary
|
||||||
return changed
|
return changed
|
||||||
|
|
||||||
def create_custom_column(self, label, name, datatype, is_multiple, editable=True, display={}): # {{{
|
def create_custom_column(self, label, name, datatype, is_multiple, editable=True, display={}): # {{{
|
||||||
@ -964,6 +968,7 @@ class DB(object):
|
|||||||
]
|
]
|
||||||
script = ' \n'.join(lines)
|
script = ' \n'.join(lines)
|
||||||
self.conn.execute(script)
|
self.conn.execute(script)
|
||||||
|
self.prefs.set('backup_all_metadata_on_start', 'yes')
|
||||||
return num
|
return num
|
||||||
# }}}
|
# }}}
|
||||||
|
|
||||||
|
@ -308,9 +308,9 @@ class Cache(object):
|
|||||||
field.author_sort_field = self.fields['author_sort']
|
field.author_sort_field = self.fields['author_sort']
|
||||||
elif name == 'title':
|
elif name == 'title':
|
||||||
field.title_sort_field = self.fields['sort']
|
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.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
|
@read_api
|
||||||
def field_for(self, name, book_id, default_value=None):
|
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)
|
self.backend.create_custom_column(label, name, datatype, is_multiple, editable=editable, display=display)
|
||||||
|
|
||||||
@write_api
|
@write_api
|
||||||
def set_custom_column_metadata(self, num, name=None, label=None, is_editable=None, display=None):
|
def set_custom_column_metadata(self, num, name=None, label=None, is_editable=None,
|
||||||
return self.backend.set_custom_column_metadata(num, name=name, label=label, is_editable=is_editable, display=display)
|
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
|
@read_api
|
||||||
def get_books_for_category(self, category, item_id_or_composite_value):
|
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={}):
|
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)
|
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):
|
def set_custom_column_metadata(self, num, name=None, label=None, is_editable=None, display=None,
|
||||||
changed = self.new_api.set_custom_column_metadata(num, name=name, label=label, is_editable=is_editable, display=display)
|
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:
|
if changed and notify:
|
||||||
self.notify('metadata', [])
|
self.notify('metadata', [])
|
||||||
|
|
||||||
|
@ -939,7 +939,8 @@ class BooksModel(QAbstractTableModel): # {{{
|
|||||||
tmpl = unicode(value.toString()).strip()
|
tmpl = unicode(value.toString()).strip()
|
||||||
disp = cc['display']
|
disp = cc['display']
|
||||||
disp['composite_template'] = tmpl
|
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)
|
self.refresh(reset=True)
|
||||||
return True
|
return True
|
||||||
|
|
||||||
|
@ -29,7 +29,6 @@ class CustomColumns(object):
|
|||||||
'SELECT name FROM sqlite_master WHERE type="table" AND '
|
'SELECT name FROM sqlite_master WHERE type="table" AND '
|
||||||
'(name GLOB "custom_column_*" OR name GLOB "books_custom_column_*")')])
|
'(name GLOB "custom_column_*" OR name GLOB "books_custom_column_*")')])
|
||||||
|
|
||||||
|
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
# Verify that CUSTOM_DATA_TYPES is a (possibly improper) subset of
|
# Verify that CUSTOM_DATA_TYPES is a (possibly improper) subset of
|
||||||
# VALID_DATA_TYPES
|
# VALID_DATA_TYPES
|
||||||
@ -378,7 +377,7 @@ class CustomColumns(object):
|
|||||||
self.conn.commit()
|
self.conn.commit()
|
||||||
|
|
||||||
def set_custom_column_metadata(self, num, name=None, label=None,
|
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
|
changed = False
|
||||||
if name is not None:
|
if name is not None:
|
||||||
self.conn.execute('UPDATE custom_columns SET name=? WHERE id=?',
|
self.conn.execute('UPDATE custom_columns SET name=? WHERE id=?',
|
||||||
|
Loading…
x
Reference in New Issue
Block a user