mirror of
https://github.com/kovidgoyal/calibre.git
synced 2025-07-09 03:04:10 -04:00
/browse: Add an 'All book' top level category and Fix #7209 (New content server observations regarding restricted items)
This commit is contained in:
parent
ff0562b9d8
commit
15b4bf7f8b
@ -148,6 +148,7 @@ class LibraryServer(ContentServer, MobileServer, XMLServer, OPDSServer, Cache,
|
|||||||
cherrypy.engine.graceful()
|
cherrypy.engine.graceful()
|
||||||
|
|
||||||
def set_search_restriction(self, restriction):
|
def set_search_restriction(self, restriction):
|
||||||
|
self.search_restriction_name = restriction
|
||||||
if restriction:
|
if restriction:
|
||||||
self.search_restriction = 'search:"%s"'%restriction
|
self.search_restriction = 'search:"%s"'%restriction
|
||||||
else:
|
else:
|
||||||
|
@ -116,7 +116,10 @@ def render_rating(rating, container='span', prefix=None): # {{{
|
|||||||
|
|
||||||
# }}}
|
# }}}
|
||||||
|
|
||||||
def get_category_items(category, items, db, datatype): # {{{
|
def get_category_items(category, items, restriction, datatype): # {{{
|
||||||
|
|
||||||
|
if category == 'search':
|
||||||
|
items = [x for x in items if x.name != restriction]
|
||||||
|
|
||||||
def item(i):
|
def item(i):
|
||||||
templ = (u'<div title="{4}" class="category-item">'
|
templ = (u'<div title="{4}" class="category-item">'
|
||||||
@ -299,6 +302,7 @@ class BrowseServer(object):
|
|||||||
category_meta = self.db.field_metadata
|
category_meta = self.db.field_metadata
|
||||||
cats = [
|
cats = [
|
||||||
(_('Newest'), 'newest', 'forward.png'),
|
(_('Newest'), 'newest', 'forward.png'),
|
||||||
|
(_('All books'), 'allbooks', 'book.png'),
|
||||||
]
|
]
|
||||||
|
|
||||||
def getter(x):
|
def getter(x):
|
||||||
@ -370,7 +374,8 @@ class BrowseServer(object):
|
|||||||
|
|
||||||
if len(items) <= self.opts.max_opds_ungrouped_items:
|
if len(items) <= self.opts.max_opds_ungrouped_items:
|
||||||
script = 'false'
|
script = 'false'
|
||||||
items = get_category_items(category, items, self.db, datatype)
|
items = get_category_items(category, items,
|
||||||
|
self.search_restriction_name, datatype)
|
||||||
else:
|
else:
|
||||||
getter = lambda x: unicode(getattr(x, 'sort', x.name))
|
getter = lambda x: unicode(getattr(x, 'sort', x.name))
|
||||||
starts = set([])
|
starts = set([])
|
||||||
@ -440,7 +445,8 @@ class BrowseServer(object):
|
|||||||
entries.append(x)
|
entries.append(x)
|
||||||
|
|
||||||
sort = self.browse_sort_categories(entries, sort)
|
sort = self.browse_sort_categories(entries, sort)
|
||||||
entries = get_category_items(category, entries, self.db, datatype)
|
entries = get_category_items(category, entries,
|
||||||
|
self.search_restriction_name, datatype)
|
||||||
return json.dumps(entries, ensure_ascii=False)
|
return json.dumps(entries, ensure_ascii=False)
|
||||||
|
|
||||||
|
|
||||||
@ -451,6 +457,8 @@ class BrowseServer(object):
|
|||||||
ans = self.browse_toplevel()
|
ans = self.browse_toplevel()
|
||||||
elif category == 'newest':
|
elif category == 'newest':
|
||||||
raise cherrypy.InternalRedirect('/browse/matches/newest/dummy')
|
raise cherrypy.InternalRedirect('/browse/matches/newest/dummy')
|
||||||
|
elif category == 'allbooks':
|
||||||
|
raise cherrypy.InternalRedirect('/browse/matches/allbooks/dummy')
|
||||||
else:
|
else:
|
||||||
ans = self.browse_category(category, category_sort)
|
ans = self.browse_category(category, category_sort)
|
||||||
|
|
||||||
@ -478,16 +486,20 @@ class BrowseServer(object):
|
|||||||
raise cherrypy.HTTPError(404, 'invalid category id: %r'%cid)
|
raise cherrypy.HTTPError(404, 'invalid category id: %r'%cid)
|
||||||
categories = self.categories_cache()
|
categories = self.categories_cache()
|
||||||
|
|
||||||
if category not in categories and category != 'newest':
|
if category not in categories and \
|
||||||
|
category not in ('newest', 'allbooks'):
|
||||||
raise cherrypy.HTTPError(404, 'category not found')
|
raise cherrypy.HTTPError(404, 'category not found')
|
||||||
fm = self.db.field_metadata
|
fm = self.db.field_metadata
|
||||||
try:
|
try:
|
||||||
category_name = fm[category]['name']
|
category_name = fm[category]['name']
|
||||||
dt = fm[category]['datatype']
|
dt = fm[category]['datatype']
|
||||||
except:
|
except:
|
||||||
if category != 'newest':
|
if category not in ('newest', 'allbooks'):
|
||||||
raise
|
raise
|
||||||
category_name = _('Newest')
|
category_name = {
|
||||||
|
'newest' : _('Newest'),
|
||||||
|
'allbooks' : _('All books'),
|
||||||
|
}[category]
|
||||||
dt = None
|
dt = None
|
||||||
|
|
||||||
hide_sort = 'true' if dt == 'series' else 'false'
|
hide_sort = 'true' if dt == 'series' else 'false'
|
||||||
@ -498,8 +510,10 @@ class BrowseServer(object):
|
|||||||
except:
|
except:
|
||||||
raise cherrypy.HTTPError(404, 'Search: %r not understood'%which)
|
raise cherrypy.HTTPError(404, 'Search: %r not understood'%which)
|
||||||
elif category == 'newest':
|
elif category == 'newest':
|
||||||
ids = list(self.db.data.iterallids())
|
ids = self.search_cache('')
|
||||||
hide_sort = 'true'
|
hide_sort = 'true'
|
||||||
|
elif category == 'allbooks':
|
||||||
|
ids = self.search_cache('')
|
||||||
else:
|
else:
|
||||||
q = category
|
q = category
|
||||||
if q == 'news':
|
if q == 'news':
|
||||||
|
Loading…
x
Reference in New Issue
Block a user