Please check existing knowledge before opening an issue
Describe the Bug
When listening to a song on loop on a Subsonic client (in my case, Navidrome/Amperfy), playing a song on loop causes the percentage listened to rise over 100%. When the loop finally ends or another song is played, only one instance of the listen ends up being scrobbled. I assume this results from the limitation of the Subsonic API not reporting the playback location.
In these screenshots the looping song was eventually played three times but only shows as once in recently played.
Maybe it'd be possible if the percentage played goes over 100% and playback state changes (stopped/a new song is played) to calculate the amount of times a song was played from the percentage or track length and scrobble that many listens?
An alternative could be just sending the scrobble when it hits each increment of 100% so it keeps the scrobble times accurate. When playback ends that final percentage could then be applied to the scrobble rules to see if it applies or not. If it ends on say, 258%, it'd already be scrobbled twice, but would then be scrobbled a third time if the scrobble rules allow for over 50% since it ends at 58%
Just spitballing, there's probably a better solution.
Thank you
Platform
Docker
Versions
- multi-scrobbler 0.10.0
- navidrome 0.58.0
Logs
[2025-10-23 23:47:16.332 -0600] DEBUG : [App] [Cache] [Scrobble] Saved cache to file
[2025-10-23 23:47:14.674 -0600] INFO : [App] [Scrobblers] [Koito - unnamed-koito] Scrobbled (Backlog) => (Subsonic) Nedaj - CODE @ 2025-10-23T23:38:02-06:00 (S)
[2025-10-23 23:47:14.653 -0600] DEBUG : [App] [Scrobblers] [Koito - unnamed-koito] Found 40 recent scrobbles
[2025-10-23 23:47:14.604 -0600] DEBUG : [App] [Scrobblers] [Koito - unnamed-koito] Refreshing recent scrobbles
[2025-10-23 23:47:14.603 -0600] DEBUG : [App] [Scrobblers] [Koito - unnamed-koito] [Upstream Refresh] Should refresh => newest queued scrobble playDate is newer than last refresh
[2025-10-23 23:47:14.451 -0600] DEBUG : [App] [Scrobblers] [Lastfm - unnamed-lfm] Raw Payload:
[2025-10-23 23:47:14.450 -0600] INFO : [App] [Scrobblers] [Lastfm - unnamed-lfm] Scrobbled (Backlog) => (Subsonic) Nedaj - CODE @ 2025-10-23T23:38:02-06:00 (S)
[2025-10-23 23:47:14.127 -0600] DEBUG : [App] [Scrobblers] [Lastfm - unnamed-lfm] Found 40 recent scrobbles
[2025-10-23 23:47:13.688 -0600] DEBUG : [App] [Scrobblers] [Lastfm - unnamed-lfm] Refreshing recent scrobbles
[2025-10-23 23:47:13.687 -0600] DEBUG : [App] [Scrobblers] [Lastfm - unnamed-lfm] [Upstream Refresh] Should refresh => newest queued scrobble playDate is newer than last refresh
[2025-10-23 23:47:12.803 -0600] DEBUG : [App] [Sources] [Subsonic - unnamed] Last activity was at 23:47:12-06:00 | Next check in 10.00s
[2025-10-23 23:47:12.801 -0600] INFO : [App] [Sources] [Subsonic - unnamed] Discovered => Nedaj - CODE @ 2025-10-23T23:38:02-06:00 (S)
[2025-10-23 23:47:12.800 -0600] DEBUG : [App] [Sources] [Subsonic - unnamed] [Player 1-4rft5] Started new Player listen range.
[2025-10-23 23:47:12.800 -0600] VERBOSE: [App] [Sources] [Subsonic - unnamed] [Player 1-4rft5] (fBL6NFMnTFfw1FgtewMaYa) Nedaj - CODE added after met thresholds with tracked time of 540.00s (wanted 240s) and tracked percent of 298.00% (wanted 50%) and not matching any prior plays
[2025-10-23 23:47:12.799 -0600] DEBUG : [App] [Sources] [Subsonic - unnamed] [Player 1-4rft5] Generating play object with playDateCompleted
[2025-10-23 23:47:12.799 -0600] VERBOSE: [App] [Sources] [Subsonic - unnamed] [Player 1-4rft5] New Play: (RDaBxisXbabORDlyZWiLPj) Foo Fighters - Everlong
[2025-10-23 23:47:12.798 -0600] DEBUG : [App] [Sources] [Subsonic - unnamed] [Player 1-4rft5] Ended current Player listen range.
[2025-10-23 23:47:12.798 -0600] DEBUG : [App] [Sources] [Subsonic - unnamed] [Player 1-4rft5] Incoming play state ((RDaBxisXbabORDlyZWiLPj) Foo Fighters - Everlong) does not match existing state, removing existing: (fBL6NFMnTFfw1FgtewMaYa) Nedaj - CODE
Additional Context
No response
Please check existing knowledge before opening an issue
Describe the Bug
When listening to a song on loop on a Subsonic client (in my case, Navidrome/Amperfy), playing a song on loop causes the percentage listened to rise over 100%. When the loop finally ends or another song is played, only one instance of the listen ends up being scrobbled. I assume this results from the limitation of the Subsonic API not reporting the playback location.
In these screenshots the looping song was eventually played three times but only shows as once in recently played.
Maybe it'd be possible if the percentage played goes over 100% and playback state changes (stopped/a new song is played) to calculate the amount of times a song was played from the percentage or track length and scrobble that many listens?
An alternative could be just sending the scrobble when it hits each increment of 100% so it keeps the scrobble times accurate. When playback ends that final percentage could then be applied to the scrobble rules to see if it applies or not. If it ends on say, 258%, it'd already be scrobbled twice, but would then be scrobbled a third time if the scrobble rules allow for over 50% since it ends at 58%
Just spitballing, there's probably a better solution.
Thank you
Platform
Docker
Versions
Logs
Additional Context
No response