Offline-cached songs not all scrobbled to lastfm

Issue description:

I listened to 2 entire albums from the offline-cache in Symfonium while not connected to the internet.
When I reconnected my phone none of the songs that I listened to while not connected were scrobbled.
Only the first track which I started playing while I was still connected and the last 4 which were played when I was connected again ended up in lastfm.

In the jellyfin activity log all songs I listened to offline share the same timestamp. Maybe that’s why they were not scrobbled?
Is that due to how/when Symfonium submits the played status once a network connection is re-established or is something wrong on the Jellyfin side?

My scrobbles are handled by multi-scrobbler which I’ve added to jellyfin via a webhook that has worked flawlessly until now.

I’m unsure if the problem is Symfonium, Jellyfin or multi-scrobbler, my hunch is that it might be multi-scrobbler as the webhook states “playback progress”. I’ll take it up with the developer of multi-scrobbler if that is the case. Whatever Symfonium transmits to jellyfin for a finished play probably doesn’t fall into the “playback progress” category.

To test further I’ve downloaded a single track to offline-cache, turned off internet, turned on debug logging, listened to it, turned internet back on and waited for a minute.
That track also showed up in the jellyfin activity log, however neither multi-scrobbler nor lastfm took notice. I’ll include that log.

Logs:

Jellyfin activity:

User1 has finished playing Lisa Hannigan - What'll I Do on OnePlus HD1903
today at 1:24 AM
User1 has finished playing Lisa Hannigan - Safe Travels (Don't Die) on OnePlus HD1903
today at 1:22 AM
User1 is playing Lisa Hannigan - What'll I Do on OnePlus HD1903
today at 1:22 AM
User1 has finished playing Lisa Hannigan - Safe Travels (Don't Die) on OnePlus HD1903
today at 1:22 AM
User1 has finished playing Lisa Hannigan - Safe Travels (Don't Die) on OnePlus HD1903
today at 1:18 AM
User1 has finished playing Lisa Hannigan - Safe Travels (Don't Die) on OnePlus HD1903
today at 1:18 AM
User1 has finished playing Lisa Hannigan - Passenger on OnePlus HD1903
today at 1:17 AM
User1 has finished playing Lisa Hannigan - Passenger on OnePlus HD1903
today at 1:17 AM
User1 is playing Lisa Hannigan - Safe Travels (Don't Die) on OnePlus HD1903
today at 1:17 AM
User1 has finished playing Lisa Hannigan - Paper House on OnePlus HD1903
today at 1:13 AM
User1 is playing Lisa Hannigan - Passenger on OnePlus HD1903
today at 1:13 AM
User1 has finished playing Lisa Hannigan - Paper House on OnePlus HD1903
today at 1:13 AM
User1 has finished playing Lisa Hannigan - O Sleep on OnePlus HD1903
today at 1:10 AM
User1 has finished playing Lisa Hannigan - Nowhere to Go on OnePlus HD1903
today at 1:10 AM
User1 has finished playing Lisa Hannigan - Little Bird on OnePlus HD1903
today at 1:10 AM
User1 has finished playing Lisa Hannigan - Knots on OnePlus HD1903
today at 1:10 AM
User1 has finished playing Lisa Hannigan - Home on OnePlus HD1903
today at 1:10 AM
User1 has finished playing Lisa Hannigan - A Sail on OnePlus HD1903
today at 1:10 AM
User1 has finished playing Lisa Hannigan - Lille on OnePlus HD1903
today at 1:10 AM
User1 has finished playing Lisa Hannigan - Teeth on OnePlus HD1903
today at 1:10 AM
User1 has finished playing Lisa Hannigan - Pistashio on OnePlus HD1903
today at 1:10 AM
User1 has finished playing Lisa Hannigan - Courting Blues on OnePlus HD1903
today at 1:10 AM
User1 has finished playing Lisa Hannigan - Keep It All on OnePlus HD1903
today at 1:10 AM
User1 has finished playing Lisa Hannigan - I Don't Know on OnePlus HD1903
today at 1:10 AM
User1 has finished playing Lisa Hannigan - Splishy Splashy on OnePlus HD1903
today at 1:10 AM
User1 has finished playing Lisa Hannigan - Sea Song on OnePlus HD1903
today at 1:10 AM
User1 has finished playing Lisa Hannigan - Venn Diagram on OnePlus HD1903
today at 1:10 AM
User1 has finished playing Lisa Hannigan - An Ocean and a Rock on OnePlus HD1903
today at 1:10 AM
User1 has finished playing Lisa Hannigan - An Ocean and a Rock on OnePlus HD1903
today at 12:14 AM
User1 is playing Lisa Hannigan - An Ocean and a Rock on OnePlus HD1903
today at 12:04 AM

Debug log from the 1 track test:
debug.log (116,4 KB)

Screenshots:

I’ve added the webhook to jellyfin as instructed here:

The only tracks that made it to lastfm:

Yes it’s multi scrobbler.

You can send them to Scrobble when receiving a request to the PlayedItems endpoint · Issue #25 · lyarenei/jellyfin-plugin-listenbrainz · GitHub that is related to another scrobbler that fixed their side.

1 Like

Thanks, I’ll pass that information on!

H @Tolriq I’m the developer for multi-scrobbler. Thanks for the head start on using UserSavedData for jellyfin!

I’ve discovered an issue with the way symfonium reports offline played items to Jellyfin that is a showstopper for me:

The datePlayed data sent to Jellyfin on the PlayedItems endpoint, which Jellyfin uses to set the last played time for the item, is not specified correctly and causes Jellyfin to fallback to setting LastPlayedDate as the time the play was reported, rather than the actual time it was played. The effect of this is that all offline plays are reported to be played at the same time as when symfonium comes back online.

I have a writeup of the issue, with logs, along with possible solutions here, please take a look. (And please check out the timezone issue as well :wink: )

As a new user I can’t add more than one link to this post. If you cannot access the logs on the GH issue please let me know.

Thanks for your time.

1 Like

Thanks, post body is supposed to work but well Jellyfin :slight_smile:

Anyway I’ll fix and also return UTC as I touch that code, was too lazy before since play count is more important that exact time of play.

1 Like

Hello @Tolriq and congrats on another release :slight_smile: The updates for jellyfin offline are mostly working but I am seeing an issue related to the LastPlayedDate timestamp (and duplication?)

In my app I am getting two events for UserSavedData (kicked off by the /PlayedItems endpoint, judging from these logs. I’m not sure why im getting two, and this in itself is not an issue, but the second of the two calls is using an incorrect timestamp – it is sending local time (EST) as an ISO timestamp with a UTC (Z) timezone.

My symphonium debug logs from when one song ends and goes to the next track:

2023-08-04 15:58:58.102 Verbose/JellyfinLogger: --> [857] POST http://192.168.0.140:8096/Users/275322ade41c450f8b4bdc1fe27f72b6/PlayedItems/ef6d6c9b414a8ad496321c4ab6ed6edf?datePlayed=20230804195857 (31-byte body)
2023-08-04 15:58:58.103 Verbose/JellyfinLogger: --> [857] {"datePlayed":"20230804195857"}
2023-08-04 15:58:58.112 Verbose/JellyfinLogger: <-- [406] 204 No Content http://192.168.0.140:8096/Users/275322ade41c450f8b4bdc1fe27f72b6/PlayingItems/ef6d6c9b414a8ad496321c4ab6ed6edf (130ms, 0-byte body)
2023-08-04 15:58:58.112 Verbose/JellyfinLogger: <-- [406] END HTTP (No body, response code 204)
2023-08-04 15:58:58.149 Verbose/JellyfinLogger: <-- [635] 204 No Content http://192.168.0.140:8096/Users/275322ade41c450f8b4bdc1fe27f72b6/PlayingItems/28a3c4db7cdecac544561b07db666161 (162ms, 0-byte body)
2023-08-04 15:58:58.151 Verbose/JellyfinLogger: <-- [635] END HTTP (No body, response code 204)
2023-08-04 15:58:58.185 Verbose/JellyfinLogger: <-- [857] 200 OK http://192.168.0.140:8096/Users/275322ade41c450f8b4bdc1fe27f72b6/PlayedItems/ef6d6c9b414a8ad496321c4ab6ed6edf?datePlayed=20230804195857 (100ms, unknown-length body)
2023-08-04 15:58:58.186 Verbose/JellyfinLogger: <-- [857] {"PlaybackPositionTicks":0,"PlayCount":19,"IsFavorite":false,"LastPlayedDate":"2023-08-04T15:58:57.0000000Z","Played":true,"Key":"Arts the Beatdoctor-Transitions-0001-0014Mellow Drama"}
2023-08-04 15:58:58.188 Verbose/JellyfinLogger: <-- [732] 204 No Content http://192.168.0.140:8096/Users/275322ade41c450f8b4bdc1fe27f72b6/PlayingItems/28a3c4db7cdecac544561b07db666161/Progress?PositionTicks=0&PlayMethod=DirectStream&IsPaused=False (203ms, 0-byte body)
2023-08-04 15:58:58.188 Verbose/JellyfinLogger: <-- [732] END HTTP (No body, response code 204)
2023-08-04 15:58:58.196 Verbose/JellyfinLogger: --> [873] DELETE http://192.168.0.140:8096/Users/275322ade41c450f8b4bdc1fe27f72b6/PlayingItems/ef6d6c9b414a8ad496321c4ab6ed6edf (49-byte body)
2023-08-04 15:58:58.196 Verbose/JellyfinLogger: --> [873] {"PositionTicks":0,"PlayMethod":"","IsPaused":""}
2023-08-04 15:58:58.251 Verbose/JellyfinLogger: <-- [873] 204 No Content http://192.168.0.140:8096/Users/275322ade41c450f8b4bdc1fe27f72b6/PlayingItems/ef6d6c9b414a8ad496321c4ab6ed6edf (51ms, 0-byte body)
2023-08-04 15:58:58.251 Verbose/JellyfinLogger: <-- [873] END HTTP (No body, response code 204)

The symphonium call

2023-08-04 15:58:58.102 Verbose/JellyfinLogger: --> [857] POST http://192.168.0.140:8096/Users/275322ade41c450f8b4bdc1fe27f72b6/PlayedItems/ef6d6c9b414a8ad496321c4ab6ed6edf?datePlayed=20230804195857 (31-byte body)
2023-08-04 15:58:58.103 Verbose/JellyfinLogger: --> [857] {"datePlayed":"20230804195857"}

sends {"datePlayed":"20230804195857"} which is perfect! :tada: 19:58:57 is UTC for 3:58pm EST, my local time.

However, as you can see when a GET is made for the play with the same timestamp that was sent:

2023-08-04 15:58:58.185 Verbose/JellyfinLogger: <-- [857] 200 OK http://192.168.0.140:8096/Users/275322ade41c450f8b4bdc1fe27f72b6/PlayedItems/ef6d6c9b414a8ad496321c4ab6ed6edf?datePlayed=20230804195857 (100ms, unknown-length body)
2023-08-04 15:58:58.186 Verbose/JellyfinLogger: <-- [857] {"PlaybackPositionTicks":0,"PlayCount":19,"IsFavorite":false,"LastPlayedDate":"2023-08-04T15:58:57.0000000Z","Played":true,"Key":"Arts the Beatdoctor-Transitions-0001-0014Mellow Drama"}

The payload returned by Jellyfin has an ISO timestamp with local time but utc (Z) timezone

"LastPlayedDate":"2023-08-04T15:58:57.0000000Z"

I’m not sure there is anything you can do about this as the jellyfin docs aren’t reliable to begin with, as evidenced by this whole discussion :slight_smile: , but i did want to make you aware.

I’m still investigating this from my side. The main reason to inform you is that I don’t see this same behavior when I’m playing tracks normally from the jellyfin web interface and it only seems to occur if symphonium finishes a track (hits end of the song and goes to next) rather than pause/skip early.

EDIT: i should mention this seems to be happening when online.

You miss read the logs.

The [XXX] is an Id for the query to follow requests and answers and the arrows are important :slight_smile:

So Symfonium sends:

2023-08-04 15:58:58.102 Verbose/JellyfinLogger: --> [857] POST http://192.168.0.140:8096/Users/275322ade41c450f8b4bdc1fe27f72b6/PlayedItems/ef6d6c9b414a8ad496321c4ab6ed6edf?datePlayed=20230804195857 (31-byte body)
2023-08-04 15:58:58.103 Verbose/JellyfinLogger: --> [857] {"datePlayed":"20230804195857"}

Jellyfin answers:

2023-08-04 15:58:58.185 Verbose/JellyfinLogger: <-- [857] 200 OK http://192.168.0.140:8096/Users/275322ade41c450f8b4bdc1fe27f72b6/PlayedItems/ef6d6c9b414a8ad496321c4ab6ed6edf?datePlayed=20230804195857 (100ms, unknown-length body)
2023-08-04 15:58:58.186 Verbose/JellyfinLogger: <-- [857] {"PlaybackPositionTicks":0,"PlayCount":19,"IsFavorite":false,"LastPlayedDate":"2023-08-04T15:58:57.0000000Z","Played":true,"Key":"Arts the Beatdoctor-Transitions-0001-0014Mellow Drama"}

There’s no duplicate call from Symfonium in the extract that you give.

And as you can see I send the value you told me to send, so not sure what happens inside Jellyfin.

I realize the second call is not a POST to PlayedItems but Symfonium is still somehow reporting this track as played twice…

I’ve attached jellyfin debug logs showing this happen.

jellfindebug.log (15.9 KB)

This is reproducible. The generic webhook plugin is enabled and Notification Type “UserDataSaved” checked. Jellyfin web interface is closed, only using Symphonum.

With Symfonium online (able to communicate with Jellyfin) play any track to its completion and let Symfonium move to the next track.

Using my Jellyin log as an example:

Playback reported stopped by app (symphonium)

[2023-08-07 12:04:28.194 -04:00] [DBG] [13] Jellyfin.Api.Controllers.PlaystateController: ReportPlaybackStopped PlaySessionId: ""
[2023-08-07 12:04:28.278 -04:00] [INF] [13] Emby.Server.Implementations.Session.SessionManager: Playback stopped reported by app "Android" "13" playing "surfin' unova". Stopped at "unknown" ms

Jellyfin sends notification with the correct timestamp (LastPlayedDate)

[2023-08-07 12:04:28.293 -04:00] [DBG] [28] Jellyfin.Api.Auth.CustomAuthenticationHandler: AuthenticationScheme: "CustomAuthentication" was successfully authenticated.
[2023-08-07 12:04:28.306 -04:00] [DBG] [13] Jellyfin.Plugin.Webhook.Destinations.Generic.GenericClient: SendAsync Body: "{\"ServerId\":\"14c56359fd884267bbee31af3dabcc8b\",\"ServerName\":\"2fcca1ff52d6\",\"ServerVersion\":\"10.8.10\",\"ServerUrl\":\"\",\"NotificationType\":\"UserDataSaved\",\"Timestamp\":\"2023-08-07T12:04:28.3060478-04:00\",\"UtcTimestamp\":\"2023-08-07T16:04:28.3060501Z\",\"Name\":\"surfin\u0027 unova\",\"Overview\":\"\",\"Tagline\":\"\",\"ItemId\":\"6c9eb58169aff2a2ec02460f57a1bf3f\",\"ItemType\":\"Audio\",\"RunTimeTicks\":838269376,\"RunTime\":\"00:01:23\",\"Year\":2021,\"Album\":\"surfin\u0027 GBA\",\"Artist\":\"Louie Zong\",\"Audio_0_Title\":\"MP3 - Stereo\",\"Audio_0_Type\":\"Audio\",\"Audio_0_Language\":null,\"Audio_0_Codec\":\"mp3\",\"Audio_0_Channels\":2,\"Audio_0_Bitrate\":320000,\"Audio_0_SampleRate\":44100,\"Audio_0_Default\":false,\"Likes\":false,\"Rating\":0,\"PlaybackPositionTicks\":0,\"PlaybackPosition\":\"00:00:00\",\"PlayCount\":20,\"Favorite\":false,\"Played\":true,\"AudioStreamIndex\":-1,\"SubtitleStreamIndex\":-1,\"LastPlayedDate\":\"2023-08-07T16:03:04.0565232Z\",\"SaveReason\":\"PlaybackFinished\",\"NotificationUsername\":\"foxx\",\"UserId\":\"275322ade41c450f8b4bdc1fe27f72b6\"}"
"LastPlayedDate\":\"2023-08-07T16:03:04.0565232Z\"

Immediately after this there is another playback reported as stopped by app

[2023-08-07 12:04:28.366 -04:00] [DBG] [28] Jellyfin.Api.Controllers.PlaystateController: ReportPlaybackStopped PlaySessionId: ""
[2023-08-07 12:04:28.369 -04:00] [INF] [28] Emby.Server.Implementations.Session.SessionManager: Playback stopped reported by app "Android" "13" playing "surfin' unova". Stopped at "unknown" ms

Followed by another notification with the incorrect timestamp

[2023-08-07 12:04:28.397 -04:00] [DBG] [28] Jellyfin.Plugin.Webhook.Destinations.Generic.GenericClient: SendAsync Body: "{\"ServerId\":\"14c56359fd884267bbee31af3dabcc8b\",\"ServerName\":\"2fcca1ff52d6\",\"ServerVersion\":\"10.8.10\",\"ServerUrl\":\"\",\"NotificationType\":\"UserDataSaved\",\"Timestamp\":\"2023-08-07T12:04:28.3973204-04:00\",\"UtcTimestamp\":\"2023-08-07T16:04:28.3973232Z\",\"Name\":\"surfin\u0027 unova\",\"Overview\":\"\",\"Tagline\":\"\",\"ItemId\":\"6c9eb58169aff2a2ec02460f57a1bf3f\",\"ItemType\":\"Audio\",\"RunTimeTicks\":838269376,\"RunTime\":\"00:01:23\",\"Year\":2021,\"Album\":\"surfin\u0027 GBA\",\"Artist\":\"Louie Zong\",\"Audio_0_Title\":\"MP3 - Stereo\",\"Audio_0_Type\":\"Audio\",\"Audio_0_Language\":null,\"Audio_0_Codec\":\"mp3\",\"Audio_0_Channels\":2,\"Audio_0_Bitrate\":320000,\"Audio_0_SampleRate\":44100,\"Audio_0_Default\":false,\"Likes\":false,\"Rating\":0,\"PlaybackPositionTicks\":0,\"PlaybackPosition\":\"00:00:00\",\"PlayCount\":22,\"Favorite\":false,\"Played\":true,\"AudioStreamIndex\":-1,\"SubtitleStreamIndex\":-1,\"LastPlayedDate\":\"2023-08-07T12:04:30.0000000Z\",\"SaveReason\":\"PlaybackFinished\",\"NotificationUsername\":\"foxx\",\"UserId\":\"275322ade41c450f8b4bdc1fe27f72b6\"}"
"LastPlayedDate\":\"2023-08-07T12:04:30.0000000Z\"

This does not occur when

  • using jellyfin web
  • Symphonium is offline (reporting of offline tracks works correctly)
  • User does not completely finish playback in Syphonium (playback is interrupted by stop or play different track)

I do not assume to know if Jellyfin’s documentation is incorrect leading to an issue with implementation for Symphonium or if there is an actual issue with Symphonium! All I know is that I consistently get double PlaybackFinished events for the UserDataSaved notification when using symphonium in this way.

Perhaps Jellyfin takes care of the “PlayedItem” lifecycle automatically if the the client (Symphonium) is online? And that endpoint should only be used for offline reporting?

I needs complete Symfonium logs, I can’t guess what internal bug Jellyfin have without knowing what Symfonium send in your case …

You also need to have the full Jellyfin logs to see the incoming http requests.

But from the extract I’m pretty sure that they now incorrectly mark media as played when I report playback stopped with no position to explicitly not set the media played and not save a wrong resume point …

About the dates the only date I send is the one you told me to change to UTC. So it seems they do not properly handle the value they receive.

jellyfin-13-28-21.log (10.5 KB)
symphonium-13-28-21.log (81.2 KB)

I’ve attached jellyfin and symphonium logs for a reproduced double event. The relevant timestamp for symphonium switching songs is at ~13:28:21.

full Jellyfin logs to see the incoming http requests.

I have not been able to find information on how to do this. I have defaulted jellyfin logging to Debug (as per troubleshooting docs at jellyfin. org/docs/general/administration/troubleshooting/) and have overrides for things I think should matter but I am not getting the needed info in my logs:

logging.json

    "Serilog": {
        "MinimumLevel": {
            "Default": "Debug",
            "Override": {
                "Microsoft": "Warning",
                "System": "Warning",
                "Jellyfin.Plugin.Webhook": "Debug",
                "System.Net.Http.HttpClient": "Debug",
                "Emby.Server.Implementations.HttpServer.HttpListenerHost": "Debug",
                "Jellyfin.Api.Auth.CustomAuthenticationHandler": "Warning"
            }
        },
...

If you know how to get more debugging in jellyfin for symphonium please let me know, thanks.

Pretty sure you need to remove

                "Microsoft": "Warning",
                "System": "Warning",

To have all at debug.

Times do not match so it’s hard to match anything.

But in that log all the dates sent to the webhook are correct no?

2023-08-07 13:28:24.181 T:JellyfinLogger 
<-- [754] 200 OK http://192.168.0.140:8096/Users/275322ade41c450f8b4bdc1fe27f72b6/PlayedItems/f3f5b6bc4dd10d7c29f53378ed10e8f6?datePlayed=20230807172824 (102ms, unknown-length body)
2023-08-07 13:28:24.182 T:JellyfinLogger 
<-- [754] {"PlaybackPositionTicks":0,"PlayCount":17,"IsFavorite":false,"LastPlayedDate":"2023-08-07T13:28:24.0000000Z","Played":true,"Key":"Louie Zong-surfin\u0027 GBA-0002the road to fuchsia city"}

As you can read up on here, offline scrobbles for jellyfin have not worked out despite a lot of effort by FoxxMD because jellyfin provides inconsistent data (and wrong timestamps).

Have you considered adding direct support for multi-scrobbler in Symfonium? Since both you and FoxxMD are very active and capable, you should be able to figure it out with ease and cut out the middle-man (in this case jellyfin) to provide a superior and more flexible solution for scrobbling.

If you decide to add multi-scrobbler support:
To avoid duplicate scrobbles I think it would be best if multi-scrobbler within Symfonium would only be active on a per-source level.

So for example default being for local data plays only (which are currently not scrobbled at all I think) + whichever sources the user selects. That way it could be enabled for jellyfin (which does not have a well maintained lastfm plugin and which also provides inconsistent data via webhooks) while not messing with other sources where the lastfm implementation works.

Symfonium support pano scrobbler and all the others by default.

This is not possible to handle this by library or provider.

Pity, I tried pano scrobbler and disliked it. 7,50€ to be able to make the app look not-shitty? No thanks.
I also dislike the idea of having to have a second app running for something as trivial as scrobbling, and while at that an app that has to have permission to read all my notifications from all other apps to work.

Multi-scrobbler on the other hand is open source and selfhosted. I’d rather have multi-scrobbler with offline scrobbels not properly working due to jellyfin than another 3rd party app that can read all my notifications.

It’s a real bummer that symfonium can’t even submit scrobbels to lastfm on its own.

Well there’s not only last.fm there’s quite a few others, why should I handle all of them inside Symfonium when there’s dedicated apps that will always do that better?

Or when the server all have internal support for that too. The bummer here, is the number of bugs of Jellyfin not Symfonium logical choice to not implement half a solution that other apps have solved long ago.

That’s why I was suggesting multi-scrobbler.
Multi-scrobbler supports scrobbling to Maloja, Lastfm and Listenbrainz simultaneously from the same client.
If you were to support only one scrobbler, that would be the logical choice.

I wouldn’t say that having a second app running in the background that is often killed by phone vendors and stops working and which can spy on my activity is better than having a basic function of a music player (scrobbling) in the music player itself.

I agree that it’s unfortunate that jellyfin provides inconsistent data via it’s webhook and also that there’s no active maintainer of the lastfm plugin for jellyfin.

Well I can’t think of a music player that I’ve used in the last 10+ years which could not handle scrobbles internally. Songbird could do it natively, Mediamonkey with a well-maintained plugin, foobar2000 also has a plugin for it and MusicBee does it natively. Plex/Plexamp also handle scrobbling internally (even though not very well, plexamp often scrobbles offline listened tracks 5+ times per song).

I acknowledge that it can lead to duplicate scrobbels if you support scrobbling in symfonium when scrobbling is also configured in one or more sources. For example in Plex.

However I still think there should be some kind of fallback for the cases where scrobbling doesn’t work that does not rely on having a third party app running in the background on the mercy of phone vendors not turning it off to save battery.

On top of that you could provide additional functionality that the sources themselves don’t offer (like properly working offline-scrobbles with correct time stamps).

Currently plays of locally stored tracks are not scrobbled without a third party app and jellyfin offline scrobbles don’t work properly because of errors within jellyfin.
That’s two cases where having ANY kind of fallback scrobbling in Symfonium itself would be really useful in my opinion.

Sorry for spamming but I really like your app and scrobbles not working properly annoys me more than it should. I doubt that you’ll change your mind but I had to try.

This is a selfhosted project with 138 stars, so no it’s not a logical choice at all, of course not talking about the fact that it does not have an API for me to push to it as it works in the other way.

I wouldn’t say that having a second app running in the background that is often killed by phone vendors and stops working and which can spy on my activity is better than having a basic function of a music player (scrobbling) in the music player itself.

This is how it works for most, you install last.fm app to scrobble to last.fm or another app for something else. They do not need notification reading for most if they work correctly and use mediasession.

For the rest, Plex/Plexamp scrobble via the server exactly as Jellyfin (Without some bugs but with others) Add Plex in Symfonium and it will scrobble correctly :wink:
For the others as you said it’s often plugins, so more or less the same as installing another application written by someone else.

So TL;DR; there’s already a lot of fallback solutions on Android like Pano (It’s open source, and if you only care about scrobbling, then why complain about it’s UI), the last.fm app, …
All servers properly already scrobble, except bugged Jellyfin.

I understand your point of view, but I don’t agree with it.

Having a 2nd app running in the background with wide ranging permissions while also adding additional points of failure (for example when the phone vendor turns it off to save battery life) is simply not an option for me and scrobbling is a basic task that any music player should be able to handle on its own. Relying on 3rd party apps to support basic functions doesn’t really fit your “offline first” mentality to be honest.

I just hope the jellyfin people eventually fix their side of things so multi-scrobbler gets valid data again.

This is not a basic function at all, the servers already handle the feature, not my fault if it’s broken for one …

Offline first means that I also need to handle offline scrobling, and then comes the issue where the servers already do that so I need to have per provider configuration and then there’s a dozen different possible site to scrobble to, this is something very complex to address all the needs, there’s apps dedicated for that…

And no they do not need wide ranging permissions, and ensuring they are not killed in usually a 1 click configuration. (Again because some OEM does not respect standards).

You basically want me to rebuild everything the others have already done, for the wrong reasons.

Even if I did add something, it would be only last.fm and only as a global toggle so would not even fit your need.

You over simplify the issue. Symfonium properly scrobble and offline scrobble to each and every servers. That’s it’s job and it does it well. You have an issue with one server, this is no more my job to workaround that, there’s many workaround for Jellyfin bugs, this is not something I can address.

And as final note MultiScrobbler can perfectly workaround the issue on their side if they want to fix your issue.

This is the proper place to ask the workaround.