[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(lzendpoint): Add date/listened during MS specific properties

#360

FoxxMD (Sep 19, 2025, 1:06 PM UTC) 8cdf779d 44f2a295

+23 -2
+13 -2
src/backend/common/vendor/ListenbrainzApiClient.ts
··· 264 264 release_group_mbid, 265 265 release_artist_name, 266 266 release_artist_names = [], 267 - scrobble_ts_soc = SCROBBLE_TS_SOC_START 267 + scrobble_ts_soc = SCROBBLE_TS_SOC_START, 268 + listened_for, 269 + listened_at_completed 268 270 } = {} 269 271 } = {}, 270 272 } = payload; ··· 277 279 albumArtists = unique([...(albumArtists ?? []), ...release_artist_names]) 278 280 } 279 281 280 - return { 282 + const play: PlayObject = { 281 283 data: { 282 284 playDate: typeof listened_at === 'number' ? dayjs.unix(listened_at) : dayjs(listened_at), 283 285 track: track_name, ··· 299 301 scrobbleTsSOC: scrobble_ts_soc 300 302 } 301 303 } 304 + 305 + if(listened_at_completed !== undefined) { 306 + play.data.playDateCompleted = dayjs.unix(listened_at_completed); 307 + } 308 + if(listened_for !== undefined) { 309 + play.data.listenedFor = listened_for; 310 + } 311 + 312 + return play; 302 313 } 303 314 304 315 static listenResponseToPlay(listen: ListenResponse): PlayObject {
+10
src/backend/common/vendor/listenbrainz/interfaces.ts
··· 130 130 * Specific to multi-scrobbler 131 131 */ 132 132 scrobble_ts_soc?: ScrobbleTsSOC 133 + /** Unix timestamp for when the user stopped listening 134 + * 135 + * Specific to multi-scrobbler 136 + */ 137 + listened_at_completed?: number 138 + /** Number of seconds track was listened to 139 + * 140 + * Specific to multi-scrobbler 141 + */ 142 + listened_for?: number 133 143 } 134 144 export interface TrackPayload extends MinimumTrack { 135 145 additional_info?: SubmitListenAdditionalTrackInfo;