diff --git a/backend/src/manager/rooms/index.ts b/backend/src/manager/rooms/index.ts index 30f223b..aed0ea6 100644 --- a/backend/src/manager/rooms/index.ts +++ b/backend/src/manager/rooms/index.ts @@ -41,7 +41,8 @@ const create = ( name: string, uid: string ) => { 'index': 0, 'lastUpdate': new Date().getTime(), 'playing': false, - 'start': new Date().getTime() + 'start': new Date().getTime(), + 'offset': 0 } }; @@ -112,9 +113,10 @@ const close = ( name: string, uid: string ) => { * @param playing - Set to true if the player is playing currently * @param index - The current playback index * @param start - The timestamp where playback of the current song started + * @param offset - The playback offset from the start in seconds * @returns true if update succeeded */ -const updateState = ( room: string, uid: string, playing: boolean, index: number, start: number ) => { +const updateState = ( room: string, uid: string, playing: boolean, index: number, start: number, offset: number ) => { if ( !rooms[room] || rooms[room].owner !== uid ) { return false; } @@ -123,7 +125,8 @@ const updateState = ( room: string, uid: string, playing: boolean, index: number 'playing': playing, 'index': index, 'lastUpdate': new Date().getTime(), - 'start': start + 'start': start, + 'offset': offset }; return sendUpdate( room, 'state' ); diff --git a/backend/src/manager/rooms/room.d.ts b/backend/src/manager/rooms/room.d.ts index 3d85963..6c95162 100644 --- a/backend/src/manager/rooms/room.d.ts +++ b/backend/src/manager/rooms/room.d.ts @@ -20,6 +20,7 @@ export interface Room { 'start': number; 'playing': boolean; 'lastUpdate': number; + 'offset': number; }; 'owner': string; 'clients': Client[]; diff --git a/backend/src/routes/room/update.ts b/backend/src/routes/room/update.ts index ddf36d2..18b4c63 100644 --- a/backend/src/routes/room/update.ts +++ b/backend/src/routes/room/update.ts @@ -79,7 +79,8 @@ const routes = ( app: express.Application, foss: boolean, config: Config ) => { sdk.getUID( request )!, request.body.playing ?? false, request.body.index ?? -1, - request.body.start ?? new Date().getTime() + request.body.start ?? new Date().getTime(), + request.body.offset ?? 0 ) ) response.sendStatus( 200 ); else diff --git a/web/src/components/player/PlayerControls.vue b/web/src/components/player/PlayerControls.vue index d4f8277..6570030 100644 --- a/web/src/components/player/PlayerControls.vue +++ b/web/src/components/player/PlayerControls.vue @@ -8,6 +8,7 @@ import { beautifyTime } from '@/ts/util/time'; + import messages from '@/ts/messages'; import player from '@/ts/player'; const playbackPercentage = player.playbackPercentage; @@ -42,6 +43,8 @@ const duration = computed( () => { return beautifyTime( player.duration.value ); } ); + + messages.useRoomWatchers();