瀏覽代碼

[webpages] Provide default iframe reading method

Colin Powell 11 月之前
父節點
當前提交
f29a039562

+ 1 - 1
vrobbler/apps/scrobbles/models.py

@@ -634,7 +634,7 @@ class Scrobble(TimeStampedModel):
             and user.profile.redirect_to_webpage
         ):
             logger.info(f"Redirecting to {self.media_obj.url}")
-            redirect_url = self.media_obj.url
+            redirect_url = self.media_obj.get_read_url()
 
         return redirect_url
 

+ 3 - 0
vrobbler/apps/webpages/models.py

@@ -69,6 +69,9 @@ class WebPage(ScrobblableMixin):
     def get_absolute_url(self):
         return reverse("webpages:webpage-detail", kwargs={"slug": self.uuid})
 
+    def get_read_url(self):
+        return reverse("webpages:webpage-read", kwargs={"slug": self.uuid})
+
     @property
     def estimated_time_to_read_in_seconds(self):
         if not self.extract:

+ 5 - 0
vrobbler/apps/webpages/urls.py

@@ -11,4 +11,9 @@ urlpatterns = [
         views.WebPageDetailView.as_view(),
         name="webpage-detail",
     ),
+    path(
+        "webpage/<slug:slug>/read/",
+        views.WebPageReadView.as_view(),
+        name="webpage-read",
+    ),
 ]

+ 40 - 0
vrobbler/apps/webpages/views.py

@@ -1,6 +1,10 @@
 from django.contrib.auth.mixins import LoginRequiredMixin
 from django.db.models import Count
+from django.http import HttpResponseRedirect
+from django.shortcuts import redirect
+from django.urls import reverse
 from django.views import generic
+from webpages.forms import WebPageReadForm
 from webpages.models import WebPage
 
 
@@ -26,3 +30,39 @@ class WebPageDetailView(LoginRequiredMixin, generic.DetailView):
         context_data = super().get_context_data(**kwargs)
         context_data["scrobbles"] = self.object.scrobbles(user)
         return context_data
+
+
+class WebPageReadView(
+    LoginRequiredMixin, generic.edit.FormView, generic.DetailView
+):
+    model = WebPage
+    slug_field = "uuid"
+    template_name = "webpages/webpage_read.html"
+    form_class = WebPageReadForm
+
+    def get(self, *args, **kwargs):
+        user = self.request.user
+        webpage = WebPage.objects.get(uuid=kwargs.get("slug"))
+        latest_scrobble = webpage.scrobbles(user).last()
+        if latest_scrobble.played_to_completion:
+            redirect(
+                reverse(
+                    "webpages:webpage-detail", kwargs={"slug": webpage.uuid}
+                )
+            )
+        return super().get(*args, **kwargs)
+
+    def form_valid(self, *args):
+        user = self.request.user
+        webpage = WebPage.objects.get(uuid=self.kwargs.get("slug"))
+        latest_scrobble = webpage.scrobbles(user).last()
+        if not latest_scrobble.played_to_completion:
+
+            latest_scrobble.stop()
+
+            latest_scrobble.log["notes"] = self.request.POST.get("notes")
+            latest_scrobble.save(update_fields=["log"])
+
+        return HttpResponseRedirect(
+            reverse("webpages:webpage-detail", kwargs={"slug": webpage.uuid})
+        )