0.3.8
chat v3
This commit is contained in:
@@ -11,14 +11,99 @@ from django.urls import reverse
|
|||||||
import json
|
import json
|
||||||
from datetime import datetime, time
|
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):
|
def send_msg(data):
|
||||||
from AuthApp.models import User
|
from AuthApp.models import User
|
||||||
res_Dict = {}
|
res_Dict = {}
|
||||||
msg = None
|
msg = None
|
||||||
|
|
||||||
try:
|
try:
|
||||||
|
if type(data) == str:
|
||||||
data = json.loads(data)
|
data = json.loads(data)
|
||||||
ticket = None
|
ticket = None
|
||||||
|
|
||||||
tpl_name = 'blocks/profile/b_messages_container.html'
|
tpl_name = 'blocks/profile/b_messages_container.html'
|
||||||
|
|||||||
@@ -22,16 +22,7 @@ class ChatConsumer(WebsocketConsumer):
|
|||||||
print(f'self.channel_name = {self.channel_name}')
|
print(f'self.channel_name = {self.channel_name}')
|
||||||
self.accept()
|
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):
|
def receive(self, text_data):
|
||||||
@@ -39,26 +30,36 @@ class ChatConsumer(WebsocketConsumer):
|
|||||||
|
|
||||||
data = json.loads(text_data)
|
data = json.loads(text_data)
|
||||||
|
|
||||||
from .funcs import send_msg
|
sender = data['sender']
|
||||||
Dict = send_msg(text_data)
|
receiver = data['receiver']
|
||||||
|
|
||||||
|
from .funcs import send_msg, update_chat
|
||||||
|
send_msg(data)
|
||||||
|
Dict = update_chat(data)
|
||||||
|
|
||||||
group_name = f'user_{data["receiver"]}'
|
|
||||||
resDict = {
|
resDict = {
|
||||||
'type': 'echo',
|
'type': 'update_chat',
|
||||||
'message': f'group = {group_name}',
|
# 'message': Dict,
|
||||||
# 'sender': resDict['sender']
|
# 'sender': resDict['sender']
|
||||||
}
|
}
|
||||||
|
resDict.update(Dict)
|
||||||
|
group_name = f'user_{sender}'
|
||||||
async_to_sync(self.channel_layer.group_send)(
|
async_to_sync(self.channel_layer.group_send)(
|
||||||
group_name,
|
group_name,
|
||||||
resDict
|
resDict
|
||||||
)
|
)
|
||||||
|
|
||||||
|
data['sender'] = receiver
|
||||||
|
data['receiver'] = sender
|
||||||
|
Dict = update_chat(data)
|
||||||
|
|
||||||
|
group_name = f'user_{receiver}'
|
||||||
resDict = {
|
resDict = {
|
||||||
'type': 'echo',
|
'type': 'update_chat',
|
||||||
'message': Dict,
|
# 'message': Dict,
|
||||||
# 'sender': resDict['sender']
|
# 'sender': resDict['sender']
|
||||||
}
|
}
|
||||||
group_name = f'user_{data["sender"]}'
|
resDict.update(Dict)
|
||||||
async_to_sync(self.channel_layer.group_send)(
|
async_to_sync(self.channel_layer.group_send)(
|
||||||
group_name,
|
group_name,
|
||||||
resDict
|
resDict
|
||||||
@@ -69,9 +70,12 @@ class ChatConsumer(WebsocketConsumer):
|
|||||||
|
|
||||||
self.send(text_data=json.dumps(data))
|
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):
|
def ws_send_msg(self, data):
|
||||||
print('ws ws_send_msg')
|
print('ws ws_send_msg')
|
||||||
|
|
||||||
data['type'] = 'chat'
|
|
||||||
|
|
||||||
self.send(text_data=json.dumps(data))
|
self.send(text_data=json.dumps(data))
|
||||||
Reference in New Issue
Block a user