mirror of
https://github.com/janeczku/calibre-web
synced 2024-11-25 02:57:22 +00:00
Merge remote-tracking branch 'adv/goodreads-more-by'
This commit is contained in:
commit
d5e1dba0fe
@ -77,7 +77,8 @@ input.pill:not(:checked) + label .glyphicon {
|
|||||||
}
|
}
|
||||||
|
|
||||||
.author-bio img {margin: 0 1em 1em 0;}
|
.author-bio img {margin: 0 1em 1em 0;}
|
||||||
.author-link img {display: inline-block;max-width: 100px;}
|
.author-link {display: inline-block; margin-top: 10px; width: 100px;}
|
||||||
|
.author-link img {display: block; height: 100%;}
|
||||||
|
|
||||||
#remove-from-shelves .btn,
|
#remove-from-shelves .btn,
|
||||||
#shelf-action-errors {
|
#shelf-action-errors {
|
||||||
|
@ -11,16 +11,15 @@
|
|||||||
{%if author.about is not none %}
|
{%if author.about is not none %}
|
||||||
<p>{{author.about|safe}}</p>
|
<p>{{author.about|safe}}</p>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
</section>
|
|
||||||
|
|
||||||
<a href="{{author.link}}" class="author-link" target="_blank">
|
- {{_("via")}} <a href="{{author.link}}" class="author-link" target="_blank" rel="noopener">Goodreads</a>
|
||||||
<img src="{{ url_for('static', filename='img/goodreads.svg') }}" alt="Goodreads">
|
</section>
|
||||||
</a>
|
|
||||||
|
|
||||||
<div class="clearfix"></div>
|
<div class="clearfix"></div>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|
||||||
<div class="discover load-more">
|
<div class="discover load-more">
|
||||||
|
<h3>{{_("In Library")}}</h3>
|
||||||
<div class="row">
|
<div class="row">
|
||||||
{% if entries[0] %}
|
{% if entries[0] %}
|
||||||
{% for entry in entries %}
|
{% for entry in entries %}
|
||||||
@ -62,4 +61,48 @@
|
|||||||
{% endif %}
|
{% endif %}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
{% if other_books is not none %}
|
||||||
|
<div class="discover">
|
||||||
|
<h3>{{_("More by")}} {{ author.name|safe }}</h3>
|
||||||
|
<div class="row">
|
||||||
|
{% for entry in other_books %}
|
||||||
|
<div class="col-sm-3 col-lg-2 col-xs-6 book">
|
||||||
|
<div class="cover">
|
||||||
|
<a href="https://www.goodreads.com/book/show/{{ entry.gid['#text'] }}" target="_blank" rel="noopener">
|
||||||
|
<img src="{{ entry.image_url }}" />
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
<div class="meta">
|
||||||
|
<p class="title">{{entry.title|shortentitle}}</p>
|
||||||
|
<p class="author">
|
||||||
|
{% for author in entry.authors %}
|
||||||
|
<a href="https://www.goodreads.com/author/show/{{ author.gid }}" target="_blank" rel="noopener">
|
||||||
|
{{author.name}}
|
||||||
|
</a>
|
||||||
|
{% if not loop.last %}
|
||||||
|
&
|
||||||
|
{% endif %}
|
||||||
|
{% endfor %}
|
||||||
|
</p>
|
||||||
|
<div class="rating">
|
||||||
|
{% for number in range((entry.average_rating)|float|round|int(2)) %}
|
||||||
|
<span class="glyphicon glyphicon-star good"></span>
|
||||||
|
{% if loop.last and loop.index < 5 %}
|
||||||
|
{% for numer in range(5 - loop.index) %}
|
||||||
|
<span class="glyphicon glyphicon-star"></span>
|
||||||
|
{% endfor %}
|
||||||
|
{% endif %}
|
||||||
|
{% endfor %}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
{% endfor %}
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<a href="{{author.link}}" class="author-link" target="_blank" rel="noopener">
|
||||||
|
<img src="{{ url_for('static', filename='img/goodreads.svg') }}" alt="Goodreads">
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
{% endif %}
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
36
cps/web.py
36
cps/web.py
@ -8,11 +8,16 @@ except ImportError:
|
|||||||
gdrive_support = False
|
gdrive_support = False
|
||||||
|
|
||||||
try:
|
try:
|
||||||
from goodreads import client as gr_client
|
from goodreads.client import GoodreadsClient
|
||||||
goodreads_support = True
|
goodreads_support = True
|
||||||
except ImportError:
|
except ImportError:
|
||||||
goodreads_support = False
|
goodreads_support = False
|
||||||
|
|
||||||
|
try:
|
||||||
|
from functools import reduce
|
||||||
|
except ImportError:
|
||||||
|
pass # We're not using Python 3
|
||||||
|
|
||||||
import mimetypes
|
import mimetypes
|
||||||
import logging
|
import logging
|
||||||
from logging.handlers import RotatingFileHandler
|
from logging.handlers import RotatingFileHandler
|
||||||
@ -1169,20 +1174,27 @@ def author_list():
|
|||||||
def author(book_id, page):
|
def author(book_id, page):
|
||||||
entries, random, pagination = fill_indexpage(page, db.Books, db.Books.authors.any(db.Authors.id == book_id),
|
entries, random, pagination = fill_indexpage(page, db.Books, db.Books.authors.any(db.Authors.id == book_id),
|
||||||
db.Books.timestamp.desc())
|
db.Books.timestamp.desc())
|
||||||
if entries:
|
if entries is None:
|
||||||
name = db.session.query(db.Authors).filter(db.Authors.id == book_id).first().name
|
|
||||||
|
|
||||||
author_info = None
|
|
||||||
if goodreads_support and config.config_use_goodreads:
|
|
||||||
gc = gr_client.GoodreadsClient(config.config_goodreads_api_key, config.config_goodreads_api_secret)
|
|
||||||
author_info = gc.find_author(author_name=name)
|
|
||||||
|
|
||||||
return render_title_template('author.html', entries=entries, pagination=pagination,
|
|
||||||
title=name, author=author_info)
|
|
||||||
else:
|
|
||||||
flash(_(u"Error opening eBook. File does not exist or file is not accessible:"), category="error")
|
flash(_(u"Error opening eBook. File does not exist or file is not accessible:"), category="error")
|
||||||
return redirect(url_for("index"))
|
return redirect(url_for("index"))
|
||||||
|
|
||||||
|
name = db.session.query(db.Authors).filter(db.Authors.id == book_id).first().name
|
||||||
|
|
||||||
|
author_info = None
|
||||||
|
other_books = None
|
||||||
|
if goodreads_support and config.config_use_goodreads:
|
||||||
|
gc = GoodreadsClient(config.config_goodreads_api_key, config.config_goodreads_api_secret)
|
||||||
|
author_info = gc.find_author(author_name=name)
|
||||||
|
|
||||||
|
# Get all identifiers (ISBN, Goodreads, etc) and filter author's books by that list so we show fewer duplicates
|
||||||
|
# Note: Not all images will be shown, even though they're available on Goodreads.com.
|
||||||
|
# See https://www.goodreads.com/topic/show/18213769-goodreads-book-images
|
||||||
|
identifiers = reduce(lambda acc, book: acc + map(lambda identifier: identifier.val, book.identifiers), entries.all(), [])
|
||||||
|
other_books = filter(lambda book: book.isbn not in identifiers and book.gid["#text"] not in identifiers, author_info.books)
|
||||||
|
|
||||||
|
return render_title_template('author.html', entries=entries, pagination=pagination,
|
||||||
|
title=name, author=author_info, other_books=other_books)
|
||||||
|
|
||||||
|
|
||||||
@app.route("/series")
|
@app.route("/series")
|
||||||
@login_required_if_no_ano
|
@login_required_if_no_ano
|
||||||
|
Loading…
Reference in New Issue
Block a user