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 posts_count = store.get_message_count_by_user_id( mm_user.user_id, mlist) cache_key = "user:%s:list:%s:votes" % (mm_user.user_id, mlist) likes, dislikes = cache.get(cache_key, (None, None)) if likes is None or dislikes is None or posts_count is None: email_hashes = store.get_message_hashes_by_user_id( mm_user.user_id, mlist) likes, dislikes, _myvote = get_votes(mlist, email_hashes) cache.set(cache_key, (likes, dislikes)) all_posts_url = "%s?list=%s" % \ (reverse("user_posts", args=[mm_user.user_id]), mlist) 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": posts_count, }) return subscriptions
def get(self, request, mlist_fqdn, messageid): store = get_store(request) email = store.get_message_by_hash_from_list(mlist_fqdn, messageid) if not email: return Response(status=404) else: email.likes, email.dislikes, _ignore = get_votes(email.message_id_hash) return Response(EmailSerializer(email).data)
def get(self, request, mlist_fqdn, messageid): store = get_store(request) email = store.get_message_by_hash_from_list(mlist_fqdn, messageid) if not email: return Response(status=404) else: email.likes, email.dislikes, _ignore = get_votes( email.message_id_hash) return Response(EmailSerializer(email).data)
def _thread_list(request, mlist, threads, template_name='thread_list.html', extra_context={}): if mlist is None: raise Http404("No archived mailing-list by that name.") store = get_store(request) search_form = SearchForm(auto_id=False) participants = set() for thread in threads: participants.update(thread.participants) # Votes totalvotes = 0 totallikes = 0 totaldislikes = 0 for message_id_hash in thread.email_id_hashes: likes, dislikes, myvote = get_votes(message_id_hash, request.user) totallikes = totallikes + likes totalvotes = totalvotes + likes + dislikes totaldislikes = totaldislikes + dislikes if message_id_hash == thread.thread_id: # Starting email: same id as the thread_id thread.myvote = myvote try: thread.likes = totallikes / totalvotes except ZeroDivisionError: thread.likes = 0 try: thread.dislikes = totaldislikes / totalvotes 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" # Favorites thread.favorite = False if request.user.is_authenticated(): try: Favorite.objects.get(list_address=mlist.name, threadid=thread.thread_id, user=request.user) except Favorite.DoesNotExist: pass else: thread.favorite = True # Tags try: thread.tags = Tag.objects.filter(threadid=thread.thread_id, list_address=mlist.name) except Tag.DoesNotExist: thread.tags = [] all_threads = threads paginator = Paginator(threads, 10) page_num = request.GET.get('page') try: threads = paginator.page(page_num) except PageNotAnInteger: # If page is not an integer, deliver first page. threads = paginator.page(1) except EmptyPage: # If page is out of range (e.g. 9999), deliver last page of results. threads = paginator.page(paginator.num_pages) flash_messages = [] flash_msg = request.GET.get("msg") if flash_msg: flash_msg = { "type": FLASH_MESSAGES[flash_msg][0], "msg": FLASH_MESSAGES[flash_msg][1] } flash_messages.append(flash_msg) context = { 'mlist' : mlist, 'current_page': page_num, 'search_form': search_form, 'threads': threads, 'participants': len(participants), 'months_list': get_months(store, mlist.name), 'flash_messages': flash_messages, } context.update(extra_context) return render(request, template_name, context)
def _thread_list(request, mlist, threads, template_name='thread_list.html', extra_context={}): if mlist is None: raise Http404("No archived mailing-list by that name.") store = get_store(request) search_form = SearchForm(auto_id=False) participants = set() for thread in threads: participants.update(thread.participants) # Votes totalvotes = 0 totallikes = 0 totaldislikes = 0 for message_id_hash in thread.email_id_hashes: likes, dislikes, myvote = get_votes(message_id_hash, request.user) totallikes = totallikes + likes totalvotes = totalvotes + likes + dislikes totaldislikes = totaldislikes + dislikes if message_id_hash == thread.thread_id: # Starting email: same id as the thread_id thread.myvote = myvote try: thread.likes = totallikes / totalvotes except ZeroDivisionError: thread.likes = 0 try: thread.dislikes = totaldislikes / totalvotes 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" # Favorites thread.favorite = False if request.user.is_authenticated(): try: Favorite.objects.get(list_address=mlist.name, threadid=thread.thread_id, user=request.user) except Favorite.DoesNotExist: pass else: thread.favorite = True # Tags try: thread.tags = Tag.objects.filter(threadid=thread.thread_id, list_address=mlist.name) except Tag.DoesNotExist: thread.tags = [] all_threads = threads paginator = Paginator(threads, 10) page_num = request.GET.get('page') try: threads = paginator.page(page_num) except PageNotAnInteger: # If page is not an integer, deliver first page. threads = paginator.page(1) except EmptyPage: # If page is out of range (e.g. 9999), deliver last page of results. threads = paginator.page(paginator.num_pages) flash_messages = [] flash_msg = request.GET.get("msg") if flash_msg: flash_msg = { "type": FLASH_MESSAGES[flash_msg][0], "msg": FLASH_MESSAGES[flash_msg][1] } flash_messages.append(flash_msg) context = { 'mlist': mlist, 'current_page': page_num, 'search_form': search_form, 'threads': threads, 'participants': len(participants), 'months_list': get_months(store, mlist.name), 'flash_messages': flash_messages, } context.update(extra_context) return render(request, template_name, context)