OwnTone was supposed to default to the old raw tcp Spotify protocol, which
would have left it unaffected by Spotify breaking the http response to the
metadata request. However, the mechanism for defaulting was misplaced. This
should put it in the right place and fix#1912.
Of course, the new protocol is still broken, but hopefully that will be fixed
on Spotify's side.
Should make it easier to add/remove parameters without changing all calls to the
functions throughout the code.
Also adds an interface through which to call make_mp4_header().
- Calculate size for both formats (+ move the return to transcode_encode_query)
- Let transcode_needed() decide what format to output
- Determine content-type from transcoding type
- Add transcode-dependent ability to override file metadata in rsp/daap
- Send file size matching format
The change removes all direct calls to mxml from the modules that need an XML
parser (lastfm.c, pipe.c, rssscanner.c and httpd_rsp.c).
Even with the help of mxml, reading XML is hard, so a layer is added which
helps deal with stuff like whitespace and CDATA. This should make OwnTone more
resilient to any XML variations it might receive.
The changes fixes issue #1677.
This change allows to reuse curl handles for multiple requests.
Reusing a curl handle improves performance if more than one request is
made against a service (connection, session cache, dns cache are kept
between requests).
- New attempt at fixing #1317: Don't prevent reconnection if a request is queued
- Protection against flooding Spotify with reconnection attempts
- Don't reconnect when getting a stop request during blocked download
Cause of deadlock:
new volume pipe metadata -> lock pipe mutex -> set player volume waiting for
player -> player waiting for input write -> input write waiting for get
metadata -> get metadata waiting for mutex
Change implementation so lock is only held while parsing/storing metadata,
where it is required, and not when calling the player.
Select use of either libspotify or librespot-c as streaming backend via config
option.
librespot-c (renamed/improved spotifyc) impl has the following:
- sync interface
- seek support
- honor bitrate config, set client and thread name
- use web access token with "streaming" scope for login
- fix issue with podcast playback
Also say goodbye to file-based Spotify login.