/browse: Add an 'All book' top level category and Fix #7209 (New content server observations regarding restricted items)

This commit is contained in:
Kovid Goyal 2010-10-18 13:38:08 -06:00
parent ff0562b9d8
commit 15b4bf7f8b
2 changed files with 22 additions and 7 deletions

View File

@ -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:

View File

@ -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':