summaryrefslogtreecommitdiffstats
path: root/hyperkitty/lib/voting.py
diff options
context:
space:
mode:
authorAurélien Bompard <aurelien@bompard.org>2013-11-29 12:13:23 +0100
committerAurélien Bompard <aurelien@bompard.org>2013-11-29 12:13:23 +0100
commit5bca903d1c75a59a3e415d14812b4ffca769d930 (patch)
tree289ecf0c5a6fa6d68be0d65399dee7e8d650260f /hyperkitty/lib/voting.py
parent7cbafa8b495c2a79339df6e68adb6023eb1d83eb (diff)
downloadhyperkitty-5bca903d1c75a59a3e415d14812b4ffca769d930.tar.gz
hyperkitty-5bca903d1c75a59a3e415d14812b4ffca769d930.tar.xz
hyperkitty-5bca903d1c75a59a3e415d14812b4ffca769d930.zip
Fix bug in voting when emails in different lists have the same msgid
Diffstat (limited to 'hyperkitty/lib/voting.py')
-rw-r--r--hyperkitty/lib/voting.py12
1 files changed, 7 insertions, 5 deletions
diff --git a/hyperkitty/lib/voting.py b/hyperkitty/lib/voting.py
index da3e2a4..dd01af2 100644
--- a/hyperkitty/lib/voting.py
+++ b/hyperkitty/lib/voting.py
@@ -24,14 +24,16 @@ from django.core.cache import cache
from hyperkitty.models import Rating
-def get_votes(msgid, user=None):
+def get_votes(mlist_fqdn, msgid, user=None):
"""Extract all the votes for this message"""
likes = dislikes = myvote = 0
try:
if isinstance(msgid, basestring):
- votes = Rating.objects.filter(messageid=msgid)
+ votes = Rating.objects.filter(
+ list_address=mlist_fqdn, messageid=msgid)
elif isinstance(msgid, list):
- votes = Rating.objects.filter(messageid__in=msgid)
+ votes = Rating.objects.filter(
+ list_address=mlist_fqdn, messageid__in=msgid)
except Rating.DoesNotExist:
votes = {}
for vote in votes:
@@ -49,7 +51,7 @@ def get_votes(msgid, user=None):
def set_message_votes(message, user=None):
# Extract all the votes for this message
message.likes, message.dislikes, message.myvote = \
- get_votes(message.message_id_hash, user)
+ get_votes(message.list_name, message.message_id_hash, user)
message.likestatus = "neutral"
if message.likes - message.dislikes >= 10:
message.likestatus = "likealot"
@@ -65,7 +67,7 @@ def set_thread_votes(thread):
likes, dislikes = cache.get(cache_key, (None, None))
if likes is None or dislikes is None:
# XXX: 1 SQL request per thread, possible optimization here
- likes, dislikes, _myvote = get_votes(thread.email_id_hashes)
+ likes, dislikes, _myvote = get_votes(thread.list_name, thread.email_id_hashes)
cache.set(cache_key, (likes, dislikes))
# How should thread likes and dislikes be counted?
#thread.likes = likes / thread.emails_count