From 94d3ea5da8e6c3a5c4ea68a2fc15af0a4e63ba5a Mon Sep 17 00:00:00 2001 From: FoxxMD Date: Wed, 24 Jun 2026 01:10:05 +0000 Subject: [PATCH] fix: Fix typing for play update events --- src/backend/common/AbstractComponent.ts | 2 +- src/backend/scrobblers/AbstractScrobbleClient.ts | 9 ++++++--- src/backend/sources/AbstractSource.ts | 2 +- 3 files changed, 8 insertions(+), 5 deletions(-) diff --git a/src/backend/common/AbstractComponent.ts b/src/backend/common/AbstractComponent.ts index c7295361..a81d60b9 100644 --- a/src/backend/common/AbstractComponent.ts +++ b/src/backend/common/AbstractComponent.ts @@ -549,7 +549,7 @@ export default abstract class AbstractComponent extends AbstractInitializable { }); } - protected emitComponentUpdate = (payload: Partial) => { + protected emitComponentUpdate = >(payload: T) => { this.emitEvent('componentUpdate', payload); } protected emitPlayUpdate = (payload: MarkRequired, 'uid'>) => { diff --git a/src/backend/scrobblers/AbstractScrobbleClient.ts b/src/backend/scrobblers/AbstractScrobbleClient.ts index a8e56bfd..84f7e2c3 100644 --- a/src/backend/scrobblers/AbstractScrobbleClient.ts +++ b/src/backend/scrobblers/AbstractScrobbleClient.ts @@ -1185,6 +1185,8 @@ export default abstract class AbstractScrobbleClient extends AbstractComponent i const queueState = currQueuedPlay.queueStates.find(x => x.queueName === CLIENT_INGRESS_QUEUE); if(queueError !== undefined) { await this.queueRepo.updateById(queueState.id, {queueStatus: 'failed', error: queueError}); + queueState.queueStatus = 'failed'; + queueState.error = queueError; await this.playRepo.updateById(currQueuedPlay.id, {state: 'failed', error: queueError, play: currQueuedPlay.play}); currQueuedPlay.state = 'failed'; currQueuedPlay.error = queueError; @@ -1192,8 +1194,9 @@ export default abstract class AbstractScrobbleClient extends AbstractComponent i await this.queueRepo.updateById(queueState.id, {queueStatus: 'completed'}); await this.playRepo.updateById(currQueuedPlay.id, {state: successState ?? 'scrobbled', play: currQueuedPlay.play}); currQueuedPlay.state = successState ?? 'scrobbled'; + queueState.queueStatus = 'completed'; } - this.emitPlayUpdate(currQueuedPlay); + this.emitPlayUpdate({...currQueuedPlay, queueStates: [queueState]} as unknown as PlayApiCommonDetailed); this.emitEvent('scrobbleDequeued', { queuedScrobble: currQueuedPlay }) this.queuedGauge.labels(this.getPrometheusLabels()).dec(); this.queuedLength -= 1; @@ -1496,7 +1499,7 @@ export default abstract class AbstractScrobbleClient extends AbstractComponent i }); const playRow = await this.playRepo.createPlays([createPlayData]); - await this.queueRepo.create({componentId: this.dbComponent.id, playId: playRow[0].id, queueName: CLIENT_INGRESS_QUEUE}); + const queueState = await this.queueRepo.create({componentId: this.dbComponent.id, playId: playRow[0].id, queueName: CLIENT_INGRESS_QUEUE}); createdQueuedPlays.push(playRow[0]); this.logger.debug(`Added ${buildTrackString(play)} to the queue`); this.setStatus(`Added Play from parent ${play.uid} to queue`); @@ -1504,7 +1507,7 @@ export default abstract class AbstractScrobbleClient extends AbstractComponent i const queuedPlay = {id: nanoid(), source, play: play} //await this.playRepo.updateById(play.meta.dbId, {play}); this.emitEvent('scrobbleQueued', {queuedPlay: queuedPlay}); - this.emitPlayInsert(playRow[0]); + this.emitPlayInsert({...playRow[0], queueStates: [queueState]} as unknown as PlayApiCommonDetailed); this.queuedLength += 1; //this.queuedScrobbles.push(queuedPlay); this.queuedGauge.labels(this.getPrometheusLabels()).inc(); diff --git a/src/backend/sources/AbstractSource.ts b/src/backend/sources/AbstractSource.ts index 6464fa7c..aa8043c5 100644 --- a/src/backend/sources/AbstractSource.ts +++ b/src/backend/sources/AbstractSource.ts @@ -334,7 +334,7 @@ export default abstract class AbstractSource extends AbstractComponent implement this.tracksDiscovered++; this.logger.info(`Discovered => ${buildTrackString(play)}`); this.emitEvent('discovered', {play}); - this.emitPlayInsert(playRow); + this.emitPlayInsert({...playRow[0], queueStates: []} as unknown as PlayApiCommonDetailed); this.discoveredCounter.labels(this.getPrometheusLabels()).inc(); play.id = playRow[0].id; play.uid = playRow[0].uid;