Spaces:
Sleeping
Sleeping
copilot-swe-agent[bot]
Implement all four fixes: loop behavior, center overlay, YouTube autoplay, and music mode admin-only
470136c | import { PlayerState, RoomState } from "./types" | |
| import { getRandomName, getTargetTime } from "./utils" | |
| import { getDefaultSrc, getDefaultImg } 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, userName?: 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 = userName && userName.trim() ? userName.trim() : getRandomName() | |
| // Ensure unique name | |
| 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, | |
| userName?: string, | |
| isPublic?: boolean | |
| ) => { | |
| // Use default image if available, otherwise use default video | |
| const defaultImg = getDefaultImg() | |
| const defaultMedia = defaultImg || getDefaultSrc() | |
| const isImage = !!defaultImg | |
| await setRoom(roomId, { | |
| serverTime: 0, | |
| commandHistory: [], | |
| id: roomId, | |
| ownerId: socketId, | |
| ownerName: userName, | |
| isPublic: isPublic ?? false, // Default to private | |
| musicMode: false, // Default music mode to off | |
| targetState: { | |
| playlist: { | |
| items: [ | |
| { | |
| src: [{ src: defaultMedia, resolution: "" }], | |
| sub: [], | |
| title: isImage ? "Welcome" : undefined, | |
| }, | |
| ], | |
| currentIndex: 0, | |
| }, | |
| playing: { | |
| src: [{ src: defaultMedia, resolution: "" }], | |
| sub: [], | |
| title: isImage ? "Welcome" : undefined, | |
| }, | |
| paused: isImage, // Pause by default if it's an image | |
| progress: 0, | |
| playbackRate: 1, | |
| loop: false, | |
| lastSync: new Date().getTime() / 1000, | |
| }, | |
| users: [], | |
| // Initialize chat log for in-room chat feature | |
| chatLog: [], | |
| }) | |
| } | |