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 } });