diff --git a/AuthApp/js_views.py b/AuthApp/js_views.py index 43a58ea..1824596 100644 --- a/AuthApp/js_views.py +++ b/AuthApp/js_views.py @@ -31,7 +31,7 @@ def chats_ajax(request): from ChatServiceApp.funcs import get_chat_receivers_for_user, get_msgs_for_chat_w_users - receivers = get_chat_receivers_for_user(request.user) + receivers, unread_msgs_count = get_chat_receivers_for_user(request.user) cur_chat_msgs = None diff --git a/ChatServiceApp/funcs.py b/ChatServiceApp/funcs.py index c665e3b..998fec6 100644 --- a/ChatServiceApp/funcs.py +++ b/ChatServiceApp/funcs.py @@ -15,7 +15,7 @@ def get_chat_page_content_Dict(request, receiver_id=None): except User.DoesNotExist: cur_receiver = None - receivers = get_chat_receivers_for_user(request.user) + receivers, unread_msgs_count = get_chat_receivers_for_user(request.user) Dict = { 'cur_receiver': cur_receiver, @@ -35,7 +35,7 @@ def get_msgs_for_chat_w_users(user1, user2): ).order_by('-modifiedDT') return msgs -def get_chat_receivers_for_user(user): +def get_chat_receivers_for_user(user, cur_receiver=None): msgs = Message.objects.filter( Q(sender=user) | Q(receiver=user), group=None @@ -43,6 +43,7 @@ def get_chat_receivers_for_user(user): receivers_list = [] + unread_msgs_count = 0 for msg in msgs: if msg.receiver not in receivers_list and msg.receiver != user: @@ -54,12 +55,13 @@ def get_chat_receivers_for_user(user): receivers_list.append(msg.sender) msg.sender.last_msg = msg.text - if msg.receiver == user: + if msg.receiver == user and (not cur_receiver or msg.sender != cur_receiver): if msg.status == 'sended': i = receivers_list.index(msg.sender) receivers_list[i].unread_msgs_count += 1 + unread_msgs_count += 1 - return receivers_list + return receivers_list, unread_msgs_count # 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)) diff --git a/ChatServiceApp/js_views.py b/ChatServiceApp/js_views.py index 4cf866f..d30badf 100644 --- a/ChatServiceApp/js_views.py +++ b/ChatServiceApp/js_views.py @@ -51,6 +51,8 @@ def update_chat_ajax(request): last_message_modifiedDT = None + required_beep = False + try: data = json.loads(request.body) @@ -70,7 +72,7 @@ def update_chat_ajax(request): if 'receiver' in data and data['receiver']: receiver = User.objects.get(id=data['receiver']) - res_Dict.update({'cur_receiver': receiver}) + context_Dict.update({'cur_receiver': receiver}) if ticket: @@ -84,32 +86,49 @@ def update_chat_ajax(request): tickets_list_html = render_to_string( 'blocks/profile/b_list_of_tickets_support_chat.html', context_Dict, request=request) - res_Dict.update({'tickets_list_html': tickets_list_html}) + res_Dict.update({ + 'tickets_list_html': tickets_list_html, + 'msgs_count': len(msgs) + }) else: + + # получаем правую панель с получателями + receivers, unread_msgs_count = get_chat_receivers_for_user(request.user, receiver) + saved_unread_msgs_count = request.user.user_profile.get_node_by_name('receivers_unread_msgs_count') + if saved_unread_msgs_count == None or saved_unread_msgs_count != unread_msgs_count: + request.user.user_profile.add_node_to_json_data({'receivers_unread_msgs_count': unread_msgs_count}, save=True) + # if unread_msgs_count: + 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 receiver: msgs = get_msgs_for_chat_w_users(sender, receiver) - context_Dict.update({'messages': msgs}) - chat_html = render_to_string(tpl_name, context_Dict, request=request) - res_Dict.update({'chat_html': chat_html}) + 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') - # получаем правую панель с получателями - receivers = get_chat_receivers_for_user(request.user) - 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}) - - if not msgs or (request.user != msgs[0].receiver) or (not msgs and not last_message_modifiedDT) or (msgs and last_message_modifiedDT and msgs[0].modifiedDT <= last_message_modifiedDT): - Dict.update({ - 'required_beep': False - }) - return JsonResponse(Dict, status=200) + # if not msgs or (request.user != msgs[0].receiver) or (not msgs and not last_message_modifiedDT) or (msgs and last_message_modifiedDT and msgs[0].modifiedDT <= last_message_modifiedDT): + # Dict.update({ + # 'required_beep': False + # }) + # return JsonResponse(Dict, status=200) res_Dict.update({ - 'required_beep': True, + 'required_beep': required_beep, }) return JsonResponse(res_Dict, status=200) @@ -206,7 +225,7 @@ def send_msg_ajax(request): else: msgs = get_msgs_for_chat_w_users(sender, receiver) - receivers = get_chat_receivers_for_user(request.user) + receivers, unread_msgs_count = get_chat_receivers_for_user(request.user) res_Dict.update({ diff --git a/GeneralApp/views.py b/GeneralApp/views.py index 6b847a5..93b2e65 100644 --- a/GeneralApp/views.py +++ b/GeneralApp/views.py @@ -11,9 +11,9 @@ from django.conf import settings def MainPage(request): - from ReferenceDataApp.funcs import parse_data, search_cities_in_db, search_airports_in_db - res = search_airports_in_db('ang') - res = parse_data() + # from ReferenceDataApp.funcs import parse_data, search_cities_in_db, search_airports_in_db + # res = search_airports_in_db('ang') + # res = parse_data() page = StaticPage.objects.get(url='main') diff --git a/static/js/check_new_messages.js b/static/js/check_new_messages.js index 0c8e535..d8e05b2 100644 --- a/static/js/check_new_messages.js +++ b/static/js/check_new_messages.js @@ -8,11 +8,16 @@ window.onload = function () { // ) function funcFocus(){ - - let inp = document.querySelector(".enter-message-inp") - if (inp !== null){ - inp.focus() + let window = document.querySelector(".container-messages") + if (window !== null){ + let inp = document.querySelector(".enter-message-inp") + if (inp !== null){ + inp.focus() + } + } else{ + check_new_messages_timeout(60000) } + } @@ -54,6 +59,7 @@ function check_new_messages_timeout(timeout_time=1000){ // let user_online = userOnline('set') window = document.querySelector(".container-messages") if (window === null){ + check_new_messages(window,true) // let new_timeout_time = 60000 // // check_new_messages_timeout(new_timeout_time,it_set_func,it_func) @@ -63,7 +69,7 @@ function check_new_messages_timeout(timeout_time=1000){ // it_func++ // check_new_messages_timeout(new_timeout_time,it_set_func,it_func) // } - check_new_messages(window) + check_new_messages(window,false) } }, @@ -75,17 +81,25 @@ function check_new_messages_timeout(timeout_time=1000){ var data_new_messages = null -function check_new_messages (window){ +function check_new_messages (window,only_sender_mode){ // if (it === 0){ - let data_set = document.querySelector(".container-messages").dataset - let sender = data_set['userId']; - let receiver = data_set['curReceiver']; - let ticket_id = data_set['ticketId']; - data_new_messages = { - 'sender': sender, - 'receiver': receiver, - 'ticket_id': ticket_id - // 'last_message_modifiteDT':last_message_time + if (only_sender_mode === false){ + let data_set = document.querySelector(".container-messages").dataset + let sender = data_set['userId']; + let receiver = data_set['curReceiver']; + let ticket_id = data_set['ticketId']; + data_new_messages = { + 'sender': sender, + 'receiver': receiver, + 'ticket_id': ticket_id + // 'last_message_modifiteDT':last_message_time + } + } else { + let profile_data_set = document.querySelector(".button_profile_header").dataset + let sender = profile_data_set['userId'] + data_new_messages = { + 'sender': sender + } } // } // let user_online_check = document.addEventListener("mouseover"); @@ -125,35 +139,50 @@ function check_new_messages (window){ function success_check_new_messages (data) { + let window = document.querySelector(".container-messages") if (window === null){ clearTimeout(check_msg) } else { - if (data.html) { - if (data_new_messages['ticket_id'] !== 'null') { + if (data !== null) { + if (data_new_messages['ticket_id'] && data_new_messages['ticket_id'] !== "null") { if (data.msgs_count > 1) { - document.querySelector(".container-messages").innerHTML = data.html; + if (document.querySelector(".container-messages")) { + document.querySelector(".container-messages").innerHTML = data.html; + } + else if (data.tickets_list_html){ + if (document.querySelector(".block-list-of-users")) { + document.querySelector(".block-list-of-users").innerHTML = data.tickets_list_html + } + } + } else { document.querySelector(".info_profile").innerHTML = data.html; } - } else { - document.querySelector(".container-messages").innerHTML = data.html; } + + else if (data.chat_html) { + if (document.querySelector(".container-messages")) { + document.querySelector(".container-messages").innerHTML = data.chat_html; + } + if (data.users_list_html){ + if (document.querySelector(".block-list-of-users")) { + document.querySelector(".block-list-of-users").innerHTML = data.users_list_html; + } + } + } + + + if (data.required_beep === true){ + const beep = new Audio('/static/sounds/beep_2.mp3') + beep.play() + + } + + } - if (data.users_list_html){ - document.querySelector(".block-list-of-users").innerHTML = data.users_list_html.html; - } - } - if (data.required_beep === true){ - const beep = new Audio('/static/sounds/beep_2.mp3') - beep.play() } - if (data.users_list_html){ - document.querySelector(".block-list-of-users").innerHTML = data.users_list_html - } - if (data.tickets_list_html){ - document.querySelector(".block-list-of-users").innerHTML = data.tickets_list_html - } + // let updatedCookie = encodeURIComponent(name_cookie) + "=" + encodeURIComponent(''); // let search_cookie = document.cookie.match("(^|[^;]+)\s*" + name_cookie + "\s*=\s*([^;]+)")[0].substring(1) // let search_cookie = getCookieValue('user_alerts') diff --git a/static/js/global_js.js b/static/js/global_js.js index 1de5624..b5ae68a 100644 --- a/static/js/global_js.js +++ b/static/js/global_js.js @@ -4,11 +4,20 @@ $(document).ready(function (){ function getNewMessageSession(){ let window_messages = document.querySelector(".container-messages") + let new_timeout_time; if (window_messages !== null){ - check_new_messages(window) + // check_new_messages(window) + new_timeout_time = 1000 + } else { + new_timeout_time = 60000 } + if (check_msg !== null){ + clearInterval(check_msg) + } + check_new_messages_timeout(new_timeout_time) } + // var window_messages = document.querySelector(".container-messages") // function getNewMessageSession (){ diff --git a/static/js/user_profile(boris).js b/static/js/user_profile(boris).js index ea740bf..f5e4f3c 100644 --- a/static/js/user_profile(boris).js +++ b/static/js/user_profile(boris).js @@ -201,6 +201,7 @@ function sendMessage(id_ticket=null,sender,receiver){ event.preventDefault() let text = document.querySelector(".enter-message-inp").value + document.querySelector(".enter-message-inp").value = null if (text.length === 0){ // @@ -238,14 +239,12 @@ function sendMessage(id_ticket=null,sender,receiver){ getNewMessageSession() document.querySelector(".container-messages").innerHTML = data.html; - document.querySelector(".enter-message-inp").value = null document.querySelector(".enter-message-inp").focus() }, error: function (data){ document.querySelector(".container-messages").innerHTML = data.responseJSON.error; - document.querySelector(".enter-message-inp").value = null document.querySelector(".enter-message-inp").focus() } }); diff --git a/templates/blocks/b_header.html b/templates/blocks/b_header.html index 0c1f35f..087ef49 100644 --- a/templates/blocks/b_header.html +++ b/templates/blocks/b_header.html @@ -10,7 +10,7 @@
{% if user.is_authenticated %} - {{ user.username }}