session updates. mostly
This commit is contained in:
@@ -10,7 +10,7 @@ class Session(models.Model):
|
|||||||
|
|
||||||
@property
|
@property
|
||||||
def is_open(self):
|
def is_open(self):
|
||||||
return datetime.now() < self.opens
|
return (datetime.now() < self.opens) and self.voting_open
|
||||||
|
|
||||||
opens = models.DateTimeField(null=True, default=None)
|
opens = models.DateTimeField(null=True, default=None)
|
||||||
session_id = models.UUIDField(default=uuid.uuid4, editable=False)
|
session_id = models.UUIDField(default=uuid.uuid4, editable=False)
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ from .session import Session
|
|||||||
|
|
||||||
class Vote(models.Model):
|
class Vote(models.Model):
|
||||||
class Meta:
|
class Meta:
|
||||||
unique_together = ["user", "track"]
|
unique_together = ["user", "track", "session"]
|
||||||
track = models.ForeignKey('Track', on_delete=models.CASCADE)
|
track = models.ForeignKey('Track', on_delete=models.CASCADE)
|
||||||
user = models.ForeignKey(User, on_delete=models.CASCADE)
|
user = models.ForeignKey(User, on_delete=models.CASCADE)
|
||||||
points = models.IntegerField(validators=[MinValueValidator(1), MaxValueValidator(5)])
|
points = models.IntegerField(validators=[MinValueValidator(1), MaxValueValidator(5)])
|
||||||
|
|||||||
+62
-50
@@ -5,67 +5,79 @@ from channels.generic.websocket import WebsocketConsumer
|
|||||||
from django.contrib.auth.models import User
|
from django.contrib.auth.models import User
|
||||||
from muzak.auth import get_user_from_token
|
from muzak.auth import get_user_from_token
|
||||||
from channels.db import database_sync_to_async
|
from channels.db import database_sync_to_async
|
||||||
|
from playlist.models import Session, Track, Vote
|
||||||
|
|
||||||
|
|
||||||
class SessionConsumer(WebsocketConsumer):
|
class SessionConsumer(WebsocketConsumer):
|
||||||
def connect(self):
|
def connect(self):
|
||||||
self.session_id = self.scope["url_route"]["kwargs"]["session_id"]
|
self.session_id = self.scope["url_route"]["kwargs"]["session_id"]
|
||||||
self.session_name = f"session_{self.session_id}"
|
self.session_name = f"session_{self.session_id}"
|
||||||
# print("---")
|
|
||||||
# print(self.scope)
|
|
||||||
|
|
||||||
# Join room group
|
async_to_sync(self.channel_layer.group_add)(
|
||||||
async_to_sync(self.channel_layer.group_add)(
|
self.session_name, self.channel_name
|
||||||
self.session_name, self.channel_name
|
)
|
||||||
)
|
self.accept()
|
||||||
|
|
||||||
self.accept()
|
def disconnect(self, close_code):
|
||||||
|
# Leave room group
|
||||||
|
async_to_sync(self.channel_layer.group_discard)(
|
||||||
|
self.session_name, self.channel_name
|
||||||
|
)
|
||||||
|
|
||||||
def disconnect(self, close_code):
|
# Receive message from WebSocket
|
||||||
# Leave room group
|
def receive(self, text_data):
|
||||||
async_to_sync(self.channel_layer.group_discard)(
|
user = self.scope["user"] # Waarschijnlijk altijd AnonymousUser
|
||||||
self.session_name, self.channel_name
|
|
||||||
)
|
|
||||||
|
|
||||||
# Receive message from WebSocket
|
text_data_json = json.loads(text_data)
|
||||||
def receive(self, text_data):
|
|
||||||
user = self.scope["user"]
|
|
||||||
text_data_json = json.loads(text_data)
|
|
||||||
action = text_data_json["action"]
|
|
||||||
|
|
||||||
# Niet lachen, middleware is moeilijk oké?
|
# Niet lachen, middleware is moeilijk oké?
|
||||||
username = text_data_json.get("username")
|
token = text_data_json.get("token")
|
||||||
token = text_data_json.get("token")
|
if token:
|
||||||
if token:
|
user = get_user_from_token(token, log=True)
|
||||||
user = get_user_from_token(token, log=True)
|
print(user)
|
||||||
print(user)
|
|
||||||
elif username:
|
|
||||||
pass
|
|
||||||
#user = User.objects.get(username=username)
|
|
||||||
|
|
||||||
|
|
||||||
if action == "message":
|
action = text_data_json.get("action", None)
|
||||||
message = text_data_json["message"]
|
#:w
|
||||||
# Send message to room group
|
# sessionId = text_data_json.get("sessionId", None)
|
||||||
async_to_sync(self.channel_layer.group_send)(
|
#session = Session.objects.get(id=sessionId)
|
||||||
self.session_name, {"type": "chat.message", "message": str(user) + ": " + message}
|
if action == "message":
|
||||||
)
|
message = text_data_json["message"]
|
||||||
if action == "login":
|
# Send message to room group
|
||||||
print("LOGIN", str(user))
|
async_to_sync(self.channel_layer.group_send)(
|
||||||
async_to_sync(self.channel_layer.group_send)(
|
self.session_name, {"type": "chat.message", "message": str(user) + ": " + message}
|
||||||
self.session_name, {"type": "announce", "user": str(user)}
|
)
|
||||||
)
|
if action == "login":
|
||||||
|
print("LOGIN", str(user))
|
||||||
def announce(self, event):
|
async_to_sync(self.channel_layer.group_send)(
|
||||||
user = event["user"]
|
self.session_name, {"type": "announce", "user": str(user)}
|
||||||
self.send(text_data=json.dumps({"joined": 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 == "pause":
|
||||||
|
pass
|
||||||
|
if action == "next":
|
||||||
|
pass
|
||||||
|
|
||||||
|
|
||||||
# Receive message from room group
|
def announce(self, event):
|
||||||
def chat_message(self, event):
|
user = event["user"]
|
||||||
message = event["message"]
|
self.send(text_data=json.dumps({"joined": user}))
|
||||||
|
|
||||||
print(self.scope["user"])
|
|
||||||
|
|
||||||
# Send message to WebSocket
|
# Receive message from room group
|
||||||
self.send(text_data=json.dumps({"message": message}))
|
def chat_message(self, event):
|
||||||
|
message = event["message"]
|
||||||
|
|
||||||
|
print(self.scope["user"])
|
||||||
|
|
||||||
|
# Send message to WebSocket
|
||||||
|
self.send(text_data=json.dumps({"message": message}))
|
||||||
|
|||||||
@@ -32,17 +32,30 @@ export default function Lobby() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
if (sessionId) {
|
console.log("session: ", sessionId);
|
||||||
const socket = new WebSocket(
|
let socket;
|
||||||
|
if (sessionId && !sessionSocket) {
|
||||||
|
socket = new WebSocket(
|
||||||
`${process.env.NEXT_PUBLIC_WS_HOST}/voting/session/${sessionId}/`,
|
`${process.env.NEXT_PUBLIC_WS_HOST}/voting/session/${sessionId}/`,
|
||||||
);
|
);
|
||||||
socket.onmessage = onMessage;
|
socket.onmessage = onMessage;
|
||||||
setSessionSocket(socket);
|
if (!sessionSocket) {
|
||||||
|
setSessionSocket(socket);
|
||||||
|
console.log("session made: ", sessionId);
|
||||||
|
} else {
|
||||||
|
socket.close();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
return () => {
|
||||||
|
if (socket) {
|
||||||
|
socket.close();
|
||||||
|
}
|
||||||
|
};
|
||||||
}, [sessionId]);
|
}, [sessionId]);
|
||||||
|
|
||||||
function addUser(userName: string) {
|
function addUser(userName: string) {
|
||||||
if (userList.find((user) => user.name === userName)) {
|
console.log(userList);
|
||||||
|
if (userList.find((user) => user.name == userName)) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
const newUser = {
|
const newUser = {
|
||||||
@@ -51,7 +64,8 @@ export default function Lobby() {
|
|||||||
avatar: `https://i.pravatar.cc/150?img=${userList.length + 1}`,
|
avatar: `https://i.pravatar.cc/150?img=${userList.length + 1}`,
|
||||||
host: userList.length === 0,
|
host: userList.length === 0,
|
||||||
};
|
};
|
||||||
setUserList((prevUserList) => [...prevUserList, newUser]);
|
const newUserList = [...userList, newUser];
|
||||||
|
setUserList(newUserList);
|
||||||
}
|
}
|
||||||
|
|
||||||
return (
|
return (
|
||||||
|
|||||||
Reference in New Issue
Block a user