From 677bf77d667c95bfb27834c68f6ae48754f0b2fe Mon Sep 17 00:00:00 2001 From: TheJoeCoder <joe@radialbog9.uk> Date: Sun, 25 Aug 2024 15:57:07 +0100 Subject: [PATCH] Read book pages for pdf and invalid --- .../reader/book_read/invalid_filetype.html | 12 ++++++++++++ .../reader/{ => book_read}/pdf_viewer.html | 6 +++++- .../reader/{ => book_read}/viewer.mjs | 0 reader/templates/reader/view_book.html | 2 +- reader/urls.py | 1 + reader/views.py | 19 +++++++++++++++++++ 6 files changed, 38 insertions(+), 2 deletions(-) create mode 100644 reader/templates/reader/book_read/invalid_filetype.html rename reader/templates/reader/{ => book_read}/pdf_viewer.html (99%) rename reader/templates/reader/{ => book_read}/viewer.mjs (100%) 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 0000000..29e1d54 --- /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 4270dab..7c81704 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 ef6611e..b33c2fb 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 201a8ca..fe79163 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 806dddf..6a1139b 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 -- GitLab