mirror of
https://github.com/kovidgoyal/calibre.git
synced 2025-07-09 03:04:10 -04:00
Make the list of displayed fields in the book details panel a per library setting
This commit is contained in:
parent
6d77380b1d
commit
32a52b9e05
@ -81,6 +81,9 @@ class DBPrefs(dict): # {{{
|
||||
def to_raw(self, val):
|
||||
return json.dumps(val, indent=2, default=to_json)
|
||||
|
||||
def has_setting(self, key):
|
||||
return key in self
|
||||
|
||||
def __getitem__(self, key):
|
||||
try:
|
||||
return dict.__getitem__(self, key)
|
||||
@ -102,6 +105,53 @@ class DBPrefs(dict): # {{{
|
||||
def set(self, key, val):
|
||||
self.__setitem__(key, val)
|
||||
|
||||
def get_namespaced(self, namespace, key, default=None):
|
||||
key = u'namespaced:%s:%s'%(namespace, key)
|
||||
try:
|
||||
return dict.__getitem__(self, key)
|
||||
except KeyError:
|
||||
return default
|
||||
|
||||
def set_namespaced(self, namespace, key, val):
|
||||
if u':' in key: raise KeyError('Colons are not allowed in keys')
|
||||
if u':' in namespace: raise KeyError('Colons are not allowed in'
|
||||
' the namespace')
|
||||
key = u'namespaced:%s:%s'%(namespace, key)
|
||||
self[key] = val
|
||||
|
||||
def write_serialized(self, library_path):
|
||||
try:
|
||||
to_filename = os.path.join(library_path, 'metadata_db_prefs_backup.json')
|
||||
with open(to_filename, "wb") as f:
|
||||
f.write(json.dumps(self, indent=2, default=to_json))
|
||||
except:
|
||||
import traceback
|
||||
traceback.print_exc()
|
||||
|
||||
@classmethod
|
||||
def read_serialized(cls, library_path, recreate_prefs=False):
|
||||
try:
|
||||
from_filename = os.path.join(library_path,
|
||||
'metadata_db_prefs_backup.json')
|
||||
with open(from_filename, "rb") as f:
|
||||
d = json.load(f, object_hook=from_json)
|
||||
if not recreate_prefs:
|
||||
return d
|
||||
cls.clear()
|
||||
cls.db.conn.execute('DELETE FROM preferences')
|
||||
for k,v in d.iteritems():
|
||||
raw = cls.to_raw(v)
|
||||
cls.db.conn.execute(
|
||||
'INSERT INTO preferences (key,val) VALUES (?,?)', (k, raw))
|
||||
cls.db.conn.commit()
|
||||
cls.clear()
|
||||
cls.update(d)
|
||||
return d
|
||||
except:
|
||||
import traceback
|
||||
traceback.print_exc()
|
||||
raise
|
||||
return None
|
||||
# }}}
|
||||
|
||||
# Extra collators {{{
|
||||
@ -350,6 +400,23 @@ class DB(object):
|
||||
defs['gui_restriction'] = defs['cs_restriction'] = ''
|
||||
defs['categories_using_hierarchy'] = []
|
||||
defs['column_color_rules'] = []
|
||||
defs['grouped_search_make_user_categories'] = []
|
||||
defs['similar_authors_search_key'] = 'authors'
|
||||
defs['similar_authors_match_kind'] = 'match_any'
|
||||
defs['similar_publisher_search_key'] = 'publisher'
|
||||
defs['similar_publisher_match_kind'] = 'match_any'
|
||||
defs['similar_tags_search_key'] = 'tags'
|
||||
defs['similar_tags_match_kind'] = 'match_all'
|
||||
defs['similar_series_search_key'] = 'series'
|
||||
defs['similar_series_match_kind'] = 'match_any'
|
||||
defs['book_display_fields'] = [
|
||||
('title', False), ('authors', True), ('formats', True),
|
||||
('series', True), ('identifiers', True), ('tags', True),
|
||||
('path', True), ('publisher', False), ('rating', False),
|
||||
('author_sort', False), ('sort', False), ('timestamp', False),
|
||||
('uuid', False), ('comments', True), ('id', False), ('pubdate', False),
|
||||
('last_modified', False), ('size', False), ('languages', False),
|
||||
]
|
||||
|
||||
# Migrate the bool tristate tweak
|
||||
defs['bools_are_tristate'] = \
|
||||
|
@ -89,14 +89,6 @@ gprefs.defaults['tags_browser_partition_method'] = 'first letter'
|
||||
gprefs.defaults['tags_browser_collapse_at'] = 100
|
||||
gprefs.defaults['tag_browser_dont_collapse'] = []
|
||||
gprefs.defaults['edit_metadata_single_layout'] = 'default'
|
||||
gprefs.defaults['book_display_fields'] = [
|
||||
('title', False), ('authors', True), ('formats', True),
|
||||
('series', True), ('identifiers', True), ('tags', True),
|
||||
('path', True), ('publisher', False), ('rating', False),
|
||||
('author_sort', False), ('sort', False), ('timestamp', False),
|
||||
('uuid', False), ('comments', True), ('id', False), ('pubdate', False),
|
||||
('last_modified', False), ('size', False), ('languages', False),
|
||||
]
|
||||
gprefs.defaults['default_author_link'] = 'http://en.wikipedia.org/w/index.php?search={author}'
|
||||
gprefs.defaults['preserve_date_on_ctl'] = True
|
||||
gprefs.defaults['cb_fullscreen'] = False
|
||||
|
@ -84,7 +84,17 @@ def render_html(mi, css, vertical, widget, all_fields=False): # {{{
|
||||
return ans
|
||||
|
||||
def get_field_list(fm, use_defaults=False):
|
||||
src = gprefs.defaults if use_defaults else gprefs
|
||||
from calibre.gui2.ui import get_gui
|
||||
db = get_gui().current_db
|
||||
if use_defaults:
|
||||
src = db.prefs.defaults
|
||||
else:
|
||||
old_val = gprefs.get('book_display_fields', None)
|
||||
if old_val is not None and not db.prefs.has_setting(
|
||||
'book_display_fields'):
|
||||
src = gprefs
|
||||
else:
|
||||
src = db.prefs
|
||||
fieldlist = list(src['book_display_fields'])
|
||||
names = frozenset([x[0] for x in fieldlist])
|
||||
for field in fm.displayable_field_keys():
|
||||
|
@ -75,7 +75,7 @@ class DisplayedFields(QAbstractListModel): # {{{
|
||||
|
||||
def commit(self):
|
||||
if self.changed:
|
||||
gprefs['book_display_fields'] = self.fields
|
||||
self.db.prefs['book_display_fields'] = self.fields
|
||||
|
||||
def move(self, idx, delta):
|
||||
row = idx.row() + delta
|
||||
|
@ -251,6 +251,14 @@ class LibraryDatabase2(LibraryDatabase, SchemaUpgrade, CustomColumns):
|
||||
defs['similar_tags_match_kind'] = 'match_all'
|
||||
defs['similar_series_search_key'] = 'series'
|
||||
defs['similar_series_match_kind'] = 'match_any'
|
||||
defs['book_display_fields'] = [
|
||||
('title', False), ('authors', True), ('formats', True),
|
||||
('series', True), ('identifiers', True), ('tags', True),
|
||||
('path', True), ('publisher', False), ('rating', False),
|
||||
('author_sort', False), ('sort', False), ('timestamp', False),
|
||||
('uuid', False), ('comments', True), ('id', False), ('pubdate', False),
|
||||
('last_modified', False), ('size', False), ('languages', False),
|
||||
]
|
||||
|
||||
# Migrate the bool tristate tweak
|
||||
defs['bools_are_tristate'] = \
|
||||
|
@ -34,6 +34,9 @@ class DBPrefs(dict):
|
||||
def to_raw(self, val):
|
||||
return json.dumps(val, indent=2, default=to_json)
|
||||
|
||||
def has_setting(self, key):
|
||||
return key in self
|
||||
|
||||
def __getitem__(self, key):
|
||||
try:
|
||||
return dict.__getitem__(self, key)
|
||||
|
Loading…
x
Reference in New Issue
Block a user