From cf644ac63ecfd70e3d12614b82b6fff551ba3ee4 Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Fri, 15 Oct 2010 22:05:51 -0600 Subject: [PATCH] ... --- resources/content_server/browse/browse.js | 16 +++- resources/content_server/browse/summary.html | 1 + src/calibre/library/server/browse.py | 93 ++++++++++++++------ 3 files changed, 79 insertions(+), 31 deletions(-) diff --git a/resources/content_server/browse/browse.js b/resources/content_server/browse/browse.js index 16753a38b9..367b8341d9 100644 --- a/resources/content_server/browse/browse.js +++ b/resources/content_server/browse/browse.js @@ -210,13 +210,25 @@ function booklist(hide_sort) { function show_details(a_dom) { var book = $(a_dom).closest('div.summary'); - var id = book.attr('id').split('_')[1]; var bd = $('#book_details_dialog'); bd.html('LoadingLoading, please wait…'); bd.dialog('option', 'width', $(window).width() - 100); bd.dialog('option', 'height', $(window).height() - 100); - bd.dialog('option', 'title', book.find('.title').text()); + + $.ajax({ + url: book.find('.details-href').attr('title'), + context: bd, + dataType: "json", + timeout: 600000, //milliseconds (10 minutes) + error: function(xhr, stat, err) { + this.html(render_error(stat)); + }, + success: function(data) { + this.html(data); + } + }); + bd.dialog('open'); } diff --git a/resources/content_server/browse/summary.html b/resources/content_server/browse/summary.html index 8df42de366..ba23ed854c 100644 --- a/resources/content_server/browse/summary.html +++ b/resources/content_server/browse/summary.html @@ -15,4 +15,5 @@
{tags}
{other_formats}
+ diff --git a/src/calibre/library/server/browse.py b/src/calibre/library/server/browse.py index 7d476ade3b..805a8f6424 100644 --- a/src/calibre/library/server/browse.py +++ b/src/calibre/library/server/browse.py @@ -187,9 +187,10 @@ class BrowseServer(object): connect('browse_booklist_page', base_href+'/booklist_page', self.browse_booklist_page) - connect('browse_search', base_href+'/search', self.browse_search) + connect('browse_details', base_href+'/details/{id}', + self.browse_details) # Templates {{{ def browse_template(self, sort, category=True, initial_search=''): @@ -447,6 +448,23 @@ class BrowseServer(object): title=_('Books in') + " " +category_name, script='booklist(%s);'%hide_sort, main=html) + def browse_get_book_args(self, mi, id_): + fmts = self.db.formats(id_, index_is_id=True) + if not fmts: + fmts = '' + fmts = [x.lower() for x in fmts.split(',') if x] + pf = prefs['output_format'].lower() + fmt = pf if pf in fmts else fmts[0] + args = {'id':id_, 'mi':mi, + } + for key in mi.all_field_keys(): + val = mi.format_field(key)[1] + if not val: + val = '' + args[key] = xml(val, True) + fname = ascii_filename(args['title']) + ' - ' + ascii_filename(args['authors']) + return args, fmt, fmts, fname + @Endpoint(mimetype='application/json; charset=utf-8') def browse_booklist_page(self, ids=None, sort=None): if sort == 'null': @@ -464,36 +482,9 @@ class BrowseServer(object): mi = self.db.get_metadata(id_, index_is_id=True) except: continue - fmts = self.db.formats(id_, index_is_id=True) - if not fmts: - fmts = '' - fmts = [x.lower() for x in fmts.split(',') if x] - pf = prefs['output_format'].lower() - fmt = pf if pf in fmts else fmts[0] - args = {'id':id_, 'mi':mi, - 'read_string':xml(_('Read'), True), - 'details': xml(_('Details'), True), - 'details_tt': xml(_('Show book details'), True) - } - for key in mi.all_field_keys(): - val = mi.format_field(key)[1] - if not val: - val = '' - args[key] = xml(val, True) - fname = ascii_filename(args['title']) + ' - ' + ascii_filename(args['authors']) - args['href'] = '/get/%s/%s_%d.%s'%( - fmt, fname, id_, fmt) - args['comments'] = comments_to_html(mi.comments) - args['read_tooltip'] = \ - _('Read %s in the %s format')%(args['title'], fmt.upper()) - args['stars'] = '' - if mi.rating: - args['stars'] = render_rating(mi.rating/2.0, prefix=_('Rating'))[0] - if args['tags']: - args['tags'] = u'%s: '%_('Tags') + args['tags'] + args, fmt, fmts, fname = self.browse_get_book_args(mi, id_) args['other_formats'] = '' other_fmts = [x for x in fmts if x.lower() != fmt.lower()] - if other_fmts: ofmts = [u'{3}'\ .format(fmt, fname, id_, fmt.upper()) for fmt in @@ -502,12 +493,56 @@ class BrowseServer(object): args['other_formats'] = u'%s: ' % \ _('Other formats') + ofmts + args['details_href'] = '/browse/details/'+str(id_) + args['read_tooltip'] = \ + _('Read %s in the %s format')%(args['title'], fmt.upper()) + args['href'] = '/get/%s/%s_%d.%s'%( + fmt, fname, id_, fmt) + args['comments'] = comments_to_html(mi.comments) + args['stars'] = '' + if mi.rating: + args['stars'] = render_rating(mi.rating/2.0, prefix=_('Rating'))[0] + if args['tags']: + args['tags'] = u'%s: '%_('Tags') + \ + xml(args['tags']) + if args['series']: + args['series'] = xml(args['series']) + args['read_string'] = xml(_('Read'), True) + args['details'] = xml(_('Details'), True) + args['details_tt'] = xml(_('Show book details'), True) summs.append(self.browse_summary_template.format(**args)) return json.dumps('\n'.join(summs), ensure_ascii=False) + @Endpoint(mimetype='application/json; charset=utf-8') + def browse_details(self, id=None): + try: + id_ = int(id) + except: + raise cherrypy.HTTPError(404, 'invalid id: %r'%id) + + try: + mi = self.db.get_metadata(id_, index_is_id=True) + except: + ans = _('This book has been deleted') + else: + args, fmt, fmts, fname = self.browse_get_book_args(mi, id_) + args['formats'] = '' + if fmts: + ofmts = [u'{3}'\ + .format(fmt, fname, id_, fmt.upper()) for fmt in + fmts] + ofmts = ', '.join(ofmts) + args['formats'] = u'%s: ' % \ + _('Formats') + ofmts + + + return json.dumps(ans, ensure_ascii=False) + + + # }}} # Search {{{