From cb6262b8b3f9c60de1b9ca2960f01c5845708103 Mon Sep 17 00:00:00 2001 From: Samuel Clay Date: Thu, 19 Nov 2020 18:38:35 -0500 Subject: [PATCH] Newsletters feeds now de-duplicate based on sender email as well as sender name. This should cut down on duplicates. --- apps/newsletters/models.py | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/apps/newsletters/models.py b/apps/newsletters/models.py index 10b09d53f..81e84d385 100644 --- a/apps/newsletters/models.py +++ b/apps/newsletters/models.py @@ -31,9 +31,22 @@ class EmailNewsletter: return usf.add_folder('', 'Newsletters') + # First look for the email address try: feed = Feed.objects.get(feed_address=feed_address) except Feed.DoesNotExist: + feed = None + + # If not found, check among titles user has subscribed to + if not feed: + newsletter_subs = UserSubscription.objects.filter(user=user, is_newsletter=True).only('feed') + newsletter_feed_ids = [us.feed.pk for us in newsletter_subs] + feeds = Feed.objects.filter(feed_title__iexact=sender_name, pk__in=newsletter_feed_ids) + if feeds.count(): + feed = feeds[0] + + # Create a new feed if it doesn't exist by sender name or email + if not feed: feed = Feed.objects.create(feed_address=feed_address, feed_link='http://' + sender_domain, feed_title=sender_name, @@ -148,8 +161,8 @@ class EmailNewsletter: return profile.user - def _feed_address(self, user, sender): - return 'newsletter:%s:%s' % (user.pk, sender) + def _feed_address(self, user, sender_email): + return 'newsletter:%s:%s' % (user.pk, sender_email) def _split_sender(self, sender): tokens = re.search('(.*?) <(.*?)@(.*?)>', sender)