@@ -215,6 +215,25 @@ export default createPlugin<
215215 this . ignoreChange = true ;
216216
217217 switch ( event . type ) {
218+ case 'CLEAR_QUEUE' : {
219+ if ( conn && this . permission === 'host-only' ) {
220+ await this . connection ?. broadcast ( 'SYNC_QUEUE' , {
221+ videoList : this . queue ?. videoList ?? [ ] ,
222+ } ) ;
223+ return ;
224+ }
225+
226+ this . queue ?. clear ( ) ;
227+ await this . connection ?. broadcast ( 'CLEAR_QUEUE' , null ) ;
228+ break ;
229+ }
230+ case 'SET_INDEX' : {
231+ this . queue ?. setIndex ( event . payload . index ) ;
232+ await this . connection ?. broadcast ( 'SET_INDEX' , {
233+ index : event . payload . index ,
234+ } ) ;
235+ break ;
236+ }
218237 case 'ADD_SONGS' : {
219238 if ( conn && this . permission === 'host-only' ) {
220239 await this . connection ?. broadcast ( 'SYNC_QUEUE' , {
@@ -231,10 +250,20 @@ export default createPlugin<
231250 ) ;
232251
233252 await this . queue ?. addVideos ( videoList , event . payload . index ) ;
234- await this . connection ?. broadcast ( 'ADD_SONGS' , {
235- ...event . payload ,
236- videoList,
237- } ) ;
253+ await this . connection ?. broadcast (
254+ 'ADD_SONGS' ,
255+ {
256+ ...event . payload ,
257+ videoList,
258+ } ,
259+ event . after ,
260+ ) ;
261+
262+ const afterevent = event . after ?. at ( 0 ) ;
263+ if ( afterevent ?. type === 'SET_INDEX' ) {
264+ this . queue ?. setIndex ( afterevent . payload . index ) ;
265+ }
266+
238267 break ;
239268 }
240269 case 'REMOVE_SONG' : {
@@ -385,16 +414,30 @@ export default createPlugin<
385414 const queueListener = async ( event : ConnectionEventUnion ) => {
386415 this . ignoreChange = true ;
387416 switch ( event . type ) {
388- case 'ADD_SONGS ' : {
389- await this . connection ?. broadcast ( 'ADD_SONGS ' , {
390- ... event . payload ,
391- videoList : event . payload . videoList . map ( ( it ) => ( {
392- ... it ,
393- ownerId : it . ownerId ?? this . connection ! . id ,
394- } ) ) ,
417+ case 'CLEAR_QUEUE ' : {
418+ await this . connection ?. broadcast ( 'CLEAR_QUEUE ' , null ) ;
419+ break ;
420+ }
421+ case 'SET_INDEX' : {
422+ await this . connection ?. broadcast ( 'SET_INDEX' , {
423+ index : event . payload . index ,
395424 } ) ;
396425 break ;
397426 }
427+ case 'ADD_SONGS' : {
428+ await this . connection ?. broadcast (
429+ 'ADD_SONGS' ,
430+ {
431+ ...event . payload ,
432+ videoList : event . payload . videoList . map ( ( it ) => ( {
433+ ...it ,
434+ ownerId : it . ownerId ?? this . connection ! . id ,
435+ } ) ) ,
436+ } ,
437+ event . after ,
438+ ) ;
439+ break ;
440+ }
398441 case 'REMOVE_SONG' : {
399442 await this . connection ?. broadcast ( 'REMOVE_SONG' , event . payload ) ;
400443 break ;
@@ -420,6 +463,14 @@ export default createPlugin<
420463 const listener = async ( event : ConnectionEventUnion ) => {
421464 this . ignoreChange = true ;
422465 switch ( event . type ) {
466+ case 'CLEAR_QUEUE' : {
467+ this . queue ?. clear ( ) ;
468+ break ;
469+ }
470+ case 'SET_INDEX' : {
471+ this . queue ?. setIndex ( event . payload . index ) ;
472+ break ;
473+ }
423474 case 'ADD_SONGS' : {
424475 const videoList : VideoData [ ] = event . payload . videoList . map (
425476 ( it ) => ( {
@@ -429,6 +480,12 @@ export default createPlugin<
429480 ) ;
430481
431482 await this . queue ?. addVideos ( videoList , event . payload . index ) ;
483+
484+ const afterevent = event . after ?. at ( 0 ) ;
485+ if ( afterevent ?. type === 'SET_INDEX' ) {
486+ this . queue ?. setIndex ( afterevent . payload . index ) ;
487+ }
488+
432489 break ;
433490 }
434491 case 'REMOVE_SONG' : {
0 commit comments