From b0929214d5c4f6df743256cacfb04337b9319aa4 Mon Sep 17 00:00:00 2001 From: Andrew Godwin Date: Mon, 5 Dec 2022 22:14:50 -0700 Subject: [PATCH] Allow selecting notification types to see --- activities/views/timelines.py | 35 ++++++++++++++++--------- static/css/style.css | 18 ++++++++++++- templates/activities/notifications.html | 23 ++++++++++++++++ 3 files changed, 63 insertions(+), 13 deletions(-) diff --git a/activities/views/timelines.py b/activities/views/timelines.py index 156a20d..2b456ad 100644 --- a/activities/views/timelines.py +++ b/activities/views/timelines.py @@ -161,9 +161,6 @@ class Federated(ListView): @method_decorator(identity_required, name="dispatch") -@method_decorator( - per_identity_cache_page("cache_timeout_page_timeline"), name="dispatch" -) class Notifications(ListView): template_name = "activities/notifications.html" @@ -172,18 +169,30 @@ class Notifications(ListView): "allows_refresh": True, } paginate_by = 50 + notification_types = { + "followed": TimelineEvent.Types.followed, + "boosted": TimelineEvent.Types.boosted, + "mentioned": TimelineEvent.Types.mentioned, + "liked": TimelineEvent.Types.liked, + } def get_queryset(self): + # Did they ask to change options? + notification_options = self.request.session.get("notification_options", {}) + for type_name in self.notification_types: + notification_options.setdefault(type_name, True) + if self.request.GET.get(type_name) == "true": + notification_options[type_name] = True + elif self.request.GET.get(type_name) == "false": + notification_options[type_name] = False + self.request.session["notification_options"] = notification_options + # Return appropriate events + types = [] + for type_name, type in self.notification_types.items(): + if notification_options.get(type_name, True): + types.append(type) return ( - TimelineEvent.objects.filter( - identity=self.request.identity, - type__in=[ - TimelineEvent.Types.mentioned, - TimelineEvent.Types.boosted, - TimelineEvent.Types.liked, - TimelineEvent.Types.followed, - ], - ) + TimelineEvent.objects.filter(identity=self.request.identity, type__in=types) .order_by("-created")[:50] .select_related("subject_post", "subject_post__author", "subject_identity") ) @@ -205,5 +214,7 @@ class Notifications(ListView): ): events[-1].collapsed = True events.append(event) + # Retrieve what kinds of things to show context["events"] = events + context["notification_options"] = self.request.session["notification_options"] return context diff --git a/static/css/style.css b/static/css/style.css index e29126b..08bde08 100644 --- a/static/css/style.css +++ b/static/css/style.css @@ -762,7 +762,7 @@ table.metadata td.name { font-weight: bold; } -/* Named Timelines */ +/* Timelines */ .left-column .timeline-name { margin: 0 0 10px 0; @@ -774,6 +774,22 @@ table.metadata td.name { margin-right: 10px } +.view-options { + margin: 0 0 10px 3px; +} + +.view-options a { + margin: 0 10px 0 0; + padding: 4px 7px; + color: var(--color-text-duller); + background: var(--color-bg-box); + border-radius: 3px; +} + +.view-options a.selected { + color: var(--color-text-main); +} + /* Posts */ .post { diff --git a/templates/activities/notifications.html b/templates/activities/notifications.html index 2d0a434..890a2ad 100644 --- a/templates/activities/notifications.html +++ b/templates/activities/notifications.html @@ -3,6 +3,29 @@ {% block title %}Notifications{% endblock %} {% block content %} +
+ {% if notification_options.followed %} + Followers + {% else %} + Followers + {% endif %} + {% if notification_options.boosted %} + Boosts + {% else %} + Boosts + {% endif %} + {% if notification_options.liked %} + Likes + {% else %} + Likes + {% endif %} + {% if notification_options.mentioned %} + Mentions + {% else %} + Mentions + {% endif %} +
+ {% for event in events %} {% include "activities/_event.html" %} {% empty %}