[READ-ONLY] Mirror of https://github.com/FoxxMD/multi-scrobbler. Scrobble plays from multiple sources to multiple clients docs.multi-scrobbler.app
deezer docker jellyfin koito lastfm listenbrainz maloja mopidy mpris music music-assistant plex scrobble self-hosted spotify subsonic tautulli youtube-music
0

Configure Feed

Select the types of activity you want to include in your feed.

feat(transformers): Log more transform stage detail for components

FoxxMD (Dec 16, 2025, 1:33 PM UTC) db8a2895 698f0b91

+9 -9
+9 -9
src/backend/common/AbstractComponent.ts
··· 84 84 postCompare: postConfig 85 85 } = playTransform; 86 86 87 - let preCompare, 88 - candidate, 89 - existing, 90 - postCompare; 87 + let preCompare: StageConfig[], 88 + candidate: StageConfig[], 89 + existing: StageConfig[], 90 + postCompare: StageConfig[]; 91 91 92 92 const builtHooks: string[] = []; 93 93 const emptyHooks: string[] = []; ··· 96 96 if(preCompare === undefined) { 97 97 emptyHooks.push('preCompare') 98 98 } else { 99 - builtHooks.push('preCompare'); 99 + builtHooks.push(`preCompare => ${preCompare.map(x => `${x.type}${x.name !== undefined ? `-${x.name}` : ''}`)}`); 100 100 } 101 101 } catch (e) { 102 102 throw new Error('preCompare was not valid', {cause: e}); ··· 107 107 if(candidate === undefined) { 108 108 emptyHooks.push('candidate') 109 109 } else { 110 - builtHooks.push('candidate'); 110 + builtHooks.push(`canidate => ${candidate.map(x => `${x.type}${x.name !== undefined ? `-${x.name}` : ''}`)}`); 111 111 } 112 112 } catch (e) { 113 113 throw new Error('candidate was not valid', {cause: e}); ··· 118 118 if(existing === undefined) { 119 119 emptyHooks.push('existing') 120 120 } else { 121 - builtHooks.push('existing'); 121 + builtHooks.push(`existing => ${existing.map(x => `${x.type}${x.name !== undefined ? `-${x.name}` : ''}`)}`); 122 122 } 123 123 } catch (e) { 124 124 throw new Error('existing was not valid', {cause: e}); ··· 129 129 if(postCompare === undefined) { 130 130 emptyHooks.push('postCompare') 131 131 } else { 132 - builtHooks.push('postCompare'); 132 + builtHooks.push(`postCompare => ${postCompare.map(x => `${x.type}${x.name !== undefined ? `-${x.name}` : ''}`)}`); 133 133 } 134 134 } catch (e) { 135 135 throw new Error('postCompare was not valid', {cause: e}); 136 136 } 137 137 138 - this.logger.debug(`Hooks built. Configured: ${builtHooks.join(', ')} | Empty: ${emptyHooks.join(', ')}`); 138 + this.logger.debug(`Hooks built! Empty: ${emptyHooks.join(', ')} | Configured: ${builtHooks.length === 0 ? 'None' : `\n${builtHooks.join('\n')}`}`); 139 139 140 140 this.transformRules = { 141 141 preCompare,