Commit Graph

107 Commits

Author SHA1 Message Date
ejurgensen 61bae6367d [spotify/rtp] Remove some unused functions
Closes #1705
2024-01-01 16:37:15 +01:00
ejurgensen 3ee9204ff8 [xcode/daap/rsp] Default transcode to 320 kbps mp3 instead of wav
- 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
2023-12-04 17:26:03 +01:00
ejurgensen 65c72c484b [misc] Add misc_xml.c to wrap mxml, fixes XML reading of CDATA (et al)
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.
2023-11-12 23:43:38 +01:00
ejurgensen 214ef12cb5 [spotify] Fix free of invalid pointer on http request error
Fixes #1643
2023-08-29 20:14:19 +02:00
ejurgensen 0ca02687bd [spotify] Remove old libspotify integration
No longer works, libspotify has been sunset by Spotify
2022-05-25 22:49:35 +02:00
ejurgensen d4a2b11c3e [spotify] Slightly improved version of recent commit 79fb65f 2022-05-24 20:34:45 +02:00
ejurgensen 79fb65fbd8 [spotify] Fix for "Premium account required" (issue #1474)
Sadly user-agent spoofing seems to be necessary after Spotify sunset of
libspotify. Apparently librespot is whitelisted.
2022-05-17 23:31:30 +02:00
chme d277f7c7b3 [http/spotify] Add support for http sessions across multiple requests
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).
2022-05-01 09:01:23 +02:00
ejurgensen 03d05ea828 [spotify] Make sure failed AP's are avoided on next connection attempt 2022-03-22 20:58:43 +01:00
ejurgensen 48051f6364 [spotify] Handle channel error (so that new AP connection is triggered) 2022-03-15 21:14:28 +01:00
ejurgensen cd4386228d [spotify] Coverity fixups 2022-01-20 20:17:38 +01:00
ejurgensen c9aac896ee [player] Coverity fixups 2022-01-20 20:17:38 +01:00
ejurgensen 021a53aa64 [spotify] Add missing return() in librespot-c channel.c 2022-01-11 20:11:35 +01:00
chme 8becdee8f1 [db] Refactor db_query_fetch_* functions to take the output parameter
first and the input parameter as last parameter
2021-12-28 07:23:56 +01:00
chme a65ee4462e [db] Refactor fetching query result into generic function
Additionally changes the return value in case the end of the result set
is reached.
2021-12-28 06:55:35 +01:00
chme f3fa343b9b [spotify] Add missing listener notification on librespot logout 2021-12-26 20:22:06 +01:00
ejurgensen 5efe0eeb0f [pipe] Fix regression in commit 6646802
Don't try to apply pipe metadata if parsing failed. Resolves #1366.
2021-12-12 10:32:42 +01:00
ejurgensen b71c353fc9 [spotify] Update librespot-c for better connection handling
- 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
2021-11-27 15:10:56 +01:00
ejurgensen ce5634e372 [spotify] Fix log message typo 2021-11-20 14:55:27 +01:00
ejurgensen 6646802832 [pipe] Fix deadlock coming from metadata pipe (issue #1343)
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.
2021-11-15 23:13:13 +01:00
ejurgensen 6d54886030 [librespot-c] Close connection if peer disconnects
Attempt to fix possible bad state where librespot-c keeps try to using a
connection even after the access point has disconnected.
2021-11-04 17:20:55 +01:00
ejurgensen 5e66dbd8c9 [spotify] Fix Spotify initialization issues
* loading library even though library playback login failed
2021-11-01 10:37:17 +01:00
ejurgensen c4d57aa5d1 [spotify] Clear spotify_status on logout (clears logged_in and username) 2021-10-05 20:46:44 +02:00
ejurgensen 63c3d59d2f [spotify] Preserve fine-grained errors from request_make() 2021-09-24 19:17:47 +02:00
chme ce3e79d804 [spotify] Move "has_podcast_support" to spotify_status and expose this
flag in the web API
2021-09-04 09:46:29 +02:00
chme 24450bc90a [spotify] Scan spotify podcast subscriptions into library 2021-09-04 09:46:28 +02:00
ejurgensen 3f13ab1026 [pipe] Use fstat instead of lstat to fix time-of-check time-of-use warning
Fixes warning from CodeQL. Wasn't really a security issue since the check was
just a service to the user.
2021-09-02 00:17:22 +02:00
ejurgensen 54faa11ce5 [spotify] Update librespot-c so ./configure works with FreeBSD 2021-09-01 17:11:45 +02:00
ejurgensen d2f4efa1bf [misc] Centralize thread naming plus name websocket thread 2021-07-05 21:40:31 +02:00
ejurgensen eae09039d5 [spotify] Add missing include of config.h 2021-07-05 21:09:02 +02:00
ejurgensen 5d2d2ea227 [spotify] Add missing include of errno.h (fixes #1267) 2021-06-05 21:10:22 +02:00
ejurgensen 9fbbf9836c [spotify] Submit actual system info to Spotify 2021-06-05 21:09:44 +02:00
ejurgensen 4463d4e7d8 [-] Fix build with old libgcrypt versions (eg Buster's) with no pkg-config 2021-06-01 20:29:16 +02:00
ejurgensen 6f0fef6179 [spotify] Reintroduce libspotify support, change spotifyc to librespot-c
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.
2021-05-31 23:24:58 +02:00
ejurgensen 2bbc5f16c5 [xcode] Add support for seekable custom I/O (evbuffer input to transcode) 2021-05-31 11:55:32 +02:00
ejurgensen a67c74ba6c [spotify] Introduce own spotifyc as replacement for libspotify 2021-05-31 11:54:30 +02:00
ejurgensen 5f1686695a [-] Name update forked-daapd -> owntone throughout the code 2021-04-24 23:54:20 +02:00
ejurgensen 363bd5644b [pipe] Support for Shairport sync metadata flush event 2021-03-12 19:48:01 +01:00
ejurgensen d1a1f6c59c [pipe] Log when artwork is written to temp file 2020-11-28 21:27:58 +01:00
ejurgensen 67f16138c5 [pipe] Change int64_t print mask for log message
Removes compiler warning
2020-07-05 20:59:03 +02:00
ejurgensen 37521406f3 [input] Split file_http.c input into file.c and http.c
The common code is by now limited, and there is a lot of http-specific code.
2020-05-19 23:06:36 +02:00
ejurgensen a69cc65ff6 [input] Download StreamUrl resource async so input thread is not blocked 2020-05-19 23:06:36 +02:00
ejurgensen b44e5b3ede [input] Add handler/parser for StreamUrl tags 2020-05-19 23:06:36 +02:00
ejurgensen d2ac216f47 [http] Change name of struct field for StreamUrl
Should not be called artwork_url, since it also can link to other ressources.

Also some fixup, e.g. use new macros.
2020-05-16 00:13:31 +02:00
ejurgensen 360e46683b [input] Add a simple input for testing timing 2020-05-12 22:25:38 +02:00
ejurgensen 63ab446bd5 [pipe] Fix issue where Shairport progress metadata was ignored
Sometimes the progress has a negative position, which we were incorrectly
disregarding.
2020-05-11 21:39:02 +02:00
ejurgensen d84ea2008f [pipe] Increase metadata pipe max read size + don't abort if exceeded
Closes #976
2020-04-29 23:02:05 +02:00
ejurgensen dbc798da4f [-] Workaround for mxml 2.10 memleak
2.10's mxmlDelete memleaks, and mxml is used in many parts of forked-daapd. So
to avoid that we ship upstream's fixed version of mxmlDelete and use that.
2020-04-04 21:07:16 +02:00
ejurgensen 2651a979fe [inputs] Fix issue where input metadata would not be erased
When playing a stream, the input metadata is transferred to the queue_item.
However, that was not done if there was no input metadata, which meant that
old metadata was not getting erased.
2020-02-23 20:30:35 +01:00
ejurgensen f5e59c9b26
[pipe] Allow sample rate of 88200
Ref. issue #838
2019-11-05 00:13:33 +01:00