diff --git a/resources/content_server/browse/browse.html b/resources/content_server/browse/browse.html
index cd556b87a4..8c6d310015 100644
--- a/resources/content_server/browse/browse.html
+++ b/resources/content_server/browse/browse.html
@@ -77,7 +77,7 @@
diff --git a/src/calibre/library/server/browse.py b/src/calibre/library/server/browse.py
index bd63325ecc..58fc52bcc8 100644
--- a/src/calibre/library/server/browse.py
+++ b/src/calibre/library/server/browse.py
@@ -18,7 +18,7 @@ from calibre.utils.filenames import ascii_filename
from calibre.utils.config import prefs
from calibre.library.comments import comments_to_html
-def render_book_list(ids):
+def render_book_list(ids): # {{{
pages = []
num = len(ids)
pos = 0
@@ -78,6 +78,8 @@ def render_book_list(ids):
return templ.format(_('Browsing %d books')%num, pages=rpages, navbar=navbar)
+# }}}
+
def utf8(x): # {{{
if isinstance(x, unicode):
x = x.encode('utf-8')
@@ -184,10 +186,10 @@ class BrowseServer(object):
base_href+'/booklist_page',
self.browse_booklist_page)
- connect('browse_search', base_href+'/search/{query}',
+ connect('browse_search', base_href+'/search',
self.browse_search)
- def browse_template(self, sort, category=True):
+ def browse_template(self, sort, category=True, initial_search=''):
def generate():
scn = 'calibre_browse_server_sort_'
@@ -222,6 +224,7 @@ class BrowseServer(object):
ans = ans.encode('utf-8')
ans = ans.replace('{library_name}', xml(os.path.basename(lp)))
ans = ans.replace('{library_path}', xml(lp, True))
+ ans = ans.replace('{initial_search}', initial_search)
return ans
if self.opts.develop:
@@ -495,8 +498,19 @@ class BrowseServer(object):
# }}}
# Search {{{
- def browse_search(self, query=None):
- raise NotImplementedError()
+ @Endpoint(sort_type='list')
+ def browse_search(self, query='', list_sort=None):
+ if isbytestring(query):
+ query = query.decode('UTF-8')
+ ids = self.db.search_getting_ids(query.strip(), self.search_restriction)
+ items = [self.db.data._data[x] for x in ids]
+ sort = self.browse_sort_book_list(items, list_sort)
+ ids = [x[0] for x in items]
+ html = render_book_list(ids)
+ return self.browse_template(sort, category=False, initial_search=query).format(
+ title=_('Matching books'),
+ script='booklist();', main=html)
+
# }}}