From aeb90e106e5315e1055e4abb0c4d8b94866ccafd Mon Sep 17 00:00:00 2001 From: SDE Date: Fri, 11 Aug 2023 22:55:57 +0300 Subject: [PATCH] 0.2.24 chat v2 --- ChatServiceApp/js_urls.py | 2 +- ChatServiceApp/js_views.py | 96 +++++++++++++++++++++++++++++++-- static/js/check_new_messages.js | 2 +- 3 files changed, 95 insertions(+), 5 deletions(-) diff --git a/ChatServiceApp/js_urls.py b/ChatServiceApp/js_urls.py index bc9535d..9650d9b 100644 --- a/ChatServiceApp/js_urls.py +++ b/ChatServiceApp/js_urls.py @@ -11,6 +11,6 @@ urlpatterns = [ path('create_ticket/', create_ticket_ajax, name='create_ticket_ajax'), path('support_show_chat_by_ticket/', support_show_chat_by_ticket_ajax, name='support_show_chat_by_ticket_ajax'), path('send_msg/', send_msg_ajax, name='send_msg_ajax'), - path('update_chat/', update_chat_ajax, name='update_chat_ajax'), + path('update_chat/', update_chat_ajax2, name='update_chat_ajax'), path('show_chat_w_user/', show_chat_w_user_ajax, name='show_chat_w_user_ajax'), ] \ No newline at end of file diff --git a/ChatServiceApp/js_views.py b/ChatServiceApp/js_views.py index e7a17f6..4481ead 100644 --- a/ChatServiceApp/js_views.py +++ b/ChatServiceApp/js_views.py @@ -27,9 +27,10 @@ def show_chat_w_user_ajax(request): data = json.loads(request.body) Dict = get_chat_page_content_Dict(request, data['user_id']) - tpl_name = 'blocks/profile/b_chats.html' + + html = render_to_string(tpl_name, Dict, request=request) return JsonResponse({'html': html}, status=200) @@ -38,6 +39,95 @@ def show_chat_w_user_ajax(request): return JsonResponse({'error': msg}, status=400) + +def update_chat_ajax2(request): + from AuthApp.models import User + + if request.method != 'POST': + raise Http404 + + res_Dict = {} + msgs = [] + Dict = {} + context_Dict = {} + + last_message_modifiedDT = None + + required_beep = False + + try: + + data = json.loads(request.body) + ticket = None + + tpl_name = 'blocks/profile/b_messages_container.html' + + + if 'ticket_id' in data and data['ticket_id'] and data['ticket_id'] != 'null': + ticket = MsgGroup.objects.get(id=data['ticket_id']) + + sender = User.objects.get(id=data['sender']) + receiver = None + if 'receiver' in data and data['receiver']: + receiver = User.objects.get(id=data['receiver']) + + context_Dict.update({'cur_receiver': receiver}) + + + if not ticket: + + # получаем правую панель с получателями + # получатели + receivers, unread_msgs_count = get_chat_receivers_for_user(request.user, receiver) + # собираем для сохранения в профиле + receivers_unread_msgs_count = sorted( + [{'id': item.id, 'unread_msgs_count': item.unread_msgs_count} for item in receivers], + key=lambda d: d['id']) + # забираем данные из профиля + saved_receivers_unread_msgs_count = request.user.user_profile.get_node_by_name( + 'receivers_unread_msgs_count') + # если данных нет или данные поменялись + if saved_receivers_unread_msgs_count == None or receivers_unread_msgs_count != saved_receivers_unread_msgs_count: + # записываем данные в профиль + request.user.user_profile.add_node_to_json_data( + {'receivers_unread_msgs_count': receivers_unread_msgs_count}, save=True) + # разрешаем сигнал + required_beep = True + + # формируем правую панель + context_Dict.update({'receivers': receivers}) + users_list_html = render_to_string( + 'blocks/profile/b_list_of_users_messenger.html', context_Dict, request=request) + res_Dict.update({ + 'users_list_html': users_list_html, + 'unread_msgs_count': unread_msgs_count + }) + + + if sender and receiver: + msgs = get_msgs_for_chat_w_users(sender, receiver) + unreaded_msgs = msgs.filter(status='sended') + if msgs and unreaded_msgs: + context_Dict.update({'messages': msgs}) + chat_html = render_to_string(tpl_name, context_Dict, request=request) + res_Dict.update({'chat_html': chat_html}) + required_beep = True + unreaded_msgs.update(status='seen') + + + + res_Dict.update({ + 'required_beep': required_beep, + }) + return JsonResponse(res_Dict, status=200) + + except Exception as e: + msg = f'update_chat_ajax2 Error = {str(e)}' + return JsonResponse({'error': msg}, status=400) + + + + def update_chat_ajax(request): from AuthApp.models import User @@ -111,7 +201,7 @@ def update_chat_ajax(request): }) # если есть получатель - получаем сообщения чата - if receiver == request.user: + if receiver: msgs = get_msgs_for_chat_w_users(sender, receiver) unreaded_msgs = msgs.filter(status='sended') if msgs and unreaded_msgs: @@ -135,7 +225,7 @@ def update_chat_ajax(request): return JsonResponse(res_Dict, status=200) except Exception as e: - msg = f'send_msg_ajax Error = {str(e)}' + msg = f'update_chat_ajax Error = {str(e)}' return JsonResponse({'error': msg}, status=400) diff --git a/static/js/check_new_messages.js b/static/js/check_new_messages.js index ec38b48..d3eb8ac 100644 --- a/static/js/check_new_messages.js +++ b/static/js/check_new_messages.js @@ -25,7 +25,7 @@ function funcFocus(){ var check_msg = null var it = 0 -var short_timeout = 5000 +var short_timeout = 50000 var long_timeout = 60000 // function initial_function (){