diff --git a/AuthApp/middleware.py b/AuthApp/middleware.py index 7f34273..f2333d1 100644 --- a/AuthApp/middleware.py +++ b/AuthApp/middleware.py @@ -1,7 +1,8 @@ import json import datetime -from django.http import HttpResponse +from django.http import HttpResponse, JsonResponse from django.conf import settings +from django.utils.deprecation import MiddlewareMixin def set_cookie(response, key, value, days_expire=7): @@ -25,32 +26,63 @@ def set_cookie(response, key, value, days_expire=7): return response class ResponseInterceptionMiddleware: - # def __init__(self, get_response): - # self.get_response = get_response - # - # def __call__(self, request): - # return self.get_response(request) - # def process_request(self, request): def __init__(self, get_response): self.get_response = get_response - # One-time configuration and initialization. def __call__(self, request): - # Code to be executed for each request before - # the view (and later middleware) are called. - - if request.user.is_authenticated: - request = request.user.user_profile.save_user_alerts_to_session(request) - response = self.get_response(request) - if request.user.is_authenticated: - for_save_to_session = request.user.user_profile.pop_node_by_name('for_save_to_session') - if for_save_to_session: - for key, val in for_save_to_session.items(): - set_cookie(response, key, json.dumps(val), 30) - - # Code to be executed for each request/response after - # the view is called. + try: + if type(response) == JsonResponse: + for_save_to_session = request.user.user_profile.pop_node_by_name('for_save_to_session') + if for_save_to_session: + data = json.loads(response.content) + data.update(for_save_to_session) + response.content = json.dumps(data) + except Exception as e: + msg = f'ResponseInterceptionMiddleware error = {str(e)}' + print(msg) + # if 'errors' in response.data: + # response.data.update({'success': False}) + # print(response.data) return response + # def process_view(self, request, view_func, *view_args, **view_kwargs): + # + # if request.user.is_authenticated and request.body: + # for_save_to_session = request.user.user_profile.pop_node_by_name('for_save_to_session') + # if for_save_to_session: + # data = json.loads(request.body) + # data.update(for_save_to_session) + # + # # request_data = getattr(request, '_body', request.body) + # # request_data = json.loads(request_data) + # # # here you can write the logic to append the payload to request data + # request._body = json.dumps(data) + # return None + + # def __call__(self, request): + # # Code to be executed for each request before + # # the view (and later middleware) are called. + # + # if request.user.is_authenticated and request.body: + # for_save_to_session = request.user.user_profile.pop_node_by_name('for_save_to_session') + # if for_save_to_session: + # data = json.loads(request.body) + # data.update(for_save_to_session) + # request._body = json.dumps(data) + # # return JsonResponse(data) + # # request = request.user.user_profile.save_user_alerts_to_session(request) + # + # response = self.get_response(request) + # # if request.user.is_authenticated: + # # for_save_to_session = request.user.user_profile.pop_node_by_name('for_save_to_session') + # # if for_save_to_session: + # # for key, val in for_save_to_session.items(): + # # set_cookie(response, key, json.dumps(val), 30) + # + # # Code to be executed for each request/response after + # # the view is called. + # + # return response + diff --git a/AuthApp/views.py b/AuthApp/views.py index af9ead1..0ddd074 100644 --- a/AuthApp/views.py +++ b/AuthApp/views.py @@ -25,27 +25,29 @@ def registration_View(request): @login_required(login_url='/profile/login/') def chat_w_user_View(request, user_id=None): - from ChatServiceApp.funcs import get_chat_receivers_for_user, get_msgs_for_chat_w_users + from ChatServiceApp.funcs import get_chat_page_content_Dict - receivers = get_chat_receivers_for_user(request.user) + # receivers = get_chat_receivers_for_user(request.user) - cur_chat_msgs = None + Dict = get_chat_page_content_Dict(request, user_id) - try: - cur_receiver = User.objects.get(id=user_id) - if not cur_receiver in receivers: - receivers.insert(0, cur_receiver) - cur_chat_msgs = get_msgs_for_chat_w_users(request.user, cur_receiver) - except User.DoesNotExist: - cur_receiver = None - - - Dict = { - 'page': 'chat', - 'cur_receiver': cur_receiver, - 'receivers': receivers, - 'messages':cur_chat_msgs - } + # cur_chat_msgs = None + # + # try: + # cur_receiver = User.objects.get(id=user_id) + # if not cur_receiver in receivers: + # receivers.insert(0, cur_receiver) + # cur_chat_msgs = get_msgs_for_chat_w_users(request.user, cur_receiver) + # except User.DoesNotExist: + # cur_receiver = None + # + # + # Dict = { + # 'page': 'chat', + # 'cur_receiver': cur_receiver, + # 'receivers': receivers, + # 'messages':cur_chat_msgs + # } t = loader.get_template('pages/profile/p_user_profile.html') return HttpResponse(t.render(Dict, request)) diff --git a/ChatServiceApp/funcs.py b/ChatServiceApp/funcs.py index 423014f..9979d64 100644 --- a/ChatServiceApp/funcs.py +++ b/ChatServiceApp/funcs.py @@ -2,6 +2,30 @@ from .models import * from django.db.models import Q +def get_chat_page_content_Dict(request, receiver_id=None): + from AuthApp.models import User + + msgs = [] + try: + cur_receiver = User.objects.get(id=receiver_id) + + msgs = get_msgs_for_chat_w_users(request.user, cur_receiver) + msgs.filter(receiver=request.user).update(status='seen') + + except User.DoesNotExist: + cur_receiver = None + + receivers = get_chat_receivers_for_user(request.user) + + Dict = { + 'cur_receiver': cur_receiver, + 'messages': msgs, + 'receivers': receivers, + 'page': 'chat', + } + return Dict + + def get_msgs_for_chat_w_users(user1, user2): msgs = Message.objects.filter( @@ -12,17 +36,35 @@ def get_msgs_for_chat_w_users(user1, user2): return msgs def get_chat_receivers_for_user(user): - receivers = Message.objects.filter( + msgs = Message.objects.filter( Q(sender=user) | Q(receiver=user), group=None ).order_by('-modifiedDT')#.select_related('sender', 'receiver').values('sender', 'receiver').distinct() receivers_list = [] - receivers_list.extend((item.sender for item in receivers if item.sender != user)) - receivers_list.extend((item.receiver for item in receivers if item.receiver != user)) - return list(set(receivers_list)) + for msg in msgs: + if msg.receiver not in receivers_list and msg.receiver != user: + msg.receiver.unread_msgs_count = 0 + msg.receiver.last_msg = msg.text + receivers_list.append(msg.receiver) + if msg.sender not in receivers_list and msg.sender != user: + msg.sender.unread_msgs_count = 0 + receivers_list.append(msg.sender) + msg.sender.last_msg = msg.text + + if msg.receiver == user: + if msg.status == 'sended': + i = receivers_list.index(msg.sender) + receivers_list[i].unread_msgs_count += 1 + + return receivers_list + + # receivers_list.extend((item.sender for item in receivers if item.sender != user)) + # receivers_list.extend((item.receiver for item in receivers if item.receiver != user)) + # + # return list(set(receivers_list)) def get_messages_for_ticket(ticket): return ticket.rel_messages_for_group.filter(enable=True).order_by('-modifiedDT') diff --git a/ChatServiceApp/js_views.py b/ChatServiceApp/js_views.py index 51fd327..a353d59 100644 --- a/ChatServiceApp/js_views.py +++ b/ChatServiceApp/js_views.py @@ -25,17 +25,21 @@ def show_chat_w_user_ajax(request): try: data = json.loads(request.body) + Dict = get_chat_page_content_Dict(request, data['user_id']) - from AuthApp.models import User - cur_receiver = User.objects.get(id=data['user_id']) - - receivers = get_chat_receivers_for_user(request.user) - - Dict = { - 'cur_receiver': cur_receiver, - 'messages': get_msgs_for_chat_w_users(request.user, cur_receiver), - 'receivers': receivers, - } + # from AuthApp.models import User + # cur_receiver = User.objects.get(id=data['user_id']) + # + # receivers = get_chat_receivers_for_user(request.user) + # + # msgs = get_msgs_for_chat_w_users(request.user, cur_receiver) + # msgs.filter(receiver=request.user).update(status='seen') + # + # Dict = { + # 'cur_receiver': cur_receiver, + # 'messages': msgs, + # 'receivers': receivers, + # } tpl_name = 'blocks/profile/b_chats.html' diff --git a/templates/widgets/w_chat_right_panel_user.html b/templates/widgets/w_chat_right_panel_user.html index 20a76ff..3c9c33a 100644 --- a/templates/widgets/w_chat_right_panel_user.html +++ b/templates/widgets/w_chat_right_panel_user.html @@ -7,9 +7,11 @@
{{ item.last_name }} {{ item.first_name }} - {{ item.id }} -
-
-
1
+ {{ item.last_msg }}
+ {% if item.unread_msgs_count %} +
+
{{ item.unread_msgs_count }}
+
+ {% endif %} \ No newline at end of file