betere sessies lol lmao even

This commit is contained in:
2025-08-16 09:51:29 +02:00
parent a1526ddc67
commit c7eb174a01
7 changed files with 331 additions and 110 deletions
+34 -15
View File
@@ -6,6 +6,7 @@ from django.contrib.auth.models import User
from muzak.auth import get_user_from_token
from channels.db import database_sync_to_async
from playlist.models import Session, Track, Vote
import random
class SessionConsumer(WebsocketConsumer):
@@ -27,6 +28,9 @@ class SessionConsumer(WebsocketConsumer):
# Receive message from WebSocket
def receive(self, text_data):
user = self.scope["user"] # Waarschijnlijk altijd AnonymousUser
print(self.scope)
sessionId = self.scope["url_route"].get("kwargs", {}).get("session_id", None)
print()
text_data_json = json.loads(text_data)
@@ -35,12 +39,9 @@ class SessionConsumer(WebsocketConsumer):
if token:
user = get_user_from_token(token, log=True)
print(user)
session = Session.objects.get(session_id=sessionId)
action = text_data_json.get("action", None)
#:w
# sessionId = text_data_json.get("sessionId", None)
#session = Session.objects.get(id=sessionId)
if action == "message":
message = text_data_json["message"]
# Send message to room group
@@ -52,26 +53,44 @@ class SessionConsumer(WebsocketConsumer):
async_to_sync(self.channel_layer.group_send)(
self.session_name, {"type": "announce", "user": str(user)}
)
# if action == "vote":
# points = text_data_json.get("points", None)
# track = session.current_track;
# try:
# vote = Vote.objects.get(user=user, track=track, session=session)
# vote.points = points
# vote.save()
# except Vote.DoesNotExist:
# vote = Vote.objects.create(user=user, track=track, points=points, session=session)
# vote.save()
if action == "vote":
points = text_data_json.get("points", None)
track = session.current_track;
try:
vote = Vote.objects.get(user=user, track=track, session=session)
vote.points = points
vote.save()
except Vote.DoesNotExist:
vote = Vote.objects.create(user=user, track=track, points=points, session=session)
vote.save()
if action == "pause":
pass
if action == "next":
pass
random.seed(session.seed)
tracks = Track.objects.order_by("?")
next = False
if session.current_track:
for track in tracks:
if next:
session.current_track = track
break
if session.current_track == track:
next = True
else:
session.current_track = tracks.first()
session.save()
async_to_sync(self.channel_layer.group_send)(
self.session_name, {"type": "announce.track"}
)
def announce(self, event):
user = event["user"]
self.send(text_data=json.dumps({"joined": user}))
def announce_track(self, event):
self.send(text_data=json.dumps({"track": {}}))
# Receive message from room group
def chat_message(self, event):
+1
View File
@@ -6,4 +6,5 @@ urlpatterns = [
path("", views.index, name="index"),
path("session/<str:session_id>/test", views.session, name="session"),
path("session/", views.SessionListView.as_view(), name="api-session-list"),
path("session/<str:session_id>/", views.SessionDetailView.as_view(), name="api-session-detail"),
]
+9
View File
@@ -22,3 +22,12 @@ class SessionListView(APIView):
else:
sessions = Session.objects.filter(voting_open=True)
return Response(SessionSerializer(sessions, many=True).data)
@extend_schema(
responses={200: SessionSerializer()},
description="Gets session details."
)
class SessionDetailView(APIView):
def get(self, request, session_id):
session = Session.objects.get(session_id=session_id)
return Response(SessionSerializer(session).data)