0.2.7
chat v2
This commit is contained in:
@@ -1,7 +1,8 @@
|
|||||||
import json
|
import json
|
||||||
import datetime
|
import datetime
|
||||||
from django.http import HttpResponse
|
from django.http import HttpResponse, JsonResponse
|
||||||
from django.conf import settings
|
from django.conf import settings
|
||||||
|
from django.utils.deprecation import MiddlewareMixin
|
||||||
|
|
||||||
|
|
||||||
def set_cookie(response, key, value, days_expire=7):
|
def set_cookie(response, key, value, days_expire=7):
|
||||||
@@ -25,32 +26,63 @@ def set_cookie(response, key, value, days_expire=7):
|
|||||||
return response
|
return response
|
||||||
|
|
||||||
class ResponseInterceptionMiddleware:
|
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):
|
def __init__(self, get_response):
|
||||||
self.get_response = get_response
|
self.get_response = get_response
|
||||||
# One-time configuration and initialization.
|
|
||||||
|
|
||||||
def __call__(self, request):
|
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)
|
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
|
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
|
||||||
|
|
||||||
|
|||||||
@@ -25,27 +25,29 @@ def registration_View(request):
|
|||||||
|
|
||||||
@login_required(login_url='/profile/login/')
|
@login_required(login_url='/profile/login/')
|
||||||
def chat_w_user_View(request, user_id=None):
|
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_chat_msgs = None
|
||||||
cur_receiver = User.objects.get(id=user_id)
|
#
|
||||||
if not cur_receiver in receivers:
|
# try:
|
||||||
receivers.insert(0, cur_receiver)
|
# cur_receiver = User.objects.get(id=user_id)
|
||||||
cur_chat_msgs = get_msgs_for_chat_w_users(request.user, cur_receiver)
|
# if not cur_receiver in receivers:
|
||||||
except User.DoesNotExist:
|
# receivers.insert(0, cur_receiver)
|
||||||
cur_receiver = None
|
# 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,
|
# Dict = {
|
||||||
'receivers': receivers,
|
# 'page': 'chat',
|
||||||
'messages':cur_chat_msgs
|
# 'cur_receiver': cur_receiver,
|
||||||
}
|
# 'receivers': receivers,
|
||||||
|
# 'messages':cur_chat_msgs
|
||||||
|
# }
|
||||||
|
|
||||||
t = loader.get_template('pages/profile/p_user_profile.html')
|
t = loader.get_template('pages/profile/p_user_profile.html')
|
||||||
return HttpResponse(t.render(Dict, request))
|
return HttpResponse(t.render(Dict, request))
|
||||||
|
|||||||
@@ -2,6 +2,30 @@ from .models import *
|
|||||||
from django.db.models import Q
|
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):
|
def get_msgs_for_chat_w_users(user1, user2):
|
||||||
|
|
||||||
msgs = Message.objects.filter(
|
msgs = Message.objects.filter(
|
||||||
@@ -12,17 +36,35 @@ def get_msgs_for_chat_w_users(user1, user2):
|
|||||||
return msgs
|
return msgs
|
||||||
|
|
||||||
def get_chat_receivers_for_user(user):
|
def get_chat_receivers_for_user(user):
|
||||||
receivers = Message.objects.filter(
|
msgs = Message.objects.filter(
|
||||||
Q(sender=user) | Q(receiver=user),
|
Q(sender=user) | Q(receiver=user),
|
||||||
group=None
|
group=None
|
||||||
).order_by('-modifiedDT')#.select_related('sender', 'receiver').values('sender', 'receiver').distinct()
|
).order_by('-modifiedDT')#.select_related('sender', 'receiver').values('sender', 'receiver').distinct()
|
||||||
|
|
||||||
receivers_list = []
|
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):
|
def get_messages_for_ticket(ticket):
|
||||||
return ticket.rel_messages_for_group.filter(enable=True).order_by('-modifiedDT')
|
return ticket.rel_messages_for_group.filter(enable=True).order_by('-modifiedDT')
|
||||||
|
|||||||
@@ -25,17 +25,21 @@ def show_chat_w_user_ajax(request):
|
|||||||
try:
|
try:
|
||||||
|
|
||||||
data = json.loads(request.body)
|
data = json.loads(request.body)
|
||||||
|
Dict = get_chat_page_content_Dict(request, data['user_id'])
|
||||||
|
|
||||||
from AuthApp.models import User
|
# from AuthApp.models import User
|
||||||
cur_receiver = User.objects.get(id=data['user_id'])
|
# cur_receiver = User.objects.get(id=data['user_id'])
|
||||||
|
#
|
||||||
receivers = get_chat_receivers_for_user(request.user)
|
# receivers = get_chat_receivers_for_user(request.user)
|
||||||
|
#
|
||||||
Dict = {
|
# msgs = get_msgs_for_chat_w_users(request.user, cur_receiver)
|
||||||
'cur_receiver': cur_receiver,
|
# msgs.filter(receiver=request.user).update(status='seen')
|
||||||
'messages': get_msgs_for_chat_w_users(request.user, cur_receiver),
|
#
|
||||||
'receivers': receivers,
|
# Dict = {
|
||||||
}
|
# 'cur_receiver': cur_receiver,
|
||||||
|
# 'messages': msgs,
|
||||||
|
# 'receivers': receivers,
|
||||||
|
# }
|
||||||
|
|
||||||
tpl_name = 'blocks/profile/b_chats.html'
|
tpl_name = 'blocks/profile/b_chats.html'
|
||||||
|
|
||||||
|
|||||||
@@ -7,9 +7,11 @@
|
|||||||
</div>
|
</div>
|
||||||
<div class="center-part-tab-user">
|
<div class="center-part-tab-user">
|
||||||
<span class="user_name_messenger">{{ item.last_name }} {{ item.first_name }}</span>
|
<span class="user_name_messenger">{{ item.last_name }} {{ item.first_name }}</span>
|
||||||
<span class="last-message-messenger-user-tab">{{ item.id }}</span>
|
<span class="last-message-messenger-user-tab">{{ item.last_msg }}</span>
|
||||||
</div>
|
|
||||||
<div class="right-part-tab-user">
|
|
||||||
<div class="cost-messages-in-user-tab-messenger"><span>1</span></div>
|
|
||||||
</div>
|
</div>
|
||||||
|
{% if item.unread_msgs_count %}
|
||||||
|
<div class="right-part-tab-user">
|
||||||
|
<div class="cost-messages-in-user-tab-messenger"><span>{{ item.unread_msgs_count }}</span></div>
|
||||||
|
</div>
|
||||||
|
{% endif %}
|
||||||
</div>
|
</div>
|
||||||
Reference in New Issue
Block a user