couteau
71d37fc9c7
Ignore ipv6 announcements when ipv6 disabled
2023-04-12 11:23:18 -04:00
couteau
e7a73551ab
Allow mixed ipv4/ipv6 mdns
2023-04-11 10:25:07 -04:00
ejurgensen
8013bac725
[artwork] Change search order for pipe artwork ("own" as fallback)
...
Ref. issue #1591
2023-04-03 22:33:21 +02:00
ejurgensen
9e93e130db
[raop] Make txt record comparison case insensitive
...
Should fix issue with TuneAero for Windows
Closes #1596
2023-03-28 23:09:08 +02:00
lordmyschkin
a4ae747b15
[web] Optionally Show FilePath on Now playing-Page
2023-03-15 22:32:16 +01:00
ejurgensen
c645d570ea
[artwork] Also look for "own" artwork for pipes
...
Closes #1591
2023-03-15 22:08:59 +01:00
ejurgensen
e94838925e
[httpd] Change prototype for the close connection callback
...
Don't include hreq since it isn't fully valid, so caller shouldn't be invited
to dereference it.
2023-03-07 21:01:45 +01:00
ejurgensen
18a80f15dd
[httpd] Multithread solution using worker threads instead of httpd threads
...
Using worker threads instead of httpd threads means that we, not libevent,
decide which requests get handled by which threads. This means that we can
make sure blocking requests (e.g. volume changes) don't get in the way of
realtime(ish) stuff like mp3 streaming.
Includes refactor of httpd_stream_file() since it was a bit of a monster.
2023-03-07 21:01:45 +01:00
ejurgensen
81922e147e
[streaming] Fix BSD name collision (pipe)
2023-03-07 21:01:10 +01:00
ejurgensen
a2c63a5bac
[httpd] Check for syscall() presence and fix small memleak
2023-03-07 21:01:10 +01:00
ejurgensen
7841e336b3
[main] Make libevent_pthreads non-optional
2023-03-07 21:01:10 +01:00
ejurgensen
e77cb3f94e
[streaming] ICY handling using output metadata events/callbacks
2023-03-07 21:01:10 +01:00
ejurgensen
4d0c297901
[evhtr] Consolidate pool threading in evthr.c
...
Also reinstate check for server already running
2023-03-07 21:01:10 +01:00
ejurgensen
bd6f38282c
[httpd] Main commit that adds multithreading to httpd
...
Also refactor streaming implementation to make it more like an output and to
let the design support multithreading.
2023-03-07 21:01:10 +01:00
ejurgensen
50a319df2b
[httpd] Try doing request handling in worker thread
2023-03-07 21:01:10 +01:00
ejurgensen
4736e10d11
[worker] Remove some unused includes
2023-03-07 21:01:10 +01:00
ejurgensen
3377faffb8
[worker] Switch worker to use evthr threadpool
2023-03-07 21:01:10 +01:00
ejurgensen
68d66c3229
[httpd] Drop libevhtp backend
...
Despite that it seemingly supports multithreading it picks threads that are
busy, and not sure how that can be prevented. Also libevhtp is currently
unmaintained.
2023-03-07 21:01:10 +01:00
ejurgensen
74f1b93b42
[httpd] Make http modules agnostic to evhttp
2023-03-07 21:01:10 +01:00
ejurgensen
4ae73fa9b4
[httpd] Move internal declarations to httpd_internal.h
2023-03-07 21:01:10 +01:00
ejurgensen
2778088c52
[httpd] Refactor to use modules for daap, dacp, json api etc.
...
Removes a lot of code duplication which hopefully will make it easier to add
support for evhtp as http engine.
2023-03-07 21:01:10 +01:00
ejurgensen
83b8a4eb3f
[http] Use curl for URL parsing instead of depending on httpd
...
Makes it easier to make the httpd parsing internal.
2023-03-07 21:01:10 +01:00
ejurgensen
2e31a3d4f3
[misc] 'unsigned short' instead of 'short unsigned' as arg to net_evhttp_bind()
2023-03-07 21:01:10 +01:00
ejurgensen
316d932d99
[dmap] Move dmap_send_error() to dacp_send_error()
...
Means dmap_common doesn't need a dependency to httpd and http replying is kept
within httpd_xxx modules.
2023-03-07 21:01:10 +01:00
ejurgensen
631996f133
[mpd] Decouple mpd and httpd
...
mpd is based on evhttp, so if httpd should use another backend they need to be
decoupled. No need to use httpd_send_reply/error, since CORS headers are not
relevant to MPD artwork serving.
2023-03-07 21:01:10 +01:00
ejurgensen
23979d223c
[httpd] Refactor http handlers so they are initialized centrally
...
Means regex.h doesn't need to be in httpd.h making it easier to e.g. experiment
with evhtp.
2023-03-07 21:01:10 +01:00
ejurgensen
5f342ea60b
[httpd/artwork] Drop support for libevent <2.1.4
2023-03-07 21:01:10 +01:00
ejurgensen
6ade24c935
[xcode] Support for user-configured ffmpeg filters
...
Closes #1583 and #290
2023-02-25 16:48:17 +01:00
ejurgensen
2272f99599
[artwork] Fix for --disable-spotify broken in commit c8e46aa
2023-02-06 22:59:27 +01:00
ejurgensen
070cf6a5fc
[spotify] Some cleanup of webapi client
2023-02-06 22:38:44 +01:00
ejurgensen
eee011180f
[spotify] Make web api client thread safe
...
Protect http_session with a lock and don't use mutating globals in utility
functions where it is less clear if they are protected.
2023-02-06 22:38:44 +01:00
ejurgensen
c8e46aad42
[artwork] Make Spotify online artwork getter thread safe
...
By making the global struct online_source's read-only. Before, the Spotify
handler was modifying auth_secret in a non-thread safe way.
2023-02-06 22:38:44 +01:00
ejurgensen
8b6336b91d
[xcode] Protect against memleak if future ffmpeg doesn't free options
...
Can happen if ffmpeg doesn't recognize all the options
2023-02-05 17:14:17 +01:00
ejurgensen
af07f9eeb4
[scan] Changes to commit 9a3cb3b7
...
* 'split_genre' -> 'only_first_genre' + changed description
* fix memleak on multiple genre tags
2022-12-29 20:07:30 +01:00
whatdoineed2do/Ray
0c43de9735
[scan] option to use first genre on multi token genres
...
multiple genres are either supported by format (see flac/orbis) or are
handled by convention (see mp3) - ffmpeg presents either case as a
single string, seperated by ';' (ie "Pop;Rock")
Currently the server/db does not support multiple genres and will store
the ffmpeg string as-is which is unlikely the user intention.
Introduce 'split_genre' to take the first genre token
2022-12-29 20:07:30 +01:00
ejurgensen
c23c2fdc45
[httpd] Addendum to commit 017e09d
: More fixing up of libevent warnings
2022-12-26 17:16:58 +01:00
ejurgensen
017e09d7c3
[httpd] Fix evhttp_connection_get_peer() const char warning for newer libevent
2022-12-25 20:09:38 +01:00
ejurgensen
b70188f4b8
[spotify] Fix commit 5e7bf182
to avoid picking too large images
2022-12-21 23:29:44 +01:00
ejurgensen
5e7bf1826c
[spotify] Fix poor artwork resolution on playback from playlist start
...
Closes #1559
2022-12-21 17:39:41 +01:00
whatdoineed2do/Ray
7d26c2c954
[db,scan,jsonapi] bug fix to handle date_released before 1970, storing -ve values in db
2022-12-13 17:38:07 +00:00
ejurgensen
7c0474b743
[player] Don't stop/clear queue on speaker 'prevent-playback' or 'busy'
...
When 'prevent-playback' or 'busy' is sent by a single playing speaker, we just
want to pause playback and not clear the queue
Closes #1553
2022-11-20 22:38:33 +01:00
ejurgensen
d468fd358e
[spotify] Select best artwork size even when not ordered descending
...
Spotify web API docs say that images are ordered wideest first, but that isn't
happening right now, so don't rely on that for size selection.
Also makes sure we pick an image even when max_w is smaller than smallest
available image.
2022-10-30 20:31:58 +01:00
ejurgensen
1379914857
[xcode] See if we can do without asking decoder for specific sample rate/channels
...
We use filters now, so shouldn't be necessary.
request_sample_fmt and request_channel_layout was added with commit 73b2d08
.
2022-10-26 17:22:41 +02:00
ejurgensen
684f55f603
[xcode] Align how ffmpeg API checks are done
2022-10-26 17:22:41 +02:00
ejurgensen
4ff850cd3d
[xcode] A bit of refactoring
2022-10-26 17:22:29 +02:00
ejurgensen
e437e41870
[airplay] Add WWW authentication for Airplay 2
...
Some speakers (e.g. Homepod) that are configured to require password want that
this is used both for pairing authentication and classic WWW Authentication.
This commit adds the WWW Authentication that is also used for Airplay 1.
Closes #1545 .
2022-10-15 00:30:31 +02:00
whatdoineed2do
94c28386a6
[xcode] Use ffmpeg ch_layout instead of deprecated channel_layout/channels ( #1536 )
...
Co-authored-by: whatdoineed2do/Ray <whatdoineed2do@nospam.gmail.com>
2022-10-06 17:09:01 +02:00
whatdoineed2do/Ray
48526c2ab7
[dacp] bug fix - play item from 'up next' when stopped
2022-09-03 01:32:01 +02:00
ejurgensen
c1373394a8
[mdns] Add log hint about Avahi not running if adding browser fails
...
Ref issue #1529
2022-08-21 10:21:22 +02:00
ejurgensen
3cbb95976a
[airplay] Add support for password based authentication
...
Closes #1527
2022-08-15 20:09:54 +02:00
ejurgensen
31ab97595e
[smartpl] Support larger smart playlists ( fixes #1521 )
2022-08-08 17:42:54 +02:00
ejurgensen
1725d5cef6
[mdns] If configured, use bind_address to set network interface
...
Otherwise keep using AVAHI_IF_UNSPEC. Resolves #1519 .
2022-07-14 21:29:21 +02:00
ejurgensen
3754871c73
[misc] Add utility function to get interface name from IP address
2022-07-14 21:12:58 +02:00
ejurgensen
680c27eb66
[mdns] Fix possible crash after Avahi restart ( fixes #1509 )
...
Necessary to clear the resolver list on client restart, since especially
r->resolver becomes invalid when mdns_client is freed.
Also drop freeing of libevent watches and timers on deinit, it is not
necessary, Avahi will do it.
2022-07-14 21:00:34 +02:00
ejurgensen
0bde7acce8
[smartpl] Fix parsing of CRLF and "NOT (" ( closes #1502 )
2022-06-28 20:46:20 +02:00
ejurgensen
8f9f311bdf
[dacp] Fix AirPlay speakers turning on by themselves ( closes #1487 )
...
Affects Denon speakers and possibly others
2022-06-06 10:20:40 +02:00
Christian Meffert
ffcde46140
Merge pull request #1484 from chme/fix/consume-repeat
...
[player] Turn repeat mode off when activating consume mode
2022-06-03 07:51:37 +02:00
chme
9340443a3b
[spotify] Remove "Spotify saved" playlist
...
This special playlist was previously required to keep track of saved
albums tracks to avoid purging them after a rescan, since then the
rescan logic was changed to use the Spotify web api and this playlist
has no use anymore.
2022-06-03 07:06:17 +02:00
chme
efb9ba7767
[spotify] Additional cleanup of functionality only used with libspotify
...
- Remove playlist commands only used by libspotify: adding / removing
playlist command was used by the callbacks from libspotify to receive
incremental updates (did not work for some time)
- Remove "login" web api endpoint: no login into libspotify is required
any more. Spotify web api authorization follows the OAuth flow.
2022-06-03 07:06:17 +02:00
ejurgensen
02078212ac
[httpd] Better log message when Spotify OAuth fails
2022-06-02 19:58:51 +02:00
chme
63bede3ee9
[player] Turn repeat mode off when activating consume mode and vice
...
versa
2022-05-28 09:42:07 +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
hgy59
30f33b1b1d
mdns_init: avoid null reference access
...
- when avahi client creation fails with mdns_client=null, use avahi_strerror(error) instead of MDNSERR
to avoid access to mdns_client->error.
2022-05-22 20:56:49 +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
whatdoineed2do/Ray
5cebf4aca2
[smartpl] add 'file_size'
2022-05-13 15:27:02 +01:00
whatdoineed2do/Ray
4418803aba
[db,jsonapi] add file_size to count query
2022-05-13 09:51:06 +01:00
whatdoineed2do
670ac7745d
[rcp] bug fix - speaker unselection upon restart / obey volume ( #1459 )
2022-05-08 14:09:59 +02:00
ejurgensen
c90a1c17e3
[-] Fix deprecated GCRY_THREAD_OPTION_PTHREAD_IMPL and GCRYCTL_SET_THREAD_CBS
...
Looks like libgcrypt uses platform standard threading instead of asking caller
for a threading package/callbacks.
2022-05-08 10:04:58 +02:00
whatdoineed2do/Ray
b54a963f3a
[web] typo prevent handling of LISTENER_SPEAKER events
2022-05-07 11:12:22 +01:00
Christian Meffert
6dbd90ad7f
Merge pull request #1461 from whatdoineed2do/player-missing-listener-event-on-device-fail
...
[player] send volume event when a device fails
2022-05-07 08:24:45 +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
whatdoineed2do/Ray
b5bb0bd7f2
[player] send volume event when a device fails - without this the webui does not know that an output device failing, volume/selected status remains
2022-04-29 22:00:03 +01:00
whatdoineed2do/Ray
7d525e4dec
[rcp] bug fix on deinit() - the rcp_session_cleanup() adv the head of list so no need to do again in deinit loop
2022-04-24 15:04:23 +01:00
Christian Meffert
7598a71aea
Merge pull request #1444 from chme/feat/jsonapi-pl-item-count
...
[jsonapi] Add item and stream count to playlists, expose config option "radio_playlists"
2022-04-08 17:44:02 +02:00
Christian Meffert
176142f311
Merge pull request #1445 from whatdoineed2do/websocket-slow-shutdown
...
[web] slow 4.1.6 shutdown; request to cancel ws loop
2022-04-06 17:27:38 +02:00
whatdoineed2do/Ray
f33ccb9238
[web] slow 4.1.6 shutdown; request to cancel ws loop
2022-04-06 11:18:48 +01:00
chme
32c1516e60
[jsonapi] Add item and stream count to playlists, expose config option
...
"radio_playlists" in config endpoint
2022-04-05 21:48:24 +02:00
chme
e5d3c148ea
[db/scan] Force compilation artist if track belongs to a compilation
2022-04-04 20:55:19 +02:00
chme
ecc139641a
[spotify] Respect album_override
setting when parsing Spotify tracks
2022-04-04 20:51:14 +02:00
chme
9564240613
[jsonapi] New endpoint to fetch single composer/genre
...
Refactor "browse" endpoints (genre and composer) by defining a common
endpoint with the browse type as path parameter.
2022-03-31 20:51:00 +02:00
chme
b18b76413d
[httpd] Fix parsing of uri into path parts with encoded '/' (%2F)
...
In path with an encoded '/' character, the parsing of the path into
parts was wrong.
E. g. an uri like
'/api/library/composers/Adam%20Gardner%2FDavid%20Schneider' would result
in the following parts:
- path_part[0] = "/api"
- path_part[1] = "library"
- path_part[2] = "composer"
- path_part[3] = "Adam Gardner"
- path_part[4] = "David Schneider"
Doing the decode after splitting the uri into parts fixes this and
results in:
- path_part[0] = "api"
- path_part[1] = "library"
- path_part[2] = "composer"
- path_part[3] = "Adam Gardner/David Schneider"
2022-03-31 20:51:00 +02:00
ejurgensen
a932cc532d
[smartpl] Increase size of parse output buffer
...
To accommodate for larger smart playlists
2022-03-24 22:58:54 +01:00
ejurgensen
03d05ea828
[spotify] Make sure failed AP's are avoided on next connection attempt
2022-03-22 20:58:43 +01:00
ejurgensen
f27eac8341
[artwork] Also use queue_item->artwork_url for pipe sources
2022-03-22 20:57:43 +01:00
ejurgensen
54aa9c32cc
[dacp] Listen for queue events to support json api metadata updates
...
Will only work for http and pipe sources
Fixes #1433
2022-03-22 20:57:43 +01:00
ejurgensen
5b23da9196
[player] 'clear_queue_on_stop_disable' in mpd section should keep working
...
Ref commit bfbd634
2022-03-20 20:30:25 +01:00
whatdoineed2do/Ray
f6ce4c0df2
[player] missing update from 92279ef
2022-03-20 12:52:36 +00:00
ejurgensen
92279ef33d
[library] Move clear_queue_on_stop_disable cfg option to library section
...
Resolves #1430
2022-03-17 22:44:06 +01:00
ejurgensen
48051f6364
[spotify] Handle channel error (so that new AP connection is triggered)
2022-03-15 21:14:28 +01:00
ejurgensen
75f6f75da3
[smartpl] Fix bison parser regression, missing "starts with" syntax
...
Also adds "ends with" syntax just for good measure.
Closes #1432
2022-03-07 23:31:52 +01:00
whatdoineed2do/Ray
ac9772eecf
[streaming] memleak introduced via e1375f6ad
2022-03-05 21:02:18 +00:00
ejurgensen
e6823199d6
[db] Fix incorrect sorting of album/artist searches via web api ( #1421 )
...
Fix incorrect sorting of album/artist searches via web api. Also works with composers etc.
Fixes issue #1418
2022-02-20 10:18:13 +01:00
ejurgensen
616be4d8cb
[db] Use custom LIKE operator adapted from sqlite's icu.c ( closes #1390 )
...
Improves the search, e.g.:
- 'é' LIKE 'e'
- 'æ' LIKE 'Æ'
- 'Ö' LIKE 'o'
2022-02-13 20:52:40 +01:00
ejurgensen
edd22b6874
[scan] Remove unused libunistring includes
2022-02-12 20:58:16 +01:00
ejurgensen
6a5a27d3db
[rcp] Fixup print masks, disable some logging
2022-02-11 22:09:14 +01:00
whatdoineed2do
a0ea8416f6
[db] fix 'add next' when in queue shuffle mode ( #1414 )
...
* [db] fix 'add next' when in queue shuffle mode
* [db] review on 'add next' fix
Co-authored-by: whatdoineed2do/Ray <whatdoineed2do@nospam.gmail.com>
2022-02-06 20:23:06 +01:00
ejurgensen
26d7cf453c
Merge pull request #1397 from whatdoineed2do/outputs-soundbridge
...
[outputs] new output: Roku/Soundbridge RCP
2022-02-06 17:17:05 +01:00
whatdoineed2do/Ray
8f722faaf2
[outputs] new output: RCP/Roku/SoundBridge devices
...
Roku SoundBridge devices can be treated as dumb speakers; they offer a
texted based protocol, RCP, that allows the server to request the Roku
device to connect to the server's stream.mp3 and provides ability to
control volume
Roku devices appear as speakers automatically via mDNS announcements on
the server _roku-rcp._tcp
2022-02-05 21:59:00 +00:00
ejurgensen
a19f5e3915
[db] Use static_assert() for map size consistency checking
2022-02-05 22:20:57 +01:00