Content server: Fix errors when library contains enough virtual libraries to cause grouping. Fixes #1446282 [virtual libraries fail on web access](https://bugs.launchpad.net/calibre/+bug/1446282)

This commit is contained in:
Kovid Goyal 2015-04-21 08:52:59 +05:30
parent 6121c05446
commit 2be2fb844d

View File

@ -507,7 +507,7 @@ class BrowseServer(object):
items = get_category_items(category, items, items = get_category_items(category, items,
datatype, self.opts.url_prefix) datatype, self.opts.url_prefix)
else: else:
getter = lambda x: unicode(getattr(x, 'sort', x.name)) getter = lambda x: unicode(getattr(x, 'sort', None) or x.name)
starts = set([]) starts = set([])
for x in items: for x in items:
val = getter(x) val = getter(x)
@ -571,7 +571,10 @@ class BrowseServer(object):
raise cherrypy.HTTPError(404, 'category not found') raise cherrypy.HTTPError(404, 'category not found')
category_meta = self.db.field_metadata category_meta = self.db.field_metadata
datatype = category_meta[category]['datatype'] try:
datatype = category_meta[category]['datatype']
except KeyError:
datatype = 'text'
try: try:
group = unhexlify(group) group = unhexlify(group)
@ -582,7 +585,7 @@ class BrowseServer(object):
items = categories[category] items = categories[category]
entries = [] entries = []
getter = lambda x: unicode(getattr(x, 'sort', x.name)) getter = lambda x: unicode(getattr(x, 'sort', None) or x.name)
for x in items: for x in items:
val = getter(x) val = getter(x)
if not val: if not val:
@ -870,7 +873,7 @@ class BrowseServer(object):
continue continue
if m['datatype'] == 'comments' or field == 'comments' or ( if m['datatype'] == 'comments' or field == 'comments' or (
m['datatype'] == 'composite' and m['datatype'] == 'composite' and
m['display'].get('contains_html', False)): m['display'].get('contains_html', False)):
val = mi.get(field, '') val = mi.get(field, '')
if val and val.strip(): if val and val.strip():
comments.append((m['name'], comments_to_html(val))) comments.append((m['name'], comments_to_html(val)))