summaryrefslogtreecommitdiffstats
path: root/hyperkitty/lib/mailman.py
diff options
context:
space:
mode:
Diffstat (limited to 'hyperkitty/lib/mailman.py')
-rw-r--r--hyperkitty/lib/mailman.py45
1 files changed, 45 insertions, 0 deletions
diff --git a/hyperkitty/lib/mailman.py b/hyperkitty/lib/mailman.py
index 185f9b1..f0c970f 100644
--- a/hyperkitty/lib/mailman.py
+++ b/hyperkitty/lib/mailman.py
@@ -20,8 +20,12 @@
#
from django.conf import settings
+from django.core.urlresolvers import reverse
+from django.utils.http import urlquote
from mailmanclient import Client
+from hyperkitty.models import Rating
+
def subscribe(list_address, user):
client = Client('%s/3.0' % settings.MAILMAN_REST_SERVER,
@@ -35,3 +39,44 @@ def subscribe(list_address, user):
"%s %s" % (user.first_name, user.last_name))
member.preferences["delivery_status"] = "by_user"
member.preferences.save()
+
+
+def get_subscriptions(store, client, mm_user):
+ if not mm_user:
+ return []
+ subscriptions = []
+ for mlist_id in mm_user.subscription_list_ids:
+ mlist = client.get_list(mlist_id).fqdn_listname
+ # de-duplicate subscriptions
+ if mlist in [ s["list_name"] for s in subscriptions ]:
+ continue
+ email_hashes = store.get_message_hashes_by_user_id(
+ mm_user.user_id, mlist)
+ try: # Compute the average vote value
+ votes = Rating.objects.filter(list_address=mlist,
+ messageid__in=email_hashes)
+ except Rating.DoesNotExist:
+ votes = []
+ likes = dislikes = 0
+ for v in votes:
+ if v.vote == 1:
+ likes += 1
+ elif v.vote == -1:
+ dislikes += 1
+ all_posts_url = "%s?list=%s&query=user_id:%s" % \
+ (reverse("search"), mlist, urlquote(mm_user.user_id))
+ likestatus = "neutral"
+ if likes - dislikes >= 10:
+ likestatus = "likealot"
+ elif likes - dislikes > 0:
+ likestatus = "like"
+ subscriptions.append({
+ "list_name": mlist,
+ "first_post": store.get_first_post(mlist, mm_user.user_id),
+ "likes": likes,
+ "dislikes": dislikes,
+ "likestatus": likestatus,
+ "all_posts_url": all_posts_url,
+ "posts_count": len(email_hashes),
+ })
+ return subscriptions