chat implemented, testing needed
This commit is contained in:
@@ -3,8 +3,9 @@ import json
|
||||
|
||||
from channels.db import database_sync_to_async
|
||||
from channels.generic.websocket import AsyncWebsocketConsumer
|
||||
from django.utils import timezone
|
||||
|
||||
from .models import Chat, Message
|
||||
from .models import Chat, ChatReadStatus, Message
|
||||
|
||||
|
||||
class ChatConsumer(AsyncWebsocketConsumer):
|
||||
@@ -95,6 +96,14 @@ class ChatConsumer(AsyncWebsocketConsumer):
|
||||
"user": user.username,
|
||||
})
|
||||
|
||||
elif msg_type == "mark_read":
|
||||
await _mark_read(chat_id=self.chat_id, user=user)
|
||||
await self.channel_layer.group_send(self.chat_name, {
|
||||
"type": "read.status",
|
||||
"user": user.username,
|
||||
"chat_id": int(self.chat_id),
|
||||
})
|
||||
|
||||
else:
|
||||
await self.send(text_data=json.dumps({"error": "Unsupported message type."}))
|
||||
|
||||
@@ -155,6 +164,13 @@ class ChatConsumer(AsyncWebsocketConsumer):
|
||||
"user": event["user"],
|
||||
}))
|
||||
|
||||
async def read_status(self, event):
|
||||
await self.send(text_data=json.dumps({
|
||||
"type": "read_status",
|
||||
"user": event["user"],
|
||||
"chat_id": event["chat_id"],
|
||||
}))
|
||||
|
||||
|
||||
# ---------------------------------------------------------------------------
|
||||
# DB helpers (run in thread pool via database_sync_to_async)
|
||||
@@ -179,3 +195,12 @@ def _create_message(chat_id, sender, content, reply_to_id=None):
|
||||
def _toggle_reaction(message_id, user, emoji):
|
||||
message = Message.objects.get(pk=message_id)
|
||||
return message.toggle_reaction(user, emoji)
|
||||
|
||||
|
||||
@database_sync_to_async
|
||||
def _mark_read(chat_id, user):
|
||||
ChatReadStatus.objects.update_or_create(
|
||||
user=user,
|
||||
chat_id=chat_id,
|
||||
defaults={"last_read_at": timezone.now()},
|
||||
)
|
||||
|
||||
Reference in New Issue
Block a user