chat v3
This commit is contained in:
SDE
2023-08-13 17:00:54 +03:00
parent af5ed27902
commit c1b8896799
2 changed files with 111 additions and 22 deletions

View File

@@ -11,14 +11,99 @@ from django.urls import reverse
import json
from datetime import datetime, time
def update_chat(data):
from AuthApp.models import User
res_Dict = {}
msgs = []
Dict = {}
context_Dict = {}
last_message_modifiedDT = None
required_beep = False
try:
if type(data) == str:
data = json.loads(data)
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(sender, 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 = sender.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:
# записываем данные в профиль
sender.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)
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)
res_Dict.update({'chat_html': chat_html})
required_beep = True
unreaded_msgs.update(status='seen')
res_Dict.update({
'required_beep': required_beep,
})
return res_Dict
except Exception as e:
msg = f'update_chat_ajax2 Error = {str(e)}'
return {'error': msg}
def send_msg(data):
from AuthApp.models import User
res_Dict = {}
msg = None
try:
data = json.loads(data)
if type(data) == str:
data = json.loads(data)
ticket = None
tpl_name = 'blocks/profile/b_messages_container.html'

View File

@@ -22,16 +22,7 @@ class ChatConsumer(WebsocketConsumer):
print(f'self.channel_name = {self.channel_name}')
self.accept()
def ws_send_msg(self, msg_type, group_name, msg):
msgDict = {
'type': msg_type,
'message': msg,
# 'sender': resDict['sender']
}
async_to_sync(self.channel_layer.group_send)(
group_name,
msgDict
)
def receive(self, text_data):
@@ -39,26 +30,36 @@ class ChatConsumer(WebsocketConsumer):
data = json.loads(text_data)
from .funcs import send_msg
Dict = send_msg(text_data)
sender = data['sender']
receiver = data['receiver']
from .funcs import send_msg, update_chat
send_msg(data)
Dict = update_chat(data)
group_name = f'user_{data["receiver"]}'
resDict = {
'type': 'echo',
'message': f'group = {group_name}',
'type': 'update_chat',
# 'message': Dict,
# 'sender': resDict['sender']
}
resDict.update(Dict)
group_name = f'user_{sender}'
async_to_sync(self.channel_layer.group_send)(
group_name,
resDict
)
data['sender'] = receiver
data['receiver'] = sender
Dict = update_chat(data)
group_name = f'user_{receiver}'
resDict = {
'type': 'echo',
'message': Dict,
'type': 'update_chat',
# 'message': Dict,
# 'sender': resDict['sender']
}
group_name = f'user_{data["sender"]}'
resDict.update(Dict)
async_to_sync(self.channel_layer.group_send)(
group_name,
resDict
@@ -69,9 +70,12 @@ class ChatConsumer(WebsocketConsumer):
self.send(text_data=json.dumps(data))
def update_chat(self, data):
print('ws update_chat')
self.send(text_data=json.dumps(data))
def ws_send_msg(self, data):
print('ws ws_send_msg')
data['type'] = 'chat'
self.send(text_data=json.dumps(data))