emile 9 months ago
parent 42e39efb47
commit a52fea2666

BIN
.DS_Store vendored

Binary file not shown.

BIN
osinaweb/.DS_Store vendored

Binary file not shown.

Binary file not shown.

@ -8,6 +8,13 @@ class VisitorSerializer(serializers.ModelSerializer):
fields = '__all__' fields = '__all__'
class VisitorLogSerializer(serializers.ModelSerializer):
class Meta:
model = VisitorLog
fields = '__all__'
class ChatRoomGuestSerializer(serializers.ModelSerializer): class ChatRoomGuestSerializer(serializers.ModelSerializer):
visitor = VisitorSerializer() visitor = VisitorSerializer()
class Meta: class Meta:
@ -25,4 +32,6 @@ class ChatRoomSerializer(serializers.ModelSerializer):
chatroomguest = ChatRoomGuestSerializer() chatroomguest = ChatRoomGuestSerializer()
class Meta: class Meta:
model = ChatRoom model = ChatRoom
fields = '__all__' fields = '__all__'

@ -2,11 +2,12 @@ from osinacore.api.utils import *
from osichat.models import * from osichat.models import *
from rest_framework.decorators import api_view from rest_framework.decorators import api_view
from .serializers import * from .serializers import *
from django.shortcuts import get_object_or_404
@api_view(['GET']) @api_view(['GET'])
def get_chat_rooms(request): def get_chat_rooms(request):
chat_rooms = ChatRoom.objects.annotate(last_update=Max('chatmessage__date_sent')).order_by('-last_update', '-date_created') chat_rooms = ChatRoom.objects.annotate(last_update=Max('chatmessage__date_sent')).order_by('-last_update', '-date_created')
chat_rooms_serializer = ChatRoomSerializer(chat_rooms, many=True) chat_rooms_serializer = ChatRoomSerializer(chat_rooms, many=True)
return successRes(chat_rooms_serializer.data) return successRes(chat_rooms_serializer.data)

@ -188,10 +188,10 @@ class Osichat(WebsocketConsumer):
if self.client_type == 'mobile_admin': if self.client_type == 'mobile_admin':
visitors_data = [] visitors_data = []
for visitor in visitors: for visitor in visitors:
visitor_dict = model_to_dict(visitor) visitor_data = model_to_dict(visitor)
visitor_dict['is_online'] = visitor.is_online visitor_data['is_online'] = visitor.is_online
visitor_dict['duration'] = visitor.total_duration visitor_data['duration'] = visitor.total_duration
visitor_dict['flag'] = visitor.flag_image_url visitor_data['flag'] = visitor.flag_image_url
visitor_logs = VisitorLog.objects.filter(visitor=visitor) visitor_logs = VisitorLog.objects.filter(visitor=visitor)
@ -201,8 +201,8 @@ class Osichat(WebsocketConsumer):
log_data['log_duration'] = log.log_duration log_data['log_duration'] = log.log_duration
visitor_logs_data.append(log_data) visitor_logs_data.append(log_data)
visitor_dict['visitor_logs'] = visitor_logs_data visitor_data['visitor_logs'] = visitor_logs_data
visitors_data.append(visitor_dict) visitors_data.append(visitor_data)
self.send(text_data=json.dumps({ self.send(text_data=json.dumps({
'event_type': 'get_visitors', 'event_type': 'get_visitors',
@ -253,6 +253,55 @@ class Osichat(WebsocketConsumer):
class OsichatVisitor(WebsocketConsumer):
def connect(self):
self.visitor_id = self.scope['url_route']['kwargs']['visitor_id']
self.group_name = str(self.visitor_id)
self.visitor = get_object_or_404(Visitor, id=self.visitor_id)
async_to_sync(self.channel_layer.group_add)(
self.group_name, self.channel_name
)
self.accept()
def disconnect(self, close_code):
async_to_sync(self.channel_layer.group_discard)(
self.group_name, 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')
event = {
'type': 'get_visitor_handler',
}
async_to_sync(self.channel_layer.group_send)(
self.group_name, event
)
def get_visitor_handler(self, event):
if self.client_type == 'mobile_admin':
visitor_data = model_to_dict(self.visitor)
visitor_data['online'] = self.visitor.is_online
visitor_data['flag'] = self.visitor.flag_image_url
visitor_logs = VisitorLog.objects.filter(visitor=self.visitor)
visitor_logs_data = []
for log in visitor_logs:
log_data = model_to_dict(log)
log_data['log_duration'] = log.log_duration
visitor_logs_data.append(log_data)
visitor_data['visitor_logs'] = visitor_logs_data
self.send(text_data=json.dumps({
'event_type': 'get_visitor',
'visitor_data': visitor_data,
}, cls=DjangoJSONEncoder))

@ -5,7 +5,7 @@ import os
from channels.layers import get_channel_layer from channels.layers import get_channel_layer
from asgiref.sync import async_to_sync from asgiref.sync import async_to_sync
from fcm_django.models import FCMDevice from fcm_django.models import FCMDevice
from firebase_admin.messaging import Message, Notification as NotificationFB from firebase_admin.messaging import Message,AndroidConfig,APNSConfig,APNSPayload,ApsAlert,Aps,AndroidNotification, Notification as NotificationFB
from django.utils.safestring import mark_safe from django.utils.safestring import mark_safe
@ -14,20 +14,43 @@ def send_notification(notification):
'title': notification.title, 'title': notification.title,
'body': mark_safe(notification.message), 'body': mark_safe(notification.message),
} }
android_config = AndroidConfig(
notification=AndroidNotification(
title=notification_data['title'],
body=notification_data['body'],
sound='default'
)
)
apns_config = APNSConfig(
payload= APNSPayload(
aps=Aps(
alert=ApsAlert(
title=notification_data['title'],
body=notification_data['body'],
),
sound='default',
)
)
)
if notification.image: if notification.image:
FCMDevice.objects.send_message( FCMDevice.objects.send_message(
Message(notification=NotificationFB( Message(notification=NotificationFB(
title=notification_data['title'], title=notification_data['title'],
body=notification_data['body'], body=notification_data['body'],
image= notification.image, image= notification.image,
), data={"image": notification.image}) ), data={"image": notification.image},android=android_config,apns=apns_config)
) )
else: else:
FCMDevice.objects.send_message( FCMDevice.objects.send_message(
Message(notification=NotificationFB( Message(notification=NotificationFB(
title=notification_data['title'], title=notification_data['title'],
body=notification_data['body'], body=notification_data['body'],
)) ),
android=android_config,
apns=apns_config)
) )
# Create your models here. # Create your models here.

@ -6,5 +6,6 @@ websocket_urlpatterns = [
path("ws/osichat/", Osichat.as_asgi()), path("ws/osichat/", Osichat.as_asgi()),
path("ws/osichat/<str:session_id>/", OsitcomChatRoom.as_asgi()), path("ws/osichat/<str:session_id>/", OsitcomChatRoom.as_asgi()),
path("ws/osichat-admin/<str:session_id>/<int:chat_id>/", OsitcomChatRoom.as_asgi()), path("ws/osichat-admin/<str:session_id>/<int:chat_id>/", OsitcomChatRoom.as_asgi()),
path("ws/visitors/osichat-admin/<int:visitor_id>/", OsichatVisitor.as_asgi()),
] ]

Binary file not shown.
Loading…
Cancel
Save