From 80df52cb982b6858d3d20b04e1a32073b1a530c4 Mon Sep 17 00:00:00 2001 From: Evgeny Fadeev Date: Fri, 28 Sep 2012 08:18:58 -0300 Subject: threads can be now deleted and restored --- group_messaging/views.py | 57 +++++++++++++++++++++++++++++++++++++++++++----- 1 file changed, 51 insertions(+), 6 deletions(-) (limited to 'group_messaging/views.py') diff --git a/group_messaging/views.py b/group_messaging/views.py index 289961ff..ef95e1d5 100644 --- a/group_messaging/views.py +++ b/group_messaging/views.py @@ -18,6 +18,7 @@ from django.http import HttpResponseNotAllowed from django.http import HttpResponseForbidden from django.utils import simplejson from group_messaging.models import Message +from group_messaging.models import MessageMemo from group_messaging.models import SenderList from group_messaging.models import LastVisitTime from group_messaging.models import get_personal_group_by_user_id @@ -139,6 +140,7 @@ class PostReply(InboxView): template_name='group_messaging/stored_message.html' ) + class ThreadsList(InboxView): """shows list of threads for a given user""" template_name = 'group_messaging/threads_list.html' @@ -147,11 +149,13 @@ class ThreadsList(InboxView): def get_context(self, request): """returns thread list data""" #get threads and the last visit time - threads = Message.objects.get_threads_for_user(request.user) - - sender_id = IntegerField().clean(request.GET.get('sender_id', '-1')) - if sender_id != -1: - threads = threads.filter(sender__id=sender_id) + sender_id = IntegerField().clean(request.REQUEST.get('sender_id', '-1')) + if sender_id == -2: + threads = Message.objects.get_threads_for_user(request.user, deleted=True) + else: + threads = Message.objects.get_threads_for_user(request.user) + if sender_id != -1: + threads = threads.filter(sender__id=sender_id) #for each thread we need to know if there is something #unread for the user - to mark "new" threads as bold @@ -179,7 +183,48 @@ class ThreadsList(InboxView): #after we have all the data - update the last visit time last_visit_times.update(at=datetime.datetime.now()) - return {'threads': threads, 'threads_data': threads_data} + return { + 'threads': threads, + 'threads_data': threads_data, + 'sender_id': sender_id + } + + +class DeleteOrRestoreThread(ThreadsList): + """subclassing :class:`ThreadsList`, because deletion + or restoring of thread needs subsequent refreshing + of the threads list""" + + http_method_list = ('POST',) + + def post(self, request, thread_id=None): + """process the post request: + * delete or restore thread + * recalculate the threads list and return it for display + by reusing the threads list "get" function + """ + #part of the threads list context + sender_id = IntegerField().clean(request.POST['sender_id']) + + #a little cryptic, but works - sender_id==-2 means deleted post + if sender_id == -2: + action = 'restore' + else: + action = 'delete' + + thread = Message.objects.get(id=thread_id) + memo, created = MessageMemo.objects.get_or_create( + user=request.user, + message=thread + ) + if action == 'delete': + memo.status = MessageMemo.ARCHIVED + else: + memo.status = MessageMemo.SEEN + memo.save() + + context = self.get_context(request) + return self.render_to_response(context) class SendersList(InboxView): -- cgit v1.2.3-1-g7c22 From 2aee5589e90cd11edb016e2b96dd84567a4630d2 Mon Sep 17 00:00:00 2001 From: Evgeny Fadeev Date: Fri, 5 Oct 2012 02:18:05 -0400 Subject: display of deleted and new threads seems to work correctly --- group_messaging/views.py | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) (limited to 'group_messaging/views.py') diff --git a/group_messaging/views.py b/group_messaging/views.py index ef95e1d5..e503c741 100644 --- a/group_messaging/views.py +++ b/group_messaging/views.py @@ -151,11 +151,18 @@ class ThreadsList(InboxView): #get threads and the last visit time sender_id = IntegerField().clean(request.REQUEST.get('sender_id', '-1')) if sender_id == -2: - threads = Message.objects.get_threads_for_user(request.user, deleted=True) + threads = Message.objects.get_threads( + recipient=request.user, + deleted=True + ) + elif sender_id == -1: + threads = Message.objects.get_threads(recipient=request.user) else: - threads = Message.objects.get_threads_for_user(request.user) - if sender_id != -1: - threads = threads.filter(sender__id=sender_id) + sender = User.objects.get(id=sender_id) + threads = Message.objects.get_threads( + recipient=request.user, + sender=sender + ) #for each thread we need to know if there is something #unread for the user - to mark "new" threads as bold -- cgit v1.2.3-1-g7c22 From 66bf778fbac0736272c03870d996a7d14d528b8d Mon Sep 17 00:00:00 2001 From: Evgeny Fadeev Date: Fri, 5 Oct 2012 02:34:12 -0400 Subject: most recently edited threads are on top --- group_messaging/views.py | 2 ++ 1 file changed, 2 insertions(+) (limited to 'group_messaging/views.py') diff --git a/group_messaging/views.py b/group_messaging/views.py index e503c741..357c6457 100644 --- a/group_messaging/views.py +++ b/group_messaging/views.py @@ -164,6 +164,8 @@ class ThreadsList(InboxView): sender=sender ) + threads = threads.order_by('-last_active_at') + #for each thread we need to know if there is something #unread for the user - to mark "new" threads as bold threads_data = dict() -- cgit v1.2.3-1-g7c22 From ab74eca2141a17f2624790c86df2e3b7e36f5f4c Mon Sep 17 00:00:00 2001 From: Evgeny Fadeev Date: Fri, 5 Oct 2012 04:11:39 -0400 Subject: added test cases for bolding of headline for new updates and for updating the headline text on responses --- group_messaging/views.py | 2 -- 1 file changed, 2 deletions(-) (limited to 'group_messaging/views.py') diff --git a/group_messaging/views.py b/group_messaging/views.py index 357c6457..3d973dbe 100644 --- a/group_messaging/views.py +++ b/group_messaging/views.py @@ -190,8 +190,6 @@ class ThreadsList(InboxView): if thread_data['thread'].last_active_at <= last_visit.at: thread_data['status'] = 'seen' - #after we have all the data - update the last visit time - last_visit_times.update(at=datetime.datetime.now()) return { 'threads': threads, 'threads_data': threads_data, -- cgit v1.2.3-1-g7c22 From c522c86525b17486c114711a97550264dddcce80 Mon Sep 17 00:00:00 2001 From: Evgeny Fadeev Date: Mon, 8 Oct 2012 01:36:23 -0400 Subject: added sent mailbox, message counts in threads, fixed some bugs and added test cases --- group_messaging/views.py | 23 +++++++++++++++++++++-- 1 file changed, 21 insertions(+), 2 deletions(-) (limited to 'group_messaging/views.py') diff --git a/group_messaging/views.py b/group_messaging/views.py index 3d973dbe..cd1a74d3 100644 --- a/group_messaging/views.py +++ b/group_messaging/views.py @@ -12,6 +12,7 @@ import copy import datetime from coffin.template.loader import get_template from django.contrib.auth.models import User +from django.db import models from django.forms import IntegerField from django.http import HttpResponse from django.http import HttpResponseNotAllowed @@ -105,7 +106,12 @@ class NewThread(InboxView): if missing: result['success'] = False result['missing_users'] = missing - else: + + if request.user.username in usernames: + result['success'] = False + result['self_message'] = True + + if result.get('success', True): recipients = get_personal_groups_for_users(users) message = Message.objects.create_thread( sender=request.user, @@ -157,6 +163,8 @@ class ThreadsList(InboxView): ) elif sender_id == -1: threads = Message.objects.get_threads(recipient=request.user) + elif sender_id == request.user.id: + threads = Message.objects.get_sent_threads(sender=request.user) else: sender = User.objects.get(id=sender_id) threads = Message.objects.get_threads( @@ -181,6 +189,17 @@ class ThreadsList(InboxView): thread_data['thread'] = thread threads_data[thread.id] = thread_data + ids = [thread.id for thread in threads] + counts = Message.objects.filter( + id__in=ids + ).annotate( + responses_count=models.Count('descendants') + ).values('id', 'responses_count') + for count in counts: + thread_id = count['id'] + responses_count = count['responses_count'] + threads_data[thread_id]['responses_count'] = responses_count + last_visit_times = LastVisitTime.objects.filter( user=request.user, message__in=threads @@ -243,7 +262,7 @@ class SendersList(InboxView): """get data about senders for the user""" senders = SenderList.objects.get_senders_for_user(request.user) senders = senders.values('id', 'username') - return {'senders': senders} + return {'senders': senders, 'request_user_id': request.user.id} class ThreadDetails(InboxView): -- cgit v1.2.3-1-g7c22 From c1bc0f1330df63f04681a8d58b8cfec365f48a3c Mon Sep 17 00:00:00 2001 From: Evgeny Fadeev Date: Tue, 9 Oct 2012 14:35:16 -0400 Subject: added messages count to inbox --- group_messaging/views.py | 1 + 1 file changed, 1 insertion(+) (limited to 'group_messaging/views.py') diff --git a/group_messaging/views.py b/group_messaging/views.py index cd1a74d3..d4d646ec 100644 --- a/group_messaging/views.py +++ b/group_messaging/views.py @@ -211,6 +211,7 @@ class ThreadsList(InboxView): return { 'threads': threads, + 'threads_count': threads.count(), 'threads_data': threads_data, 'sender_id': sender_id } -- cgit v1.2.3-1-g7c22