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