diff --git a/src/backend/common/infrastructure/Atomic.ts b/src/backend/common/infrastructure/Atomic.ts index e05022e9..97d5c491 100644 --- a/src/backend/common/infrastructure/Atomic.ts +++ b/src/backend/common/infrastructure/Atomic.ts @@ -77,6 +77,19 @@ export const isClientType = (data: string): data is ClientType => { return clientTypes.includes(data as ClientType); } +export interface ComponentIdentifier { + type: SourceType | ClientType + name: string +} + +export interface SourceIdentifier extends ComponentIdentifier { + type: SourceType +} + +export interface ClientIdentifier extends ComponentIdentifier { + type: ClientType +} + export type InitState = 0 | 1 | 2; export const NOT_INITIALIZED: InitState = 0; export const INITIALIZING: InitState = 1; diff --git a/src/backend/scrobblers/AbstractScrobbleClient.ts b/src/backend/scrobblers/AbstractScrobbleClient.ts index ce84d5cd..abbb9e76 100644 --- a/src/backend/scrobblers/AbstractScrobbleClient.ts +++ b/src/backend/scrobblers/AbstractScrobbleClient.ts @@ -22,6 +22,7 @@ import { DUP_SCORE_THRESHOLD, FormatPlayObjectOptions, ScrobbledPlayObject, + SourceIdentifier, TIME_WEIGHT, TITLE_WEIGHT, TRANSFORM_HOOK, } from "../common/infrastructure/Atomic.js"; @@ -809,7 +810,7 @@ ${closestMatch.breakdowns.join('\n')}`, {leaf: ['Dupe Check']}); this.emitEvent('deadLetter', {dead: deadData}); } - playingNow = (data: PlayObject | PlayObject[], source: string) => { + playingNow = (data: PlayObject | PlayObject[], source: SourceIdentifier) => { const plays = Array.isArray(data) ? data : [data]; const p = plays.at(-1); diff --git a/src/backend/scrobblers/ScrobbleClients.ts b/src/backend/scrobblers/ScrobbleClients.ts index b2ff009f..608ecb79 100644 --- a/src/backend/scrobblers/ScrobbleClients.ts +++ b/src/backend/scrobblers/ScrobbleClients.ts @@ -2,7 +2,7 @@ import { childLogger, Logger } from '@foxxmd/logging'; import dayjs, { Dayjs } from "dayjs"; import { PlayObject, SourcePlayerObj } from "../../core/Atomic.js"; -import { ClientType, clientTypes, ConfigMeta, isClientType, REPORTED_PLAYER_STATUSES } from "../common/infrastructure/Atomic.js"; +import { ClientType, clientTypes, ConfigMeta, isClientType, REPORTED_PLAYER_STATUSES, SourceIdentifier } from "../common/infrastructure/Atomic.js"; import { AIOConfig } from "../common/infrastructure/config/aioConfig.js"; import { ClientAIOConfig, ClientConfig } from "../common/infrastructure/config/client/clients.js"; import { LastfmClientConfig } from "../common/infrastructure/config/client/lastfm.js"; @@ -45,9 +45,9 @@ export default class ScrobbleClients { this.localUrl = localUrl; this.logger = childLogger(parentLogger, 'Scrobblers'); // winston.loggers.get('app').child({labels: ['Scrobblers']}, mergeArr); - this.sourceEmitter.on('playerUpdate', async (payload: { data: SourcePlayerObj & { options: { scrobbleTo?: string[], scrobbleFrom?: string } } }) => { + this.sourceEmitter.on('playerUpdate', async (payload: { data: SourcePlayerObj & { options: { scrobbleTo: string[] } }} & SourceIdentifier) => { if(payload.data.status.reported === REPORTED_PLAYER_STATUSES.playing) { - this.playingNow(payload.data.play, payload.data.options); + this.playingNow(payload.data.play, {...payload.data.options, scrobbleFrom: { type: payload.type, name: payload.name}}); } }); @@ -343,11 +343,11 @@ ${sources.join('\n')}`); this.clients.push(newClient); } - playingNow = async (data: (PlayObject | PlayObject[]), options: {scrobbleTo?: string[], scrobbleFrom?: string} = {}) => { + playingNow = async (data: (PlayObject | PlayObject[]), options: {scrobbleTo: string[], scrobbleFrom: SourceIdentifier}) => { const playObjs = Array.isArray(data) ? data : [data]; const { scrobbleTo = [], - scrobbleFrom = 'source', + scrobbleFrom, } = options; if (this.clients.length === 0) { @@ -360,7 +360,7 @@ ${sources.join('\n')}`); } if (scrobbleTo.length > 0 && !scrobbleTo.includes(client.name)) { if(isDebugMode()) { - client.logger.debug(`Client was filtered out by Source '${scrobbleFrom}'`); + client.logger.debug(`Client was filtered out by Source '${scrobbleFrom.type} - ${scrobbleFrom.name}'`); } continue; } diff --git a/src/backend/sources/MemorySource.ts b/src/backend/sources/MemorySource.ts index 8066caa5..f6443933 100644 --- a/src/backend/sources/MemorySource.ts +++ b/src/backend/sources/MemorySource.ts @@ -92,7 +92,6 @@ export default class MemorySource extends AbstractSource { this.emitEvent('playerUpdate', { ...state, options: { - scrobbleFrom: this.getIdentifier(), scrobbleTo: this.clients } }); @@ -270,7 +269,6 @@ export default class MemorySource extends AbstractSource { this.emitEvent('playerUpdate', { ...apiState, options: { - scrobbleFrom: this.getIdentifier(), scrobbleTo: this.clients } });