- Support for estimateContentLength parameter in stream operation
- Can be set either globally in the SubsonicPreferences or passed with a StreamParams object to the stream method. Params passed directly to a method will override the global preferences though, so be careful when doing so.
- All signatures of the methods in media() have changed:
- All methods now return an instance of a new class MediaStream instead if an InputStream or URL.
- URL methods have been removed all-together because the logic is now implemented in MediaStream.
- Before:
InputStream stream = subsonic.media().stream(1); URL streamUrl = subsonic.media().streamUrl(1);
- Now:
MediaStream stream = subsonic.media().stream(1); InputStream inputStream = stream.getInputStream(); URL streamUrl = stream.getUrl(); int contentLength = stream.getContentLength(); // This value changes based on the estimateContentLength param
- Fixed wrong access modifiers for classes:
- net.beardbot.subsonic.client.api.browsing.ArtistParams
- net.beardbot.subsonic.client.api.browsing.ArtistInfoParams
- net.beardbot.subsonic.client.api.lists.AlbumListParams
- New API implementations:
- Lists
- getAlbumList
- getAlbumList2
- Annotation
- setRating
- Browsing
- getAlbumInfo
- getAlbumInfo2
- getArtistInfo
- getArtistInfo2
- Lists
- Migration to Java 17
- New API implementations:
- Lists
- getStarred
- getStarred2
- Annotation
- star
- unstar
- Lists
- Incompatibility with time-zoned date time strings in created/starred fields
- Possible XXE vulnerability in media API operations
- New method subsonic.media().getCoverArtUrl(songId) that returns a URL without reading from it.
- New method subsonic.media().streamUrl(songId) that returns a stream URL without reading from it.
- Fixed InputStream returned by subsonic.media().stream(songId) not readable as audio stream.
Initial Release