mirror of
https://gitlab.com/animath/si/plateforme.git
synced 2025-05-17 10:52:47 +00:00
Compare commits
33 Commits
bd416318ac
...
f817c71043
Author | SHA1 | Date | |
---|---|---|---|
|
f817c71043 | ||
|
9aa002b359 | ||
|
ed6ab57a9a | ||
|
519688d997 | ||
|
d19eb3d3fd | ||
|
b820306e2e | ||
|
756f2074b3 | ||
|
6385e53425 | ||
|
32b816a4de | ||
|
41ccbcb277 | ||
|
2438bb9bcc | ||
|
ddd2280ae4 | ||
|
4958628e40 | ||
|
731d309305 | ||
|
af9dcebca9 | ||
|
9c118c7142 | ||
|
14878fce86 | ||
|
13f6b1972f | ||
|
59f5667f52 | ||
|
be6e5b03c9 | ||
|
363ed35fa1 | ||
|
a50e865ef0 | ||
|
badbb2567e | ||
|
39085a6303 | ||
|
bb137509e1 | ||
|
727aa8b6d6 | ||
|
ee15ea04d5 | ||
|
c20554e01a | ||
|
4026fe53c3 | ||
|
1abe463575 | ||
|
5b0081a531 | ||
|
06c82a239d | ||
|
f8725cf8a9 |
@ -3,7 +3,7 @@
|
|||||||
|
|
||||||
from channels.generic.websocket import AsyncJsonWebsocketConsumer
|
from channels.generic.websocket import AsyncJsonWebsocketConsumer
|
||||||
from django.contrib.auth.models import User
|
from django.contrib.auth.models import User
|
||||||
from django.db.models import Count, F, Q
|
from django.db.models import Count, Exists, OuterRef, Q
|
||||||
from registration.models import Registration
|
from registration.models import Registration
|
||||||
|
|
||||||
from .models import Channel, Message
|
from .models import Channel, Message
|
||||||
@ -93,9 +93,7 @@ class ChatConsumer(AsyncJsonWebsocketConsumer):
|
|||||||
'unread_messages': channel.unread_messages,
|
'unread_messages': channel.unread_messages,
|
||||||
}
|
}
|
||||||
async for channel in self.read_channels.prefetch_related('invited')
|
async for channel in self.read_channels.prefetch_related('invited')
|
||||||
.annotate(total_messages=Count('messages', distinct=True))
|
.annotate(unread_messages=Count('messages', filter=~Q(messages__users_read=user))).all()
|
||||||
.annotate(read_messages=Count('messages', filter=Q(messages__users_read=user), distinct=True))
|
|
||||||
.annotate(unread_messages=F('total_messages') - F('read_messages')).all()
|
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
await self.send_json(message)
|
await self.send_json(message)
|
||||||
@ -162,7 +160,8 @@ class ChatConsumer(AsyncJsonWebsocketConsumer):
|
|||||||
|
|
||||||
messages = Message.objects \
|
messages = Message.objects \
|
||||||
.filter(channel=channel) \
|
.filter(channel=channel) \
|
||||||
.annotate(read=Count('users_read', filter=Q(users_read=self.scope['user']))) \
|
.annotate(read=Exists(User.objects.filter(pk=self.scope['user'].pk)
|
||||||
|
.filter(pk=OuterRef('users_read')))) \
|
||||||
.order_by('-created_at')[offset:offset + limit].all()
|
.order_by('-created_at')[offset:offset + limit].all()
|
||||||
await self.send_json({
|
await self.send_json({
|
||||||
'type': 'fetch_messages',
|
'type': 'fetch_messages',
|
||||||
@ -174,7 +173,7 @@ class ChatConsumer(AsyncJsonWebsocketConsumer):
|
|||||||
'author_id': message.author_id,
|
'author_id': message.author_id,
|
||||||
'author': await message.aget_author_name(),
|
'author': await message.aget_author_name(),
|
||||||
'content': message.content,
|
'content': message.content,
|
||||||
'read': message.read > 0,
|
'read': message.read,
|
||||||
}
|
}
|
||||||
async for message in messages
|
async for message in messages
|
||||||
]))
|
]))
|
||||||
@ -240,6 +239,7 @@ class ChatConsumer(AsyncJsonWebsocketConsumer):
|
|||||||
'content': message['content']})
|
'content': message['content']})
|
||||||
|
|
||||||
async def chat_edit_message(self, message) -> None:
|
async def chat_edit_message(self, message) -> None:
|
||||||
|
print(message)
|
||||||
await self.send_json({'type': 'edit_message', 'id': message['id'], 'channel_id': message['channel_id'],
|
await self.send_json({'type': 'edit_message', 'id': message['id'], 'channel_id': message['channel_id'],
|
||||||
'content': message['content']})
|
'content': message['content']})
|
||||||
|
|
||||||
|
@ -157,7 +157,6 @@ function fetchPreviousMessages() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function receiveFetchedMessages(data) {
|
function receiveFetchedMessages(data) {
|
||||||
console.log(data)
|
|
||||||
let channel_id = data['channel_id']
|
let channel_id = data['channel_id']
|
||||||
let new_messages = data['messages']
|
let new_messages = data['messages']
|
||||||
|
|
||||||
@ -190,6 +189,7 @@ function updateUnreadBadges(unreadMessages) {
|
|||||||
|
|
||||||
for (let channel of Object.values(channels)) {
|
for (let channel of Object.values(channels)) {
|
||||||
let unreadMessagesChannel = unreadMessages[channel['id']] || 0
|
let unreadMessagesChannel = unreadMessages[channel['id']] || 0
|
||||||
|
console.log(channel, unreadMessagesChannel)
|
||||||
channel.unread_messages = unreadMessagesChannel
|
channel.unread_messages = unreadMessagesChannel
|
||||||
|
|
||||||
let unreadBadge = document.getElementById(`unread-messages-${channel['id']}`)
|
let unreadBadge = document.getElementById(`unread-messages-${channel['id']}`)
|
||||||
|
@ -391,7 +391,7 @@ class TeamAuthorizationsView(LoginRequiredMixin, View):
|
|||||||
tournament = Tournament.objects.get(pk=kwargs["tournament_id"])
|
tournament = Tournament.objects.get(pk=kwargs["tournament_id"])
|
||||||
|
|
||||||
if user.registration.is_admin or user.registration.is_volunteer \
|
if user.registration.is_admin or user.registration.is_volunteer \
|
||||||
and (user.registration in tournament.organizers.all()
|
and (user.registration in tournament.organizers
|
||||||
or (team is not None and team.participation.final
|
or (team is not None and team.participation.final
|
||||||
and user.registration in Tournament.final_tournament().organizers)):
|
and user.registration in Tournament.final_tournament().organizers)):
|
||||||
return super().dispatch(request, *args, **kwargs)
|
return super().dispatch(request, *args, **kwargs)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user