#-*- coding: utf-8 -*-
# Copyright (C) 1998-2012 by the Free Software Foundation, Inc.
#
# This file is part of HyperKitty.
#
# HyperKitty is free software: you can redistribute it and/or modify it under
# the terms of the GNU General Public License as published by the Free
# Software Foundation, either version 3 of the License, or (at your option)
# any later version.
#
# HyperKitty is distributed in the hope that it will be useful, but WITHOUT
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
# more details.
#
# You should have received a copy of the GNU General Public License along with
# HyperKitty. If not, see .
#
# Author: Aurelien Bompard
#
from hyperkitty.models import Rating
def get_votes(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)
elif isinstance(msgid, list):
votes = Rating.objects.filter(messageid__in=msgid)
except Rating.DoesNotExist:
votes = {}
for vote in votes:
if vote.vote == 1:
likes += 1
elif vote.vote == -1:
dislikes += 1
if user is not None and user.is_authenticated() and vote.user == user:
if not isinstance(msgid, list) or vote.messageid == msgid[0]:
# for a thread, only consider the starting email
myvote = vote.vote
return likes, dislikes, myvote
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)
message.likestatus = "neutral"
if message.likes - message.dislikes >= 10:
message.likestatus = "likealot"
elif message.likes - message.dislikes > 0:
message.likestatus = "like"
#elif message.likes - message.dislikes < 0:
# message.likestatus = "dislike"
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 = likes + dislikes
try:
thread.likes = likes / total
except ZeroDivisionError:
thread.likes = 0
try:
thread.dislikes = dislikes / total
except ZeroDivisionError:
thread.dislikes = 0
thread.likestatus = "neutral"
if thread.likes - thread.dislikes >= 10:
thread.likestatus = "likealot"
elif thread.likes - thread.dislikes > 0:
thread.likestatus = "like"
#elif thread.likes - thread.dislikes < 0:
# thread.likestatus = "dislike"
knjO鬝"D_be-Pim#ܯ}-"PZH]CW"8[qQ$R*>ZsL(q,QSR.Bn;
1Ee"3M܅aw{2 xWKNȰ̩
CH~C1փLڽb8%mxuU\L /1?WZw݅Ԩ[weY
9Bxt(Q5ݢ[OH!pWͅ
/uݹI[y'c{%z%aK:sa>LKlMtԢFۧk毖37|]9/hod}(c>e q
mJX_VQYYppw_F{:\áBqu~fO]S
wcR "C1 +ȨEkb (ԐSsIIgqzŇձϊE*ВFl'|ĵL>̞?8x@,cZ*Vw#oXRdF
;tޥmJ!3$!kV+յ-ՠ*@a^ܡz'x*K#g.k,lN/}3@
N#^g%0۞aXb͡%xg8=}rm\8FdN͠VB曑{g-u0|noԇT0 9bL,Kq 9%fԼt(71?16bU`KN?*OV+zb!|i=9([ ByjUyIuenqv1WLHB#%k+BjrrAj{`kHbgx'z6qO!hi)8ū('VxiGLㆉXiÇQ4CmKEfnTM0BmDى4KAvW6լ_C<*LeWHx:c6}ņ=͙-řvt9ϖvT/23GPj"gZDH{i4Pk0|URWҶS
%ҍ@~_ K:Mi1inr+Ɉ.lGBU<XK72BDIXAt\|z~Q=:FBlws!r
4adk!8@2q(_SZ5H|G
Dszh$u/,$?,MdtwtJ39Pu`dQ۲pK̵ V(zE=P;<~{uqZZdYip\jO/#5{<2@%WskhUE퇛m ܠкY/E`a6Of!3ZJCᩐdv07+ʅVbSX شuN_4rt|J,)<[8Xg(#3p#[rĸ|(#l|%z
M
Fcc"Qu$D XāsBeQBE%Jnj
lDhWL%j
TXSвZ*?- BmZHx|?4ϠA=(4\31QF(Ynz=PS%=7H=i?y>fKnt[oubwO/lp&γ8yVt5'e&dܲ
!1RzL@(Ϯt&\mlP S@jdy{ǿW:C D̅
u*Bc$tʋQ|K~7贗'[(vل[ ;Q@T4/MNPre YvT_SBkyFt;, kN>}*b aoQOⴿ"3&|^'NTr~p
0˖9lrYonzvdQv(sUs<ɒ }.~%EKpr"E6?Ϗ}'-?Щ}I8Dt>V}sn)`_bVHlty$IqIޢjR6uRH4^ bR$%B&gq'c*X%'6"m%1ZqKɩZuXP>{˙ Ɉ3mq\G+ίsw}`63/ZҘƣWjpuvZSur6Ue9M=dq*̑d/|9meJ)U3ב6ey`"oi8ĥbj!~_ M!&IEUD:L7nf$͊rmt+Bߢ)OvbY
rey$TP?eb|>UkƩWc ѽjd:e3sڠ_S$pd)QF䕱|<8`g^l5};
$ݙirWID9q ;U_Em =M ۿ톷xo5lwH2G_\%&ޯ~V m0Z[UA2M49WZ&:6Vوv9xNPY
(rr[,t4={ZA kQσ"c M;W
Shv1ܬOBjn&a'PC^AO<ar ޓ9ծSI{+Wԭ7dO;.'O-=yGApׄhtfoYVsVCm_|e1Pm_/u[?iZEgV`J=ƽxvr
?jrqWRf1T %
K&ʭd(fb}ֶƅ\{%X\AcepٔjK"FCom!:M =m&%gjWʘ_͖$PYl%+yT6G
+3X@S,+9(\41{yONsv
bMۛ'I+mE_]YL4<~6I ,7̊9ZX"҉Cx=>< eB$
+.}X=n(!pO+vq5gxz8ތ-ufG#Hī;ӧ=!@sXVcbC?6.2GwbOLZAosחv+h2`h(a9tWwꋣy#U*5*Z
x;Ź~`Rȶ(P|+L0%eN3PkBv&}?eatct鹥;̸*`Ye.Vu~..Uh{ EZW4}
&~i
']B2Ҹ
"cHc|=ƚ{}7p lbq0zc҉ր
hv=cc
LMz"zem/Ap/xO&jUU]:3D揅n%vOb
(`3]C]6Ǿ$`/9B.ag;M)6-4m~ ҡj$sua,x-~z8/"<Ww`)l`djy_.X7w^u@Ȃш2pNOi\GcT#5b\oQFNi(ڋu\V%2wR
CCNqKHlO-KH0_M:fgDc(
u%PdF_lZb}rx#$Hfg2҃"щN^/ՙ3(E5
I)lGD/> B96}XkdMKN2P:/X2Yׯc;eD$`g@@6t
'
pXыE*{sTOAl,%(,`wR^Ê*so(Cd=o#XQff4
esJ OgřPWpxJ?&Z(iR$"}p\(7}#hb_?T::#h,ufe<^1}g6N*Qpf Oؖi&Kֵ