|
|
import { PlayerState, RoomState } from "./types" |
|
|
import { getRandomName, getTargetTime } from "./utils" |
|
|
import { getDefaultSrc } from "./env" |
|
|
import { getRoom, setRoom } from "./cache" |
|
|
|
|
|
export const updateLastSync = (room: RoomState) => { |
|
|
room.targetState.progress = getTargetTime( |
|
|
room.targetState.progress, |
|
|
room.targetState.lastSync, |
|
|
room.targetState.paused, |
|
|
room.targetState.playbackRate |
|
|
) |
|
|
room.targetState.lastSync = new Date().getTime() / 1000 |
|
|
return room |
|
|
} |
|
|
|
|
|
export const createNewUser = async (roomId: string, socketId: string) => { |
|
|
const room = await getRoom(roomId) |
|
|
if (room === null) { |
|
|
throw new Error("Creating user for non existing room:" + roomId) |
|
|
} |
|
|
|
|
|
const users = room.users |
|
|
let name = getRandomName() |
|
|
while (users.some((user) => user.name === name)) { |
|
|
name = getRandomName() |
|
|
} |
|
|
|
|
|
room.users.push({ |
|
|
avatar: "", |
|
|
name, |
|
|
player: { |
|
|
playing: { |
|
|
src: [], |
|
|
sub: [], |
|
|
}, |
|
|
paused: false, |
|
|
progress: 0, |
|
|
playbackRate: 1, |
|
|
loop: false, |
|
|
volume: 1, |
|
|
muted: true, |
|
|
fullscreen: false, |
|
|
duration: 0, |
|
|
error: null, |
|
|
} as unknown as PlayerState, |
|
|
socketIds: [socketId], |
|
|
uid: socketId, |
|
|
}) |
|
|
|
|
|
await setRoom(roomId, room) |
|
|
} |
|
|
|
|
|
export const createNewRoom = async (roomId: string, socketId: string) => { |
|
|
await setRoom(roomId, { |
|
|
serverTime: 0, |
|
|
commandHistory: [], |
|
|
id: roomId, |
|
|
ownerId: socketId, |
|
|
targetState: { |
|
|
playlist: { |
|
|
items: [ |
|
|
{ |
|
|
src: [{ src: getDefaultSrc(), resolution: "" }], |
|
|
sub: [], |
|
|
}, |
|
|
], |
|
|
currentIndex: 0, |
|
|
}, |
|
|
playing: { |
|
|
src: [{ src: getDefaultSrc(), resolution: "" }], |
|
|
sub: [], |
|
|
}, |
|
|
paused: false, |
|
|
progress: 0, |
|
|
playbackRate: 1, |
|
|
loop: false, |
|
|
lastSync: new Date().getTime() / 1000, |
|
|
}, |
|
|
users: [], |
|
|
|
|
|
chatLog: [], |
|
|
}) |
|
|
} |
|
|
|