From 13d8ccb016ca8c761fe5fa6a4b841db2f0f9a556 Mon Sep 17 00:00:00 2001 From: Mouse Reeve Date: Wed, 10 Feb 2021 14:13:36 -0800 Subject: [PATCH] Moves status notifications into model --- bookwyrm/models/status.py | 25 +++++++++++++++++++++++++ bookwyrm/views/status.py | 23 ++--------------------- 2 files changed, 27 insertions(+), 21 deletions(-) diff --git a/bookwyrm/models/status.py b/bookwyrm/models/status.py index edf60281..7091fd0b 100644 --- a/bookwyrm/models/status.py +++ b/bookwyrm/models/status.py @@ -52,6 +52,31 @@ class Status(OrderedCollectionPageMixin, BookWyrmModel): serialize_reverse_fields = [('attachments', 'attachment', 'id')] deserialize_reverse_fields = [('attachments', 'attachment')] + def save(self, *args, **kwargs): + ''' save and notify ''' + super().save(*args, **kwargs) + + notification_model = apps.get_model( + 'bookwyrm.Notification', require_ready=True) + if self.reply_parent and self.reply_parent.user.local: + notification_model.objects.create( + user=self.reply_parent.user, + notification_type='REPLY', + related_user=self.user, + related_status=self, + ) + for mention_user in self.mention_users.all(): + # avoid double-notifying about this status + if not mention_user.local or notification_model.objects.filter( + related_status=self, related_user=mention_user).exists(): + continue + notification_model.objects.create( + user=mention_user, + notification_type='MENTION', + related_user=self.user, + related_status=self, + ) + @property def recipients(self): ''' tagged users who definitely need to get this status in broadcast ''' diff --git a/bookwyrm/views/status.py b/bookwyrm/views/status.py index 522d1f6d..db924ce8 100644 --- a/bookwyrm/views/status.py +++ b/bookwyrm/views/status.py @@ -10,7 +10,7 @@ from markdown import markdown from bookwyrm import forms, models from bookwyrm.sanitize_html import InputHtmlParser from bookwyrm.settings import DOMAIN -from bookwyrm.status import create_notification, delete_status +from bookwyrm.status import delete_status from bookwyrm.utils import regex from .helpers import handle_remote_webfinger @@ -48,31 +48,12 @@ class CreateStatus(View): r'%s\g<1>' % \ (mention_user.remote_id, mention_text), content) - # add reply parent to mentions and notify + # add reply parent to mentions if status.reply_parent: status.mention_users.add(status.reply_parent.user) - if status.reply_parent.user.local: - create_notification( - status.reply_parent.user, - 'REPLY', - related_user=request.user, - related_status=status - ) - # deduplicate mentions status.mention_users.set(set(status.mention_users.all())) - # create mention notifications - for mention_user in status.mention_users.all(): - if status.reply_parent and mention_user == status.reply_parent.user: - continue - if mention_user.local: - create_notification( - mention_user, - 'MENTION', - related_user=request.user, - related_status=status - ) # don't apply formatting to generated notes if not isinstance(status, models.GeneratedNote):