131 lines
4.2 KiB
Python
131 lines
4.2 KiB
Python
#!/usr/bin/env python
|
|
# -*- mode: python; indent-tabs-mode: nil; -*- coding: utf-8 -*-
|
|
|
|
"""
|
|
BibrecPage.py
|
|
|
|
Copyright 2009-2010 by Marcello Perathoner
|
|
|
|
Distributable under the GNU General Public License Version 3 or newer.
|
|
|
|
The bibrec page.
|
|
|
|
"""
|
|
|
|
from __future__ import unicode_literals
|
|
|
|
import cherrypy
|
|
|
|
from libgutenberg import GutenbergGlobals as gg
|
|
|
|
import BaseSearcher
|
|
import Page
|
|
|
|
|
|
class BibrecPage (Page.Page):
|
|
""" Implements the bibrec page. """
|
|
|
|
def index (self, **dummy_kwargs):
|
|
""" A bibrec page. """
|
|
|
|
os = BaseSearcher.OpenSearch ()
|
|
|
|
os.log_request ('bibrec')
|
|
|
|
dc = BaseSearcher.DC (cherrypy.engine.pool)
|
|
|
|
# the bulk of the work is done here
|
|
dc.load_from_database (os.id)
|
|
if not dc.files:
|
|
# NOTE: Error message
|
|
raise cherrypy.HTTPError (404, _('No ebook by that number.'))
|
|
|
|
# add these fields so we won't have to test for their existence later
|
|
dc.extra_info = None
|
|
dc.url = None
|
|
|
|
dc.translate ()
|
|
dc.header = gg.cut_at_newline (dc.title)
|
|
os.title = dc.make_pretty_title ()
|
|
dc.extra_info = ''
|
|
dc.class_ = BaseSearcher.ClassAttr ()
|
|
dc.order = 10
|
|
dc.icon = 'book'
|
|
if 'Sound' in dc.categories:
|
|
dc.icon = 'audiobook'
|
|
os.title_icon = dc.icon
|
|
os.twit = os.title
|
|
os.qrcode_url = '//%s/cache/epub/%d/pg%d.qrcode.png' % (os.file_host, os.id, os.id)
|
|
|
|
os.entries.append (dc)
|
|
|
|
s = cherrypy.session
|
|
last_visited = s.get ('last_visited', [])
|
|
last_visited.append (os.id)
|
|
s['last_visited'] = last_visited
|
|
|
|
# can we find some meaningful breadcrumbs ?
|
|
for a in dc.authors:
|
|
if a.marcrel in ('aut', 'cre'):
|
|
book_cnt = BaseSearcher.sql_get (
|
|
"select count (*) from mn_books_authors where fk_authors = %(aid)s", aid = a.id)
|
|
if book_cnt > 1:
|
|
os.breadcrumbs.append ((
|
|
__('One by {author}', '{count} by {author}', book_cnt).format (
|
|
count = book_cnt, author = dc.make_pretty_name (a.name)),
|
|
_('Find more ebooks by the same author.'),
|
|
os.url ('author', id = a.id)
|
|
))
|
|
|
|
|
|
if os.format in ('html', 'mobile'):
|
|
cat = BaseSearcher.Cat ()
|
|
cat.header = _('Similar Books')
|
|
cat.title = _('Readers also downloaded…')
|
|
cat.rel = 'related'
|
|
cat.url = os.url ('also', id = os.id)
|
|
cat.class_ += 'navlink grayed noprint'
|
|
cat.icon = 'suggestion'
|
|
cat.order = 30
|
|
os.entries.append (cat)
|
|
|
|
for bookshelf in dc.bookshelves:
|
|
cat = BaseSearcher.Cat ()
|
|
cat.title = _('In {bookshelf}').format (bookshelf = bookshelf.bookshelf)
|
|
cat.rel = 'related'
|
|
cat.url = os.url ('bookshelf', id = bookshelf.id)
|
|
cat.class_ += 'navlink grayed'
|
|
cat.icon = 'bookshelf'
|
|
cat.order = 33
|
|
os.entries.append (cat)
|
|
|
|
if os.format in ('mobile', ):
|
|
for author in dc.authors:
|
|
cat = BaseSearcher.Cat ()
|
|
cat.title = _('By {author}').format (author = author.name_and_dates)
|
|
cat.rel = 'related'
|
|
cat.url = os.url ('author', id = author.id)
|
|
cat.class_ += 'navlink grayed'
|
|
cat.icon = 'author'
|
|
cat.order = 31
|
|
os.entries.append (cat)
|
|
|
|
for subject in dc.subjects:
|
|
cat = BaseSearcher.Cat ()
|
|
cat.title = _('On {subject}').format (subject = subject.subject)
|
|
cat.rel = 'related'
|
|
cat.url = os.url ('subject', id = subject.id)
|
|
cat.class_ += 'navlink grayed'
|
|
cat.icon = 'subject'
|
|
cat.order = 32
|
|
os.entries.append (cat)
|
|
|
|
os.total_results = 1
|
|
|
|
os.template = 'results' if os.format == 'mobile' else 'bibrec'
|
|
os.page = 'bibrec'
|
|
os.og_type = 'book'
|
|
os.finalize ()
|
|
|
|
return self.format (os)
|