From 15b4bf7f8b598c4921cc151aea3f74f9248f06b4 Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Mon, 18 Oct 2010 13:38:08 -0600 Subject: [PATCH] /browse: Add an 'All book' top level category and Fix #7209 (New content server observations regarding restricted items) --- src/calibre/library/server/base.py | 1 + src/calibre/library/server/browse.py | 28 +++++++++++++++++++++------- 2 files changed, 22 insertions(+), 7 deletions(-) diff --git a/src/calibre/library/server/base.py b/src/calibre/library/server/base.py index 84e748a949..3a081fc427 100644 --- a/src/calibre/library/server/base.py +++ b/src/calibre/library/server/base.py @@ -148,6 +148,7 @@ class LibraryServer(ContentServer, MobileServer, XMLServer, OPDSServer, Cache, cherrypy.engine.graceful() def set_search_restriction(self, restriction): + self.search_restriction_name = restriction if restriction: self.search_restriction = 'search:"%s"'%restriction else: diff --git a/src/calibre/library/server/browse.py b/src/calibre/library/server/browse.py index ea69ad77ef..ea86de4c1b 100644 --- a/src/calibre/library/server/browse.py +++ b/src/calibre/library/server/browse.py @@ -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): templ = (u'
' @@ -299,6 +302,7 @@ class BrowseServer(object): category_meta = self.db.field_metadata cats = [ (_('Newest'), 'newest', 'forward.png'), + (_('All books'), 'allbooks', 'book.png'), ] def getter(x): @@ -370,7 +374,8 @@ class BrowseServer(object): if len(items) <= self.opts.max_opds_ungrouped_items: script = 'false' - items = get_category_items(category, items, self.db, datatype) + items = get_category_items(category, items, + self.search_restriction_name, datatype) else: getter = lambda x: unicode(getattr(x, 'sort', x.name)) starts = set([]) @@ -440,7 +445,8 @@ class BrowseServer(object): entries.append(x) 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) @@ -451,6 +457,8 @@ class BrowseServer(object): ans = self.browse_toplevel() elif category == 'newest': raise cherrypy.InternalRedirect('/browse/matches/newest/dummy') + elif category == 'allbooks': + raise cherrypy.InternalRedirect('/browse/matches/allbooks/dummy') else: ans = self.browse_category(category, category_sort) @@ -478,16 +486,20 @@ class BrowseServer(object): raise cherrypy.HTTPError(404, 'invalid category id: %r'%cid) 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') fm = self.db.field_metadata try: category_name = fm[category]['name'] dt = fm[category]['datatype'] except: - if category != 'newest': + if category not in ('newest', 'allbooks'): raise - category_name = _('Newest') + category_name = { + 'newest' : _('Newest'), + 'allbooks' : _('All books'), + }[category] dt = None hide_sort = 'true' if dt == 'series' else 'false' @@ -498,8 +510,10 @@ class BrowseServer(object): except: raise cherrypy.HTTPError(404, 'Search: %r not understood'%which) elif category == 'newest': - ids = list(self.db.data.iterallids()) + ids = self.search_cache('') hide_sort = 'true' + elif category == 'allbooks': + ids = self.search_cache('') else: q = category if q == 'news':