summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--hyperkitty/lib/voting.py14
-rw-r--r--hyperkitty/views/message.py5
2 files changed, 16 insertions, 3 deletions
diff --git a/hyperkitty/lib/voting.py b/hyperkitty/lib/voting.py
index d21d977..56fee7e 100644
--- a/hyperkitty/lib/voting.py
+++ b/hyperkitty/lib/voting.py
@@ -20,6 +20,7 @@
#
+from django.core.cache import cache
from hyperkitty.models import Rating
@@ -59,9 +60,16 @@ def set_message_votes(message, user=None):
def set_thread_votes(thread, user=None):
- total = 0
- # XXX: 1 SQL request per thread, possible optimization here
- likes, dislikes, myvote = get_votes(thread.email_id_hashes)
+ total = myvote = 0
+ likes = dislikes = None
+ cache_key = "list:%s:thread:%s:votes" % (thread.list_name, thread.thread_id)
+ if user is None or not user.is_authenticated():
+ likes, dislikes = cache.get(cache_key, (None, None))
+ myvote = 0
+ 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)
+ cache.set(cache_key, (likes, dislikes))
total = likes + dislikes
try:
thread.likes = likes / total
diff --git a/hyperkitty/views/message.py b/hyperkitty/views/message.py
index 414df68..2ed53e4 100644
--- a/hyperkitty/views/message.py
+++ b/hyperkitty/views/message.py
@@ -28,6 +28,7 @@ from django.http import HttpResponse, Http404
from django.shortcuts import redirect, render
from django.core.urlresolvers import reverse
from django.core.exceptions import SuspiciousOperation
+from django.core.cache import cache
from django.template import RequestContext, loader
from django.contrib.auth.decorators import login_required
@@ -131,6 +132,10 @@ def vote(request, mlist_fqdn, message_id_hash):
v.vote = value
v.save()
+ # Invalidate the cache for the thread votes
+ cache.delete("list:%s:thread:%s:votes"
+ % (mlist_fqdn, message.thread.thread_id))
+
# Extract all the votes for this message to refresh it
set_message_votes(message, request.user)
t = loader.get_template('messages/like_form.html')