From 411b2e3ccae3998b2c469bc36d8e571f980e5d3f Mon Sep 17 00:00:00 2001 From: emile Date: Mon, 5 Aug 2024 23:05:43 +0300 Subject: [PATCH] new --- osinaweb/db.sqlite3 | Bin 1843200 -> 1875968 bytes .../__pycache__/consumers.cpython-310.pyc | Bin 10173 -> 12801 bytes .../__pycache__/models.cpython-310.pyc | Bin 4705 -> 5656 bytes .../__pycache__/routing.cpython-310.pyc | Bin 475 -> 526 bytes .../__pycache__/serializers.cpython-310.pyc | Bin 1293 -> 1582 bytes osinaweb/osichat/api/serializers.py | 7 + osinaweb/osichat/consumers.py | 129 ++++++++++++++++-- osinaweb/osichat/models.py | 26 ++++ osinaweb/osichat/routing.py | 1 + osinaweb/osichat/templates/chat-room.html | 12 +- .../osichat/templates/partials/typing.html | 11 +- .../custom_context.cpython-310.pyc | Bin 3052 -> 2997 bytes osinaweb/osinacore/custom_context.py | 4 +- .../templates/chat_templates/chat-room.html | 17 +-- .../templates/chat_templates/chat-widget.html | 43 +----- .../chat_templates/conversations.html | 20 --- .../partials/new-chat-room.html | 14 ++ .../chat_templates/partials/rooms.html | 49 +++++++ .../chat_templates/partials/typing.html | 13 ++ osinaweb/osinacore/templates/main.html | 3 + osinaweb/static/dist/output.css | 32 +++-- .../uploaded_chat_files/Artboard 1 (3).png | Bin 951445 -> 0 bytes .../uploaded_chat_files/Artboard 1 (3)_1.png | Bin 951445 -> 0 bytes .../uploaded_chat_files/Artboard 1 (3)_2.png | Bin 951445 -> 0 bytes .../uploaded_chat_files/Artboard 2 (2).png | Bin 1050560 -> 0 bytes .../uploaded_chat_files/Artboard 3 (3).png | Bin 959737 -> 0 bytes .../static/js/osichat-admin/conversation.js | 87 ------------ .../js/osichat-admin/inner-conversation.js | 100 ++++++++++++++ osinaweb/static/js/osichat-admin/rooms.js | 64 +++++++++ osinaweb/static/js/osichat-admin/textarea.js | 16 ++- osinaweb/static/js/osichat/conversation.js | 43 +++++- osinaweb/static/js/osichat/textarea.js | 25 +++- osinaweb/static/js/osichat/upload-file.js | 2 +- osinaweb/static/js/osichat/visitors.js | 6 +- 34 files changed, 512 insertions(+), 212 deletions(-) delete mode 100644 osinaweb/osinacore/templates/chat_templates/conversations.html create mode 100644 osinaweb/osinacore/templates/chat_templates/partials/new-chat-room.html create mode 100644 osinaweb/osinacore/templates/chat_templates/partials/rooms.html create mode 100644 osinaweb/osinacore/templates/chat_templates/partials/typing.html delete mode 100644 osinaweb/static/images/uploaded_chat_files/Artboard 1 (3).png delete mode 100644 osinaweb/static/images/uploaded_chat_files/Artboard 1 (3)_1.png delete mode 100644 osinaweb/static/images/uploaded_chat_files/Artboard 1 (3)_2.png delete mode 100644 osinaweb/static/images/uploaded_chat_files/Artboard 2 (2).png delete mode 100644 osinaweb/static/images/uploaded_chat_files/Artboard 3 (3).png delete mode 100644 osinaweb/static/js/osichat-admin/conversation.js create mode 100644 osinaweb/static/js/osichat-admin/inner-conversation.js create mode 100644 osinaweb/static/js/osichat-admin/rooms.js diff --git a/osinaweb/db.sqlite3 b/osinaweb/db.sqlite3 index 22f1459679bf2a1d72765e5d3555d23c96cac2c4..7afb0d595effea79de7e5d8edf32c1a79d09eae3 100644 GIT binary patch delta 58533 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 delta 13562 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
hFe$1|^rfJ=~6QaN}L8szm} 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 EUpBI5(f|Me diff --git a/osinaweb/osichat/__pycache__/models.cpython-310.pyc b/osinaweb/osichat/__pycache__/models.cpython-310.pyc index 9e749c37c9253f6e8c4968d0d6185e7309f43e38..bc9650cf8cf777357529402528b59dfdf794c6bc 100644 GIT binary patch literal 5656 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 delta 2201 zcmaJ?&2Jl35Z`C7?X|sLuh$=;X%a#bs&14hf>H@cQmPi>rVR#~q$)1LIDRjQQ-4&m z4pNZ7hjQS;A$k`$!L=v;40_{IE-Mb?z#&xP!ih`8%-aq_HqgjeZ9Be z=^Q^My*MZ&vDInz?n4@(W1=X;6#!Y;jD5ul^7q()sJpa=S|BTz;PrO{6F58`pQ6gWLUn7ZP{^NfaB8;z3|9 z5|TwxFAW5A+r8#M@J0&_01Z4>Kc(iIAUaB?*X#_6aSI3u5=7FKJn9mN8SkohQyDYDczJpsP4{?10Dwz;-e&$K`&?^_3O zk+d$!-OSAL7;RrC@!Yf8sp7bJFoDanQ5c%ZO2}FTd5hr!H!N6M#A7Lih?|<5 zjf&IHz1I^PeH1Hg(cwTYV4B1n35s3y1kBJbDyT&~xP;52a!?^F3>GzcWEJHv+52~| zAnL~a>}rpj|-T>YTu=skD!&TgG07ZNJD#2k_r&_!Hc1w6c)h6+z=H^Z&Aip!u zmzNMf9rB3$$()*xigX#ZiCd4JiJ|GtN!ZL`u&jv7TNmY8$&g#QsbN5vdD0(wqV^6b zd4qOD6TVf^-4YN)p*W***0a8RXqqTLO$T_tf-+NE)JLq4;rL!Q95m4tc3gF3)0sZ64% zx%smxIMpeNkvGXwxp^CReyY{)4XEHm2~c_eO9ghk@?FEzurLnxHO&H;4-1o)PwhLb zDz6njpQF~Vr@QU0XbcV>2%j}h+^HU^(e@hcZgWT6l}`(B;Wiq$49M=ZW_r8b5e<6( z_vAxo;p2#D28w1PCn$HSD?AVH21*djV1i- l?svo$hPob2BvUhRz#7ca9m_GCvXe_V87GPVDJNS={tY|^jA#G= diff --git a/osinaweb/osichat/__pycache__/routing.cpython-310.pyc b/osinaweb/osichat/__pycache__/routing.cpython-310.pyc index 2f3edad49064d5b00b9d53ebecd3bc90d10db637..7f41bd733da044ce419777f9975be1fcf70b3f65 100644 GIT binary patch delta 150 zcmcc3+{dDw&&$ij00g#6H>71UGB7*_agYH!kmCTv#Xb|YO=Q^?uql@q@XbfPZmjNpgO!Gf*Z7 bC{a9Fjd7_EAJAkT1`b9ZW*$ZmTF1ki&&$ij00h4>Hl!__$Scd3Fj3oA!kr<7Gli>#A%!cIDT}$8If^}nJD5R} zXJTClhhSJ{ab`(=(ZmP#9AZ%RWL-uF4t5x)n(-Io=gH;F>Ju*+PF~BzF zqLZVTWhR$0t(~mL!av!NS&Cm0C@BQQMZzFL5+u)3B*MTjc^2~&Mk%1F3XGzY16XuK zrGfGiAT?kD#PieSm^_`uh8tv25y+e(>B)Lb;*&qH@C)z&xf~2Uj6%#pY(nf}YygTJ BLc{<7 delta 187 zcmZ3-)62!1&&$ij00bFjYtmRI^2##$P1N>fOW_P=(BzspA!PDgCd0}6j53Teljkvs zPqt+=b@xj69Q*Sv2@XfJSixagi{H5ScuSMTW6> zav78Q}`1Fz_%6F$=MYu>k-_btTaN diff --git a/osinaweb/osichat/api/serializers.py b/osinaweb/osichat/api/serializers.py index 1655e754..80c5651a 100644 --- a/osinaweb/osichat/api/serializers.py +++ b/osinaweb/osichat/api/serializers.py @@ -2,7 +2,14 @@ from osichat.models import * from rest_framework import serializers +class VisitorSerializer(serializers.ModelSerializer): + class Meta: + model = Visitor + fields = '__all__' + + class ChatRoomGuestSerializer(serializers.ModelSerializer): + visitor = VisitorSerializer() class Meta: model = ChatRoomGuest fields = '__all__' diff --git a/osinaweb/osichat/consumers.py b/osinaweb/osichat/consumers.py index 95f0544c..1d33f8ff 100644 --- a/osinaweb/osichat/consumers.py +++ b/osinaweb/osichat/consumers.py @@ -49,10 +49,83 @@ class OsitcomVisitor(WebsocketConsumer): +class OsitcomChatRooms(WebsocketConsumer): + def connect(self): + async_to_sync(self.channel_layer.group_add)( + 'ositcom_chats', self.channel_name + ) + self.accept() + + def disconnect(self, close_code): + async_to_sync(self.channel_layer.group_discard)( + 'ositcom_chats', self.channel_name + ) + + def receive(self, text_data): + data = json.loads(text_data) + event_type = data.get('event_type') + + if event_type == 'set_client_type': + self.client_type = data.get('client_type') + self.user_id = data.get('user_id') + self.get_chats_handler() + + + def get_chats_handler(self): + chat_rooms = ChatRoom.objects.annotate(last_update=Max('chatmessage__date_sent')).order_by('-last_update', '-date_created') + user = get_object_or_404(User, id=self.user_id) + for room in chat_rooms: + room.number_of_unread = room.unread_messages(user) + context = { + 'chat_rooms': chat_rooms, + } + + if self.client_type == 'mobile_admin': + chat_rooms_data = [model_to_dict(chat_room) for chat_room in chat_rooms] + self.send(text_data=json.dumps({ + 'event_type': 'get_chats', + 'chat_rooms_data': chat_rooms_data, + }, cls=DjangoJSONEncoder)) + else: + html = render_to_string("chat_templates/partials/rooms.html", context=context) + self.send(text_data=json.dumps({ + 'event_type': 'get_chats', + 'html': html, + })) + + + def new_update_handler(self, event): + chat_room = get_object_or_404(ChatRoom, id=event['chatroom_id']) + user = get_object_or_404(User, id=self.user_id) + number_of_unread = ChatMessage.objects.filter(room=chat_room).exclude(member=user).exclude(chatmessageseen__member=user).count() + + context = { + 'chat_room': chat_room, + 'number_of_unread': number_of_unread + } + if self.client_type == 'mobile_admin': + chat_room_data = model_to_dict(chat_room) + self.send(text_data=json.dumps({ + 'event_type': 'new_update', + 'chat_room_data': chat_room_data, + }, cls=DjangoJSONEncoder)) + else: + html = render_to_string("chat_templates/partials/new-chat-room.html", context=context) + self.send(text_data=json.dumps({ + 'event_type': 'new_update', + 'chatroom_id': chat_room.id, + 'html': html, + })) + + + + + + class OsitcomChatRoom(WebsocketConsumer): def connect(self): - self.domain = 'https://osina.ositcom.com' + self.domain = 'http://192.168.1.111:8000' self.session_id = self.scope['url_route']['kwargs']['session_id'] self.visitor = Visitor.objects.filter(session_id=self.session_id).last() @@ -201,7 +274,7 @@ class OsitcomChatRoom(WebsocketConsumer): ) number_of_unread = 0 else: - number_of_unread = ChatMessage.objects.filter(room=self.chat_room).exclude(member = member, chatmessageseen__member=member).count() + number_of_unread = ChatMessage.objects.filter(room=self.chat_room).exclude(member = member).exclude(hatmessageseen__member=member).count() latest_unread_message = ChatMessage.objects.filter(room=self.chat_room).exclude(chatmessageseen__member=member).last() else: member = None @@ -334,6 +407,7 @@ class OsitcomChatRoom(WebsocketConsumer): 'html': html, })) + def start_conversation_handler(self, event): chat_room = get_object_or_404(ChatRoom, id=event['chat_room_id']) context = { @@ -353,6 +427,7 @@ class OsitcomChatRoom(WebsocketConsumer): 'html': html, })) + def typing_handler(self, event): if event.get('typing_status') == 'typing': if event.get('user_id'): @@ -362,19 +437,37 @@ class OsitcomChatRoom(WebsocketConsumer): context = { 'member': member, + 'chat_room': self.chat_room, 'domain': self.domain } - - html = render_to_string("partials/typing.html", context=context) - self.send(text_data=json.dumps({ - 'event_type': 'typing', - 'html': html, - })) + if self.client_type == 'mobile_admin': + member_data = None + if member: + member_data = model_to_dict(member) + self.send(text_data=json.dumps({ + 'event_type': 'typing', + 'member_data': member_data, + }, cls=DjangoJSONEncoder)) + elif self.client_type == 'website_admin': + html = render_to_string("chat_templates/partials/typing.html", context=context) + self.send(text_data=json.dumps({ + 'event_type': 'typing', + 'user': member.id if member else None, + 'html': html, + })) + else: + html = render_to_string("partials/typing.html", context=context) + self.send(text_data=json.dumps({ + 'event_type': 'typing', + 'user': member.id if member else None, + 'html': html, + })) else: self.send(text_data=json.dumps({ 'event_type': 'stopped_typing', })) + def send_message_handler(self, event): chat_message = get_object_or_404(ChatMessage, id=event['chat_message_id']) context = { @@ -391,6 +484,7 @@ class OsitcomChatRoom(WebsocketConsumer): html = render_to_string("chat_templates/partials/message.html", context=context) self.send(text_data=json.dumps({ 'event_type': 'send_message', + 'user': chat_message.member.id if chat_message.member else None, 'html': html, })) else: @@ -401,6 +495,7 @@ class OsitcomChatRoom(WebsocketConsumer): 'html': html, })) + def uploaded_file_handler(self, event): message_attachment = get_object_or_404(ChatMessageAttachment, id=event['message_attachment_id']) context = { @@ -425,6 +520,7 @@ class OsitcomChatRoom(WebsocketConsumer): 'html': html, })) + def update_read_messages_handler(self, event): latest_unread_message_id = event.get('latest_unread_message_id') if latest_unread_message_id: @@ -434,14 +530,21 @@ class OsitcomChatRoom(WebsocketConsumer): 'latest_unread_message': latest_unread_message, 'domain': self.domain } - html = render_to_string("partials/unread-messages.html", context=context) - self.send(text_data=json.dumps({ - 'event_type': 'update_read_messages', - 'html': html, - })) + if self.client_type == 'mobile_admin': + self.send(text_data=json.dumps({ + 'event_type': 'update_read_messages', + 'number_of_unread': event['number_of_unread'], + },cls=DjangoJSONEncoder)) + else: + html = render_to_string("partials/unread-messages.html", context=context) + self.send(text_data=json.dumps({ + 'event_type': 'update_read_messages', + 'html': html, + })) else: latest_unread_message = None + def end_chat_handler(self, event): if event['user_id']: member = get_object_or_404(User, id=event['user_id']) diff --git a/osinaweb/osichat/models.py b/osinaweb/osichat/models.py index d625ad30..9d4587f2 100644 --- a/osinaweb/osichat/models.py +++ b/osinaweb/osichat/models.py @@ -2,6 +2,9 @@ from django.db import models from osinacore.models import * import mimetypes import os +from channels.layers import get_channel_layer +from asgiref.sync import async_to_sync +import json # Create your models here. @@ -46,6 +49,20 @@ class ChatRoom(models.Model): return last_updated_time.strftime('%I:%M %p') else: return last_updated_time.strftime('%d-%m-%Y') + def unread_messages(self, user): + return ChatMessage.objects.filter(room=self).exclude(member=user).exclude(chatmessageseen__member=user).count() + + + def save(self, *args, **kwargs): + is_new = self.pk is None + super().save(*args, **kwargs) + channel_layer = get_channel_layer() + event = { + 'type': 'new_update_handler', + 'chatroom_id': self.id, + } + async_to_sync(channel_layer.group_send)("ositcom_chats", event) + class ChatRoomGuest(models.Model): @@ -80,6 +97,15 @@ class ChatMessage(models.Model): member = models.ForeignKey(User, null=True, on_delete=models.SET_NULL, blank=True) content = models.TextField(null=True, blank=True) date_sent = models.DateTimeField() + def save(self, *args, **kwargs): + is_new = self.pk is None + super().save(*args, **kwargs) + channel_layer = get_channel_layer() + event = { + 'type': 'new_update_handler', + 'chatroom_id': self.room.id, + } + async_to_sync(channel_layer.group_send)("ositcom_chats", event) class ChatMessageAttachment(models.Model): diff --git a/osinaweb/osichat/routing.py b/osinaweb/osichat/routing.py index 2a833e40..05e2bcb1 100644 --- a/osinaweb/osichat/routing.py +++ b/osinaweb/osichat/routing.py @@ -3,6 +3,7 @@ from .consumers import * websocket_urlpatterns = [ path("ws/osichat/visitors/", OsitcomVisitor.as_asgi()), + path("ws/osichat/rooms/", OsitcomChatRooms.as_asgi()), path("ws/osichat//", OsitcomChatRoom.as_asgi()), path("ws/osichat-admin///", OsitcomChatRoom.as_asgi()), diff --git a/osinaweb/osichat/templates/chat-room.html b/osinaweb/osichat/templates/chat-room.html index f4f31c84..cbd4df33 100644 --- a/osinaweb/osichat/templates/chat-room.html +++ b/osinaweb/osichat/templates/chat-room.html @@ -4,6 +4,16 @@
+ +
@@ -126,8 +136,6 @@
- -
diff --git a/osinaweb/osichat/templates/partials/typing.html b/osinaweb/osichat/templates/partials/typing.html index ec7bc9ac..c1819f56 100644 --- a/osinaweb/osichat/templates/partials/typing.html +++ b/osinaweb/osichat/templates/partials/typing.html @@ -1,12 +1,7 @@ -
+
- {% if member.staffprofile.image %} - - {% else %} -

{{member.first_name.0}}{{member.last_name.0}}

- {% endif %} + class="w-[25px] h-[25px] rounded-full shadow-md text-white flex justify-center items-center bg-osiblue uppercase text-xs"> +
diff --git a/osinaweb/osinacore/__pycache__/custom_context.cpython-310.pyc b/osinaweb/osinacore/__pycache__/custom_context.cpython-310.pyc index 89064394a8e108ecf85fb68777972c6ca70acaa0..ef3d110ec687c533945385ac37670a95aae432b9 100644 GIT binary patch delta 918 zcma)5J#W)c6n)pcuH($Ov`077z zeM>{yxdfSTyh(4)1P~;G%t0swm7vjHCl~~iU?r@8k_r1Mi=;@NL3}S!A~n*gJ(n`5 z8NJCA2A4~^n=7Z%fU+cXn*I(bOuA00ue0J8iCu+qm1`Lk4xK0qMqe^2DyW7`Xo(xC zMT@?1(22aH&5bE=GXvqGOG&K~MC*{`6AWyP+5Iiyp%-;1V@j2v6=!Hg-D<_{BPl*Z zqwvuy0oY`M`o-(Vr{{ud!95b{WKvV;g4dV)1#%BrD%$9fqM%Y#^r?nU5}dIE;4W{S z7}y!JDNG^$g6*Y@k5#?ojmO(34BOQgypzEnmH)33>Gsl!+6n5K-}Hj^Zo`eA4LAN; zQxR8$N0ZVeYr|-zo`Y@%#P@`s3@XX!*R0QbnOv-vYzFD^2)n$0gNg18CRdSy9}HW91RRUjABr2Dj#W+75t| tKh!_Xca0IqVI1T~=4ZH_U$d@jAL#E=AGdqow|Du{m?)%4K=Fehh>}jQxkeBPk}<|rb7pVS=o_xM1QlEo zS+KI$1AB{TqZa-Pws!VfS%}#9b`y?Ev~b}!%=~8Nz2E%a+jqgY!0&jT!{|Hn`ps&) z_QL<#YtqUmsD$n*8aYVdOezGGpm9a&1cPAG+9KElhu{j9!hp%bQx+6Nk5L3a94boam)+v#Z?TW(;Y8cJu?r8ZrjzXar1} z!VC4(r!yXUVNsO0-3RW(Abs>HsXG8!yhHK{HWruI&1qS}QrIh}SxOh(Xb0V}lFfMG zo)SGnJFQ}A0Khi7X#IP>zP&Ff7hEHuUaX7?J>ab&|CijJ^hi+|JyO)j6s2{NQxT0P zY!$fAi(3{}mRKM95Pin-P{xPsz2r@am$w*}vlF}$!=ab|j}yJjikaMsp%YZK`luJQ zE{?eIbHt4!bBc9RmZ($6xiAQuc^_0`AigGRqLoR;TF%yZJyz4P-hk~w_aat#<2;kq zUD%jIy1YD2vq>?LUnuZ^>TmHT)zI1J4vcLPpO;Te=5CDfF+NTuu=qsYWRrQ5)kk)x zj_lrGvLUAEa@I1($i(A$s%d^=pvVACbkIcwRn)MK4Ybh40tN_t=9SlGbF`fT60A6z0eD8g6S2m;Q_PSW!jPCFK vHW$HaMh*G_qtnR+`x9JEe%a@&k3?vyrX**bw}t}7kEoq|r;ctXkKM&T)A0ak diff --git a/osinaweb/osinacore/custom_context.py b/osinaweb/osinacore/custom_context.py index 0a1f0278..d9205367 100644 --- a/osinaweb/osinacore/custom_context.py +++ b/osinaweb/osinacore/custom_context.py @@ -9,8 +9,6 @@ from osichat.models import * def utilities(request): - # Combine protocol and domain - current_url = 'https://osina.ositcom.com' notes = None recent_note = None @@ -123,5 +121,5 @@ def utilities(request): 'closed_tickets': closed_tickets, 'today': today, 'latest_chat_rooms': latest_chat_rooms, - 'current_url': current_url + } \ No newline at end of file diff --git a/osinaweb/osinacore/templates/chat_templates/chat-room.html b/osinaweb/osinacore/templates/chat_templates/chat-room.html index 2173e094..571ac787 100644 --- a/osinaweb/osinacore/templates/chat_templates/chat-room.html +++ b/osinaweb/osinacore/templates/chat_templates/chat-room.html @@ -89,22 +89,7 @@ - - - - +
diff --git a/osinaweb/osinacore/templates/chat_templates/chat-widget.html b/osinaweb/osinacore/templates/chat_templates/chat-widget.html index 554975d3..300c427e 100644 --- a/osinaweb/osinacore/templates/chat_templates/chat-widget.html +++ b/osinaweb/osinacore/templates/chat_templates/chat-widget.html @@ -1,47 +1,14 @@ {% load static %} +