From 3d59a9a7bf1bd05acdc09f4c6490c108f27c3c6c Mon Sep 17 00:00:00 2001 From: FoxxMD Date: Thu, 20 Aug 2026 00:02:40 +0000 Subject: [PATCH] feat: Add now playing behavior for monitoring state --- src/backend/common/infrastructure/MSBackendEventMap.ts | 2 +- src/backend/scrobblers/AbstractScrobbleClient.ts | 6 +++++- src/backend/scrobblers/ScrobbleClients.ts | 8 +++++--- src/backend/sources/MemorySource.ts | 2 ++ 4 files changed, 13 insertions(+), 5 deletions(-) diff --git a/src/backend/common/infrastructure/MSBackendEventMap.ts b/src/backend/common/infrastructure/MSBackendEventMap.ts index a107734d..8a407a13 100644 --- a/src/backend/common/infrastructure/MSBackendEventMap.ts +++ b/src/backend/common/infrastructure/MSBackendEventMap.ts @@ -16,7 +16,7 @@ export interface MSBackendEventMap extends Omit { scrobbleTo: string[] } }>] - playerUpdate: [EmittedMSEvent & { options: { scrobbleTo: string[] } },{},SourceType>] + playerUpdate: [EmittedMSEvent & { options: { scrobbleTo: string[], wasMonitored?: boolean } },{},SourceType>] configError: [Error | string] instantiateError: [Error] } \ No newline at end of file diff --git a/src/backend/scrobblers/AbstractScrobbleClient.ts b/src/backend/scrobblers/AbstractScrobbleClient.ts index 430d11ae..b813671d 100644 --- a/src/backend/scrobblers/AbstractScrobbleClient.ts +++ b/src/backend/scrobblers/AbstractScrobbleClient.ts @@ -1754,7 +1754,11 @@ export default abstract class AbstractScrobbleClient extends AbstractComponent i queuePlayingNow = async (data: SourcePlayerObj, source: SourceIdentifier) => { if(!this.isReady()) { - this.logger.debug('Not queueing play because scrobbler is not ready'); + this.logger.debug('Not queueing now playing because scrobbler is not ready'); + return; + } + if(!this.isMonitoring()) { + this.logger.debug('Not queueing now playing because scrobbler is not currently monitoring'); return; } const sourceId = `${source.name}-${source.type}`; diff --git a/src/backend/scrobblers/ScrobbleClients.ts b/src/backend/scrobblers/ScrobbleClients.ts index fbbbef31..8de62d8b 100644 --- a/src/backend/scrobblers/ScrobbleClients.ts +++ b/src/backend/scrobblers/ScrobbleClients.ts @@ -57,9 +57,11 @@ export default class ScrobbleClients { } this.sourceEmitter.on('playerUpdate', async (payload) => { - // agressively update Now Playing so scrobblers that display based on duration are mostly synced - // but aggressively *stop* updating if state becomes stale/orphaned - this.playingNow(payload.data, {...payload.data.options, scrobbleFrom: { type: payload.type, name: payload.name}}); + if(payload.data.options.wasMonitored) { + // agressively update Now Playing so scrobblers that display based on duration are mostly synced + // but aggressively *stop* updating if state becomes stale/orphaned + this.playingNow(payload.data, {...payload.data.options, scrobbleFrom: { type: payload.type, name: payload.name}}); + } }); this.sourceEmitter.on('discoveredToScrobble', async (payload) => { diff --git a/src/backend/sources/MemorySource.ts b/src/backend/sources/MemorySource.ts index a453640b..e146d756 100644 --- a/src/backend/sources/MemorySource.ts +++ b/src/backend/sources/MemorySource.ts @@ -115,6 +115,7 @@ export default class MemorySource extends AbstractSource { this.emitEvent('playerUpdate', { ...state, options: { + wasMonitored: this.isMonitoring(), scrobbleTo: this.clients } }); @@ -331,6 +332,7 @@ export default class MemorySource extends AbstractSource { this.emitEvent('playerUpdate', { ...apiState, options: { + wasMonitored: this.isMonitoring(), scrobbleTo: this.clients } }); -- 2.51.2