Add playlists
This commit is contained in:
@ -1,3 +1,5 @@
|
||||
const youtubeService = require('../services/youtubeService');
|
||||
|
||||
let cleanupGameState;
|
||||
|
||||
const setCleanupGameState = (cleanupFunction) => {
|
||||
@ -10,25 +12,41 @@ module.exports.roomExists = (roomId) => rooms[roomId] !== undefined;
|
||||
|
||||
module.exports.isRoomOpen = (roomId) => rooms[roomId] && rooms[roomId].state === 'waiting';
|
||||
|
||||
const initializeRoom = (roomId, user) => {
|
||||
rooms[roomId] = {
|
||||
members: [{...user, creator: true}],
|
||||
settings: {},
|
||||
state: 'waiting',
|
||||
playlistVotes: {},
|
||||
selectedPlaylist: null
|
||||
};
|
||||
const initializeRoom = async (roomId, user) => {
|
||||
try {
|
||||
const randomPlaylists = await youtubeService.getRandomPlaylists(3);
|
||||
rooms[roomId] = {
|
||||
members: [{...user, creator: true}],
|
||||
settings: {},
|
||||
state: 'waiting',
|
||||
playlistVotes: {},
|
||||
selectedPlaylist: null,
|
||||
availablePlaylists: randomPlaylists
|
||||
};
|
||||
} catch (error) {
|
||||
console.error("Error initializing room playlists:", error);
|
||||
rooms[roomId] = {
|
||||
members: [{...user, creator: true}],
|
||||
settings: {},
|
||||
state: 'waiting',
|
||||
playlistVotes: {},
|
||||
selectedPlaylist: null,
|
||||
availablePlaylists: {
|
||||
seventies: youtubeService.PLAYLISTS.seventies
|
||||
}
|
||||
};
|
||||
}
|
||||
};
|
||||
|
||||
module.exports.connectUserToRoom = (roomId, user) => {
|
||||
module.exports.connectUserToRoom = async (roomId, user) => {
|
||||
roomId = roomId.toUpperCase();
|
||||
if (rooms[roomId]) {
|
||||
rooms[roomId].members.push({...user, creator: false});
|
||||
} else {
|
||||
initializeRoom(roomId, user);
|
||||
await initializeRoom(roomId, user);
|
||||
}
|
||||
console.log(`User ${user.name} connected to room ${roomId}`);
|
||||
}
|
||||
};
|
||||
|
||||
module.exports.getUserRoom = (userId) => {
|
||||
for (const roomId in rooms) {
|
||||
@ -88,7 +106,6 @@ module.exports.disconnectUser = (userId) => {
|
||||
|
||||
if (memberIndex !== -1) {
|
||||
if (room.members[memberIndex].creator && room.members.length > 1) {
|
||||
// Transfer host status to the next user
|
||||
room.members[1].creator = true;
|
||||
}
|
||||
|
||||
@ -145,8 +162,7 @@ module.exports.voteForPlaylist = (roomId, userId, playlistId) => {
|
||||
|
||||
const room = rooms[roomId];
|
||||
if (room.state !== 'waiting') return false;
|
||||
|
||||
// Remove previous vote if exists
|
||||
|
||||
const previousVote = Object.entries(room.playlistVotes)
|
||||
.find(([_, voters]) => voters.includes(userId));
|
||||
|
||||
@ -154,8 +170,7 @@ module.exports.voteForPlaylist = (roomId, userId, playlistId) => {
|
||||
room.playlistVotes[previousVote[0]] =
|
||||
room.playlistVotes[previousVote[0]].filter(id => id !== userId);
|
||||
}
|
||||
|
||||
// Add new vote
|
||||
|
||||
if (!room.playlistVotes[playlistId]) {
|
||||
room.playlistVotes[playlistId] = [];
|
||||
}
|
||||
@ -172,7 +187,7 @@ module.exports.getWinningPlaylist = (roomId) => {
|
||||
const room = rooms[roomId];
|
||||
if (!room || !room.playlistVotes) {
|
||||
console.log(`No votes found for room ${roomId}, using default playlist`);
|
||||
return Object.values(require('../services/youtubeService').PLAYLISTS)[0];
|
||||
return room.availablePlaylists[Object.keys(room.availablePlaylists)[0]];
|
||||
}
|
||||
|
||||
let maxVotes = 0;
|
||||
@ -190,10 +205,23 @@ module.exports.getWinningPlaylist = (roomId) => {
|
||||
});
|
||||
|
||||
if (!winningPlaylist) {
|
||||
console.log('No winning playlist found, using default');
|
||||
winningPlaylist = Object.values(require('../services/youtubeService').PLAYLISTS)[0];
|
||||
console.log('No winning playlist found, using first available');
|
||||
winningPlaylist = room.availablePlaylists[Object.keys(room.availablePlaylists)[0]];
|
||||
}
|
||||
|
||||
console.log(`Selected winning playlist: ${winningPlaylist}`);
|
||||
return winningPlaylist;
|
||||
};
|
||||
|
||||
module.exports.getAvailablePlaylists = (roomId) => {
|
||||
return rooms[roomId]?.availablePlaylists || {};
|
||||
};
|
||||
|
||||
module.exports.updateAvailablePlaylists = (roomId, newPlaylists) => {
|
||||
if (rooms[roomId]) {
|
||||
rooms[roomId].availablePlaylists = newPlaylists;
|
||||
rooms[roomId].playlistVotes = {};
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
};
|
Reference in New Issue
Block a user