Scrobbling calls to Navidrome/OpenSubSonic server are inconsistent

Issue description:

Hi, new user of this app here. It has a sleek design and quite like it so far in combination with my Navidrome server. However, while using it I have noticed that scrobbling of tracks is inconsistent, resulting in about half of the tracks I listen to not being scrobbled.

The exact steps I took are as following:

First I started playing this (short) album, starting with the first song. As soon as the song started playing, I enabled debug mode to log. I then let the first song play in its entirety. Once the first song finished I let it continue with the second song. I let the second song play in its entirety and I then stopped the playing a few seconds after the third song started.

On LastFM I noticed that both songs had not been scrobbled. Note that it is not the case that scrobbling is disabled some way, as I have experienced about half of the songs being scrobbled. What I can see in the Navidrome logs is that when a song is playing, calls are being made to scrobble.view with submission=false every 30 seconds, I assume to let the server know that it is still playing. Then at the end of the song, a call to scrobble.view is expected with submission=true, but this call is not made. Instead, it starts the next song and calls scrobble.view for the new song with submission=false. Additionally, I noticed that at every 30 second mark when a Now Playing call is made, the API is called 2 or 3 times in quick succession, often within a second. This seems undesirable as well, but my guess is that this is a separate issue that is not directly related to scrobbling calls not being made.

Enclosed in the zip file I have included logs both from the app and from the Navidrome docker container. I included the latter because it shows concisely which calls were made to the server.

I would appreciate if you could investigate this issue. I searched through the settings and this forum to see if any mention was made of a similar issue or on how to set up scrobbling correctly, but I did not find anything. Thanks in advance.

Logs:

debug-20231021_132407.zip (12,8 KB)

Screenshots:

Additional information:

To better handle multiple offline playcounts and a few edges cases Symfonium query Subsonic for the song status before sending the scrobbles to avoid issues.

In your case it seems the playcount on Navidrome side is already bigger than Symfonium state so the push is skipped.

Now that OpenSubsonic is making progress the support for the last played attribute will permit to properly handle mode case and detect properly playcounts by other devices or not to send the proper values.

Since that can have side effects, it won’t be for next release.