Merge pull request #2012 from bookwyrm-social/catch-update-book-error

Catch update book error
This commit is contained in:
Mouse Reeve 2022-03-13 12:53:09 -07:00 committed by GitHub
commit 753cd36f86
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 17 additions and 3 deletions

View file

@ -12,6 +12,15 @@
{% endblock %}
{% block content %}
{% if update_error %}
<div class="notification is-danger is-light">
<span class="icon icon-x" aria-hidden="true"></span>
<span>
{% trans "Unable to connect to remote source." %}
</span>
</div>
{% endif %}
{% with user_authenticated=request.user.is_authenticated can_edit_book=perms.bookwyrm.edit_book %}
<div class="block" itemscope itemtype="https://schema.org/Book">
<div class="columns is-mobile">

View file

@ -12,7 +12,7 @@ from django.views.decorators.http import require_POST
from bookwyrm import forms, models
from bookwyrm.activitypub import ActivitypubResponse
from bookwyrm.connectors import connector_manager
from bookwyrm.connectors import connector_manager, ConnectorException
from bookwyrm.connectors.abstract_connector import get_image
from bookwyrm.settings import PAGE_LENGTH
from bookwyrm.views.helpers import is_api_request
@ -22,7 +22,7 @@ from bookwyrm.views.helpers import is_api_request
class Book(View):
"""a book! this is the stuff"""
def get(self, request, book_id, user_statuses=False):
def get(self, request, book_id, user_statuses=False, update_error=False):
"""info about a book"""
if is_api_request(request):
book = get_object_or_404(
@ -80,6 +80,7 @@ class Book(View):
else None,
"rating": reviews.aggregate(Avg("rating"))["rating__avg"],
"lists": lists,
"update_error": update_error,
}
if request.user.is_authenticated:
@ -191,6 +192,10 @@ def update_book_from_remote(request, book_id, connector_identifier):
)
book = get_object_or_404(models.Book.objects.select_subclasses(), id=book_id)
connector.update_book_from_remote(book)
try:
connector.update_book_from_remote(book)
except ConnectorException:
# the remote source isn't available or doesn't know this book
return Book().get(request, book_id, update_error=True)
return redirect("book", book.id)