diff --git a/reader/templates/reader/book_read/invalid_filetype.html b/reader/templates/reader/book_read/invalid_filetype.html new file mode 100644 index 0000000000000000000000000000000000000000..29e1d5476c4c14f02fba73819ba63667af0047c7 --- /dev/null +++ b/reader/templates/reader/book_read/invalid_filetype.html @@ -0,0 +1,12 @@ +{% extends "base.html" %} +{% block content %} + <h1 class="title"> + Invalid file type. + </h1> + <p> + Unfortunately this file type is not available at the moment. Please try again later. + {% if request.META.HTTP_REFERER %} + <a href="{{ request.META.HTTP_REFERER }}">Go back</a> + {% endif %} + </p> +{% endblock %} \ No newline at end of file diff --git a/reader/templates/reader/pdf_viewer.html b/reader/templates/reader/book_read/pdf_viewer.html similarity index 99% rename from reader/templates/reader/pdf_viewer.html rename to reader/templates/reader/book_read/pdf_viewer.html index 4270dab5d5e20acfb9b13cfee2d7d7c0c0cd101f..7c81704c1c71ed152f2ad9ec16509d1c23425dca 100644 --- a/reader/templates/reader/pdf_viewer.html +++ b/reader/templates/reader/book_read/pdf_viewer.html @@ -1,6 +1,10 @@ {% load static %} <!DOCTYPE html> <!-- +Based on PDF.js. +Modified for use here - original code is at https://github.com/mozilla/pdf.js +Original comment below: + Copyright 2012 Mozilla Foundation Licensed under the Apache License, Version 2.0 (the "License"); @@ -35,7 +39,7 @@ See https://github.com/adobe-type-tools/cmap-resources <link rel="stylesheet" href="{% static "pdfjs/viewer.css" %}"> <script type="module"> - {% include "reader/viewer.mjs" %} + {% include "reader/book_read/viewer.mjs" %} </script> </head> diff --git a/reader/templates/reader/viewer.mjs b/reader/templates/reader/book_read/viewer.mjs similarity index 100% rename from reader/templates/reader/viewer.mjs rename to reader/templates/reader/book_read/viewer.mjs diff --git a/reader/templates/reader/view_book.html b/reader/templates/reader/view_book.html index ef6611ebfb33d5009e6ffe2cfc7af2ced0699772..b33c2fb5ff957090c963b6d7adfe825b615984cb 100644 --- a/reader/templates/reader/view_book.html +++ b/reader/templates/reader/view_book.html @@ -38,7 +38,7 @@ <span>{{ user_book.percentage_read_whole }}%</span> </div> <div class="column is-narrow"> - <a href="#" class="button is-success">Read</a> + <a href="{% url 'read_book' book_id=book.id %}" class="button is-success">Read</a> </div> </div> {% elif user.is_authenticated %} diff --git a/reader/urls.py b/reader/urls.py index 201a8cab1d5c30a11f4cec5408c3445417ca91d8..fe79163a827b3d2c599e3c509d740d5140b4090f 100644 --- a/reader/urls.py +++ b/reader/urls.py @@ -8,4 +8,5 @@ urlpatterns = [ path("books/create", views.create_book, name='create_book'), path("books/<int:book_id>", views.view_book, name='view_book'), path("books/<int:book_id>/to_library", views.add_to_library, name='add_to_library'), + path("books/<int:book_id>/read", views.read_book, name='read_book'), ] \ No newline at end of file diff --git a/reader/views.py b/reader/views.py index 806dddfd72f267b9f81bbb06d46531995dbef766..6a1139b2b7b07db69439d8983899be71ae543656 100644 --- a/reader/views.py +++ b/reader/views.py @@ -132,3 +132,22 @@ def add_to_library(request, book_id): userbook = UserBook(book=book, user=request.user) userbook.save() return redirect("view_book", book_id=book_id) + + +def read_book(request, book_id): + book = get_object_or_404(Book, id=book_id) + if not user_can_access_book(request, book): + raise PermissionDenied + userbook = get_object_or_404(UserBook, book=book, user=request.user) + # Check file type + match book.file_type: + case "pdf": + reader_template = "reader/book_read/pdf_viewer.html" + case "epub": + reader_template = "reader/book_read/epub_viewer.html" + case _: + reader_template = "reader/book_read/invalid_filetype.html" + return render(request, reader_template, { + "book": book, + "userbook": userbook + }) \ No newline at end of file