From 4a72a44ebcd7c6bb72e7284b4f17705acaf43e3d Mon Sep 17 00:00:00 2001 From: emile Date: Tue, 20 Aug 2024 16:51:54 +0300 Subject: [PATCH] new --- osinaweb/db.sqlite3 | Bin 1957888 -> 1966080 bytes .../__pycache__/consumers.cpython-310.pyc | Bin 16634 -> 17114 bytes .../__pycache__/models.cpython-310.pyc | Bin 10102 -> 10076 bytes osinaweb/osichat/consumers.py | 20 +++++++++- osinaweb/osichat/models.py | 37 +++++++++--------- 5 files changed, 38 insertions(+), 19 deletions(-) diff --git a/osinaweb/db.sqlite3 b/osinaweb/db.sqlite3 index 526c883cdf15aa3c682d1dc954bb69d74000ec49..28399a1eab9690241779bbf768febced50c48098 100644 GIT binary patch delta 20872 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 Ax&QzG delta 14289 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 X>0Nun-TGlYtGjfsuFyBA`(ny}sE$Ra diff --git a/osinaweb/osichat/consumers.py b/osinaweb/osichat/consumers.py index dbe27dfa..3ed6da57 100644 --- a/osinaweb/osichat/consumers.py +++ b/osinaweb/osichat/consumers.py @@ -256,7 +256,7 @@ 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.group_name = 'V' + 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 @@ -300,6 +300,24 @@ class OsichatVisitor(WebsocketConsumer): 'visitor_data': visitor_data, }, cls=DjangoJSONEncoder)) + def new_visitor_update_handler(self, event): + visitor = self.visitor + latest_log = VisitorLog.objects.filter(visitor=self.visitor).last() + if self.client_type == 'mobile_admin': + visitor_data = model_to_dict(visitor) + visitor_data['is_online'] = visitor.is_online + visitor_data['duration'] = visitor.total_duration + visitor_data['flag'] = visitor.flag_image_url + if latest_log: + latest_log_data = model_to_dict(latest_log) + latest_log_data['log_duration'] = latest_log.log_duration + visitor_data['latest_log'] = latest_log_data + self.send(text_data=json.dumps({ + 'event_type': 'new_visitor_update', + 'visitor_data': visitor_data, + 'action': event['action'], + }, cls=DjangoJSONEncoder)) + diff --git a/osinaweb/osichat/models.py b/osinaweb/osichat/models.py index b629a37e..1904b11a 100644 --- a/osinaweb/osichat/models.py +++ b/osinaweb/osichat/models.py @@ -124,16 +124,6 @@ class Visitor(models.Model): else: return f"{int(minutes):02}:{int(seconds):02}" - def save(self, *args, **kwargs): - super().save(*args, **kwargs) - channel_layer = get_channel_layer() - event = { - 'type': 'new_visitor_update_handler', - 'visitor_id': self.id, - 'action': 'new_visitor' - } - async_to_sync(channel_layer.group_send)("osichat", event) - @@ -173,14 +163,25 @@ class VisitorLog(models.Model): 'action': action } async_to_sync(channel_layer.group_send)("osichat", event) - if is_first_log: - self.send_visitor_notification() - else: - last_log = self.visitor.visitorlog_set.exclude(id=self.id).order_by('-visit_date').first() - if last_log: - time_difference = self.visit_date - last_log.visit_date - if time_difference > timedelta(minutes=5): - self.send_visitor_notification(is_repeat=True) + group_name = f"V{self.visitor.id}" + async_to_sync(channel_layer.group_send)(group_name, event) + if not self.left_date: + if is_first_log: + self.send_visitor_notification() + else: + last_log = self.visitor.visitorlog_set.exclude(id=self.id).order_by('-visit_date').first() + if last_log: + last_visit_date = last_log.visit_date + current_visit_date = self.visit_date + if timezone.is_naive(last_visit_date): + last_visit_date = timezone.make_aware(last_visit_date) + if timezone.is_naive(current_visit_date): + current_visit_date = timezone.make_aware(current_visit_date) + + time_difference = current_visit_date - last_visit_date + + if time_difference > timedelta(minutes=5): + self.send_visitor_notification(is_repeat=True) def send_visitor_notification(self, is_repeat=False): if is_repeat: