From f29a0395621bccf4f4c2159dca66138d0a37234e Mon Sep 17 00:00:00 2001 From: Colin Powell Date: Sat, 3 Aug 2024 23:49:31 -0400 Subject: [PATCH] [webpages] Provide default iframe reading method --- vrobbler/apps/scrobbles/models.py | 2 +- vrobbler/apps/webpages/models.py | 3 +++ vrobbler/apps/webpages/urls.py | 5 ++++ vrobbler/apps/webpages/views.py | 40 +++++++++++++++++++++++++++++++ 4 files changed, 49 insertions(+), 1 deletion(-) diff --git a/vrobbler/apps/scrobbles/models.py b/vrobbler/apps/scrobbles/models.py index f11495a..00562af 100644 --- a/vrobbler/apps/scrobbles/models.py +++ b/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 diff --git a/vrobbler/apps/webpages/models.py b/vrobbler/apps/webpages/models.py index 8ae65fa..d3916cb 100644 --- a/vrobbler/apps/webpages/models.py +++ b/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: diff --git a/vrobbler/apps/webpages/urls.py b/vrobbler/apps/webpages/urls.py index 3892c85..979576e 100644 --- a/vrobbler/apps/webpages/urls.py +++ b/vrobbler/apps/webpages/urls.py @@ -11,4 +11,9 @@ urlpatterns = [ views.WebPageDetailView.as_view(), name="webpage-detail", ), + path( + "webpage//read/", + views.WebPageReadView.as_view(), + name="webpage-read", + ), ] diff --git a/vrobbler/apps/webpages/views.py b/vrobbler/apps/webpages/views.py index e05adc3..503963a 100644 --- a/vrobbler/apps/webpages/views.py +++ b/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}) + )