Symfonium sync crashes when TPOS is not an int

Issue description:

Symfonium 10.0.0 (12654)
Navidrome 0.52.0 (92a98cd5)
Android 14 (Samsung Galaxy S21 Ultra, OneUI 6.0)

Issue: I noticed that Symfonium had stopped synchronising with my Navidrome server (added albums would not show up under “recently added” and couldn’t be searched.

Log entries:

2024-05-01 14:09:58.752 Error/SubsonicLogger: Error
androidx.datastore.preferences.protobuf.i1: Expected an int but was 88697893262 at path $.subsonic-response.searchResult3.album[888].discTitles[0].disc
	at lw.o.r(Unknown Source:66)
	at lw.c0.c(Unknown Source:323)
	at app.symfonik.provider.subsonic.models.DiscTitleJsonAdapter.c(Unknown Source:44)
	at nw.b.c(Unknown Source:15)
	at lw.g.c(Unknown Source:15)
	at nw.b.c(Unknown Source:15)
	at app.symfonik.provider.subsonic.models.SearchResult_AlbumJsonAdapter.c(Unknown Source:80)
	at nw.b.c(Unknown Source:15)
	at jf.v.r(Unknown Source:266)
	at jf.v.invoke(Unknown Source:12)
	at e7.i.h(Unknown Source:191)
	at jf.l0.e0(Unknown Source:19148)
	at jf.t.r(Unknown Source:16)
	at ox.a.m(Unknown Source:5)
	at my.f0.run(Unknown Source:109)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:644)
	at java.lang.Thread.run(Thread.java:1012)

2024-05-01 14:09:58.752 Verbose/Subsonic: End Insert Album (false/false): 3888 [1.37s]
2024-05-01 14:09:58.752 Verbose/Subsonic: End parse music [false/3.19s]
2024-05-01 14:09:59.345 Verbose/SyncService: Releasing locks

Cause:

Searching for 88697893262 in the JSON output of search3.view, I found an album where all the tracks had this in their ID3 tags:

TPOS (Part of a set): 88697893262

The spec at id3v2.4.0-frames - ID3.org states this for TPOS:

TPOS
The ‘Part of a set’ frame is a numeric string that describes which
part of a set the audio came from. This frame is used if the source
described in the “TALB” frame is divided into several mediums, e.g. a
double CD. The value MAY be extended with a “/” character and a
numeric string containing the total number of parts in the set. E.g.
“1/2”.

Given that TPOS can be “1/2”, its type cannot be an integer.

Logs:

Upload description: Not needed

Additional information:

 
This album isn’t new, it has been in my collection for over 10 years. Other than updates to Navidrome and Symfonium, nothing was changed. Unsure where the regression comes from. (Did Navidrome start outputting this value in the search results where before there was none?)
 

Reproduction steps:

 

  1. Have a album of MP3s with a TPOS value of 88697893262 in your collection and sync them into Navidrome.
  2. Try to sync with Symfonium 10.0.0 (12654)
     

Media provider:

Subsonic

Screenshots:

     

You are mixing things, Symfonium access an API, the API expose a field that is an INT.
Navidrome returns a value that is not an INT.

This is effectively a TAG parsing issue but that’s not Symfonium work in this case.

This is a Navidrome side issue that @deluan will fix as soon as he have time, but it’s better to report it on Navidrome github.

Could be. I don’t know which side specified that the field was an int. All I know is that Symfonium stumbled over it, hence why I started reporting it here. I’ll open an issue on the Navidrome side for it.

This is actually both side that specified it via the OpenSubsonic initiative https://opensubsonic.netlify.app/ that both Deluan (Navidrome author) and me started :wink:

Fixed in Fix int types in OpenSubsonic responses. · navidrome/navidrome@2c06a42 · GitHub

Will be part of a bug fix release coming out soon.

1 Like