diff --git a/bookwyrm/settings.py b/bookwyrm/settings.py index 9355f93f..1794db9f 100644 --- a/bookwyrm/settings.py +++ b/bookwyrm/settings.py @@ -7,6 +7,7 @@ from django.utils.translation import gettext_lazy as _ env = Env() +env.read_env() DOMAIN = env("DOMAIN") VERSION = "0.0.1" diff --git a/bookwyrm/templates/book/book_identifiers.html b/bookwyrm/templates/book/book_identifiers.html index 8c8313f3..19ab619d 100644 --- a/bookwyrm/templates/book/book_identifiers.html +++ b/bookwyrm/templates/book/book_identifiers.html @@ -1,7 +1,7 @@ {% spaceless %} {% load i18n %} -{% if book.isbn13 or book.oclc_number or book.asin %} +{% if book.isbn_13 or book.oclc_number or book.asin %}
{% if book.isbn_13 %}
diff --git a/bookwyrm/templates/shelf/shelf.html b/bookwyrm/templates/shelf/shelf.html index 88f4b2bb..fa1e91f9 100644 --- a/bookwyrm/templates/shelf/shelf.html +++ b/bookwyrm/templates/shelf/shelf.html @@ -124,14 +124,16 @@ - - - - - - + + + {% if request.user.is_authenticated %} - + {% if is_self %} + + + + {% endif %} + {% endif %} {% if shelf.user == request.user %} @@ -151,17 +153,18 @@ + {% if request.user.is_authenticated %} + {% if is_self %} - {% latest_read_through book user as read_through %} - {% if request.user.is_authenticated %} + {% endif %} diff --git a/bookwyrm/views/shelf.py b/bookwyrm/views/shelf.py index 37f320dc..0b830d90 100644 --- a/bookwyrm/views/shelf.py +++ b/bookwyrm/views/shelf.py @@ -68,16 +68,30 @@ class Shelf(View): deleted=False, ).order_by("-published_date") + reading = models.ReadThrough.objects + + reading = reading.filter(user=user, book__id=OuterRef("id")).order_by( + "start_date" + ) + books = books.annotate( rating=Subquery(reviews.values("rating")[:1]), shelved_date=F("shelfbook__shelved_date"), + start_date=Subquery(reading.values("start_date")[:1]), + finish_date=Subquery(reading.values("finish_date")[:1]), + author=Subquery( + models.Book.objects.filter(id=OuterRef("id")).values("authors__name")[ + :1 + ] + ), ).prefetch_related("authors") + books = sort_books(books, request.GET.get("sort")) + paginated = Paginator( - books.order_by("-shelfbook__updated_date"), + books, PAGE_LENGTH, ) - page = paginated.get_page(request.GET.get("page")) data = { "user": user, @@ -87,6 +101,7 @@ class Shelf(View): "books": page, "edit_form": forms.ShelfForm(instance=shelf if shelf_identifier else None), "create_form": forms.ShelfForm(), + "sort": request.GET.get("sort"), "page_range": paginated.get_elided_page_range( page.number, on_each_side=2, on_ends=1 ), @@ -207,3 +222,23 @@ def unshelve(request): shelf_book.delete() return redirect(request.headers.get("Referer", "/")) + + +def sort_books(books, sort): + """Books in shelf sorting""" + sort_fields = [ + "title", + "author", + "shelved_date", + "start_date", + "finish_date", + "rating", + ] + + if sort in sort_fields: + books = books.order_by(sort) + elif sort and sort[1:] in sort_fields: + books = books.order_by(F(sort[1:]).desc(nulls_last=True)) + else: + books = books.order_by("-shelved_date") + return books diff --git a/pytest.ini b/pytest.ini index 8539d116..9ef72449 100644 --- a/pytest.ini +++ b/pytest.ini @@ -7,6 +7,7 @@ markers = env = DEBUG = false + USE_HTTPS=true DOMAIN = your.domain.here BOOKWYRM_DATABASE_BACKEND = postgres MEDIA_ROOT = images/
{% trans "Cover" %}{% trans "Title" %}{% trans "Author" %}{% trans "Shelved" %}{% trans "Started" %}{% trans "Finished" %}{% trans "Cover"%}{% trans "Title" as text %}{% include 'snippets/table-sort-header.html' with field="title" sort=sort text=text %}{% trans "Author" as text %}{% include 'snippets/table-sort-header.html' with field="author" sort=sort text=text %}{% trans "Rating" %}{% trans "Shelved" as text %}{% include 'snippets/table-sort-header.html' with field="shelved_date" sort=sort text=text %}{% trans "Started" as text %}{% include 'snippets/table-sort-header.html' with field="start_date" sort=sort text=text %}{% trans "Finished" as text %}{% include 'snippets/table-sort-header.html' with field="finish_date" sort=sort text=text %}{% trans "Rating" as text %}{% include 'snippets/table-sort-header.html' with field="rating" sort=sort text=text %} {% include 'snippets/authors.html' %} {{ book.shelved_date|naturalday }} - {{ read_through.start_date|naturalday|default_if_none:""}} + {{ book.start_date|naturalday|default_if_none:""}} - {{ read_through.finish_date|naturalday|default_if_none:""}} + {{ book.finish_date|naturalday|default_if_none:""}} {% include 'snippets/stars.html' with rating=book.rating %}