mirror of
https://github.com/janishutz/MusicPlayer.git
synced 2026-09-10 14:25:24 +02:00
98 lines
3.2 KiB
TypeScript
98 lines
3.2 KiB
TypeScript
import {
|
|
Config
|
|
} from '../../dtype/config';
|
|
import bodyParser from 'body-parser';
|
|
import corsManager from '../../corsManager';
|
|
import express from 'express';
|
|
import {
|
|
getLoginSdk
|
|
} from '../../sdk';
|
|
import logger from '../../logger';
|
|
import rooms from '../../manager/rooms';
|
|
import {
|
|
sseMiddleware
|
|
} from '../../manager/rooms/sse';
|
|
|
|
const routes = ( app: express.Application, foss: boolean, config: Config ) => {
|
|
const sdk = getLoginSdk( foss );
|
|
|
|
app.get( '/room/:id/connect', corsManager.middleware( false ), sseMiddleware( 'client', config ) );
|
|
|
|
app.get( '/room/:id/poll', corsManager.middleware( false ), ( request: express.Request, response: express.Response ) => {
|
|
if ( typeof request.params.id !== 'string' )
|
|
return response.sendStatus( 400 );
|
|
|
|
const room = rooms.get( request.params.id );
|
|
|
|
if ( !room ) response.sendStatus( 404 );
|
|
|
|
const lastRequest = parseInt( String( request.query.last ) ) ?? 0;
|
|
|
|
response.send(
|
|
JSON.stringify( {
|
|
'state': room?.state,
|
|
'playlist': ( lastRequest < room!.playlist!.lastUpdate || isNaN( lastRequest ) ) ? room!.playlist.playlist : undefined
|
|
} )
|
|
);
|
|
} );
|
|
|
|
app.options( '/room/:id/update/playlist', corsManager.middleware( false ) );
|
|
app.post(
|
|
'/room/:id/update/playlist',
|
|
corsManager.middleware( false ),
|
|
sdk.loginCheck(),
|
|
bodyParser.json(),
|
|
( request: express.Request, response: express.Response ) => {
|
|
if ( typeof request.params.id !== 'string' )
|
|
return response.sendStatus( 400 );
|
|
|
|
try {
|
|
if ( rooms.updatePlaylist(
|
|
request.params.id,
|
|
sdk.getUID( request )!,
|
|
request.body.playlist ?? []
|
|
) )
|
|
response.sendStatus( 200 );
|
|
else
|
|
response.sendStatus( 400 );
|
|
} catch ( err ) {
|
|
logger.error( 'Failed sending updated playlists with error', err );
|
|
response.sendStatus( 500 );
|
|
}
|
|
}
|
|
);
|
|
|
|
app.options( '/room/:id/update/state', corsManager.middleware( false ) );
|
|
app.post(
|
|
'/room/:id/update/state',
|
|
corsManager.middleware( false ),
|
|
sdk.loginCheck(),
|
|
bodyParser.json(),
|
|
( request: express.Request, response: express.Response ) => {
|
|
if ( typeof request.params.id !== 'string' ) {
|
|
return response.sendStatus( 400 );
|
|
}
|
|
|
|
try {
|
|
if ( rooms.updateState(
|
|
request.params.id,
|
|
sdk.getUID( request )!,
|
|
request.body.playing ?? false,
|
|
request.body.index ?? -1,
|
|
request.body.start ?? new Date().getTime()
|
|
) )
|
|
response.sendStatus( 200 );
|
|
else
|
|
response.sendStatus( 400 );
|
|
} catch ( err ) {
|
|
logger.error( 'Failed sending updated state with error', err );
|
|
response.sendStatus( 500 );
|
|
}
|
|
}
|
|
);
|
|
};
|
|
|
|
export default {
|
|
routes
|
|
};
|