From 4a3baa393caaa20d6364b89dfb2a3c806ebb7ae6 Mon Sep 17 00:00:00 2001 From: Guillaume Pellerin Date: Sun, 22 Jun 2025 14:30:34 +0200 Subject: [PATCH] prepare media read ws --- setup.py | 2 +- teleforma/ws/media.py | 45 ++++++++++++++++++++++++++++++++++++ teleforma/ws/notification.py | 1 + 3 files changed, 47 insertions(+), 1 deletion(-) create mode 100644 teleforma/ws/media.py diff --git a/setup.py b/setup.py index f2f21e8a..9ca8a301 100644 --- a/setup.py +++ b/setup.py @@ -1,4 +1,4 @@ -# -*- coding: utf-8 -*- +²# -*- coding: utf-8 -*- from setuptools import setup, find_packages diff --git a/teleforma/ws/media.py b/teleforma/ws/media.py new file mode 100644 index 00000000..1832ae33 --- /dev/null +++ b/teleforma/ws/media.py @@ -0,0 +1,45 @@ +from teleforma.ws.logger import log_consumer_exceptions +from teleforma.models.core import Media, MediaRead +from django.conf import settings +from channels.generic.websocket import AsyncJsonWebsocketConsumer +from channels.db import database_sync_to_async +import json + + +@log_consumer_exceptions +class MediaReadConsumer(AsyncJsonWebsocketConsumer): + + async def connect(self): + + if self.scope["user"].is_anonymous: + self.close() + + await self.accept() + + # send initial messages + data = await self.get_duration(self.scope['user']) + await self.send_json(content={'type': 'initial', 'messages': data}) + + + async def disconnect(self, close_code): + # Leave room group + await self.channel_layer.group_discard( + self.room_group_name, + self.channel_name + ) + + @database_sync_to_async + def get_duration(self, user, media): + # import pdb;pdb.set_trace() + if user.is_authenticated: + duration, c = MediaRead.objects.get_or_create( + user=user) + else: + duration = 0 + return duration + + # Receive message from channel + async def notify(self, event): + message = event['message'] + # Send message to WebSocket + await self.send_json(content={'type': 'new', 'messages': [message]}) diff --git a/teleforma/ws/notification.py b/teleforma/ws/notification.py index 12596293..b347225c 100644 --- a/teleforma/ws/notification.py +++ b/teleforma/ws/notification.py @@ -5,6 +5,7 @@ from channels.generic.websocket import AsyncJsonWebsocketConsumer from channels.db import database_sync_to_async import json + @log_consumer_exceptions class NotificationConsumer(AsyncJsonWebsocketConsumer): -- 2.39.5