Max Kellermann
c5e607a310
event/TimerList: use IntrusiveTreeSet instead of boost::intrusive::multiset
2024-04-03 21:30:31 +02:00
Max Kellermann
5a0bad3b2f
util/IntrusiveTreeSet: new class
2024-04-03 21:29:34 +02:00
Max Kellermann
6a99f20828
util/IntrusiveHashSet: add concept checks to *Operators
...
This requires adding another template argument and reordering the others.
2024-04-03 21:27:37 +02:00
Max Kellermann
91ca502e10
output/httpd/Client: pass std::string_view to HandleLine()
2024-04-03 21:06:11 +02:00
Max Kellermann
1e5c37ee78
util/SpanCast: add ToStringView() with non-const std::byte
...
Without this, we would get std::string_view<std::byte> which makes no
sense.
2024-04-03 20:58:03 +02:00
Max Kellermann
ef2cdc0c6a
output/httpd/Client: remove duplicate API docs
2024-04-03 20:50:31 +02:00
Max Kellermann
c94c08c6b4
event/BufferedSocket: pass std::span to OnSocketInput()
2024-04-03 20:43:40 +02:00
Max Kellermann
5de8edced6
output/httpd/HttpdClient: convert `metaint` to a compile-time constant
...
After all these years, we had this as a field but there was never a
way to change the value. So let's just hard-code it until we actually
have a reason to make it variable at runtime.
2024-04-03 20:30:53 +02:00
Max Kellermann
8906ce07de
output/httpd/IcyMetaDataServer: pass metaint as std::size_t
2024-04-03 20:29:47 +02:00
Max Kellermann
9d66fc491c
output/httpd/Client: fix API doc syntax
2024-04-03 20:21:18 +02:00
Max Kellermann
f8a838db5d
output/httpd/Client: convert variable to std::string_view
...
In all cases, we already know the length, and casting the C string to
std::string_view has to call strlen() again.
2024-04-03 20:20:33 +02:00
Max Kellermann
e4ba736d03
input/{async,rewind}, decoder/dsdiff: use std::cmp_*() for safer integer comparisons
2024-03-15 18:45:46 +01:00
Max Kellermann
cc291e8c98
Merge branch 'extend-robustness-of-cdda-playback' of https://github.com/lazypingu/MPD
2024-03-15 18:39:45 +01:00
lazypingu
c00d217a53
Skip track if returned LSNs are negative which indicates track errors or if track is not an audio track
2024-03-12 20:39:51 +01:00
lazypingu
9d853897cd
Use track and disc functions from libcdio-paranoia to enable playback of hidden tracks and audio tracks on multisession CDs
2024-03-12 20:37:50 +01:00
lazypingu
88c77f9c8a
Add debug logging if setting speed failed
2024-03-12 20:37:50 +01:00
lazypingu
1a7278f1d3
Move cddap_speed_set below cddap_open to make sure that the drive was initialized and opened before attemting to set the speed
2024-03-12 20:36:28 +01:00
Max Kellermann
541707f9a8
lib/curl/Easy: add SetRequestBody() overload with std::span
2024-03-11 15:32:24 +01:00
Max Kellermann
00cf036d58
lib/avahi/Client: relax assertion after COLLISION/REGISTERING
...
Turns out that `AVAHI_CLIENT_S_COLLISION` can occur after
`AVAHI_CLIENT_S_RUNNING`, and `connected==true`. Relaxing this fixes
a bogus assertion failure.
2024-03-11 15:32:24 +01:00
Max Kellermann
9c68f24cfc
net/SocketError: fix typo
...
Whoops. This function has never been used.
2024-03-11 15:32:24 +01:00
Max Kellermann
02c4512b00
util/CharUtil: add IsLowerHexDigit()
2024-03-11 15:32:24 +01:00
Max Kellermann
be84b189dc
util, io, net, ...: use "#pragma once"
2024-03-11 15:32:24 +01:00
Max Kellermann
d685d693e8
input/rewind, archive/iso9660: use use std::cmp_*() for safe integer comparison
2024-03-11 15:09:57 +01:00
Max Kellermann
b0cfdfa257
client/Idle: consume only idle flags that were subscribed to
...
Since the very beginning when idle subscriptions where introduced
(commit 0bad84066b
), waiting for a certain idle mask would clear
all other idle flags as well. This would cause idle events to get
lost.
Closes https://github.com/MusicPlayerDaemon/MPD/issues/1998
2024-03-11 15:07:07 +01:00
Marius Feraru
7b6909f2c0
db/update/Walk:FindAncestorLoop: uint64_t inode & device
...
Previously, inode numbers were truncated to 32 bits, which could lead
to problems on XFS where inodes are 64 bit; this could lead to bogus
"recursive directory found" errors during database update.
[mk: added commit description and NEWS line]
Closes https://github.com/MusicPlayerDaemon/MPD/issues/2000
2024-03-11 13:34:27 +01:00
jcorporation
45553c5f61
This commit adds the sort and window parameter to "sticker find"
...
The three new compare operators "eq", "gt" and "lt" are casting the values to int.
Sort supports:
- uri: sort by uri
- value: sort by value as string
- value_int: casts value to int
Closes #1894
2024-03-07 20:52:11 +01:00
Max Kellermann
9eb26ab90c
Merge branch 'countplaylist' of https://github.com/jcorporation/MPD
2024-02-15 11:28:11 +01:00
jcorporation
f801f299c9
New command playlistlength
...
Count the number of songs and their total playtime in the playlist.
2024-02-15 11:25:34 +01:00
Max Kellermann
7f18cae2e4
Merge branch 'skidoo23-patch-1' of https://github.com/skidoo23/MPD
2024-02-13 08:06:16 +01:00
jcorporation
a3794f8c3b
Allow range in listplaylist and listplaylistinfo
2024-02-08 21:26:28 +01:00
skidoo23
31a88e7ccc
Update Templates.cxx
...
Remove Spotify leftovers
2024-01-26 14:34:58 +01:00
skidoo23
4074e3a9e4
Update Option.hxx
2024-01-26 14:31:08 +01:00
Max Kellermann
7f60acdfdd
util/CharUtil: add IsUpperAlphaNumericASCII()
2024-01-18 18:53:05 +01:00
Max Kellermann
aef2c5dc14
lib/avahi/Service: add field `visible`
...
Now individual services can be hidden or shown at any time.
2024-01-18 18:50:06 +01:00
Max Kellermann
8d02986b0e
lib/avahi/Publisher: add missing defer_register_services.Cancel() calls
2024-01-18 18:50:01 +01:00
Max Kellermann
461da92064
lib/avahi/Publisher: make the service list dynamic
...
This allows editing the list of services at any time instead of
passing a constant list at construction time. To do this, Service
instances are now caller-owned and managed in an IntrusiveList instead
of Publisher-owned in a std::forward_list.
2024-01-18 18:48:27 +01:00
Max Kellermann
b20b773189
zeroconf/avahi/Helper: embed the Avahi::Publisher without std::unique_ptr
2024-01-18 18:45:51 +01:00
Max Kellermann
5023432802
lib/avahi/Publisher: use DeferEvent for RegisterServices()
...
Prepares making the service list dyammic; the DeferEvent not only
moves the operation out of the current stack frame, but also allows
combining several AddService() calls.
2024-01-18 18:24:08 +01:00
Max Kellermann
4a14248004
lib/avahi/Publisher: move code to RegisterServices(AvahiEntryGroup)
2024-01-18 18:24:04 +01:00
Max Kellermann
1b241fc97a
lib/avahi/Publisher: allow RegisterServices() to throw
2024-01-18 18:24:01 +01:00
Max Kellermann
09d1ab7abe
lib/avahi/Publisher: move try/catch in GroupCallback() to the top level
2024-01-18 18:23:57 +01:00
Max Kellermann
d28cb93835
lib/avahi/Client: add method IsConnected()
...
Publish only if the client is really connected.
2024-01-18 18:23:52 +01:00
Max Kellermann
6b43338e06
lib/avahi/Client: add assert()
2024-01-18 18:23:48 +01:00
Max Kellermann
9a7a49350c
lib/avahi/Client: free the AvahiClient on AVAHI_CLIENT_FAILURE
...
Previously the AvahiClient was only freed when AVAHI_ERR_DISCONNECTED
was detected, but all other error conditions would lead to a memory
leak.
2024-01-18 18:23:45 +01:00
Max Kellermann
f85629afa6
lib/avahi/Client: is if with initializer
2024-01-18 18:23:42 +01:00
Max Kellermann
a39473a912
lib/avahi/Service: add API docs
2024-01-18 18:23:37 +01:00
Max Kellermann
05d0e9b8bb
lib/avahi/Publisher: reuse the AvahiEntryGroup
...
The libavahi-client documentation recommends reusing AvahiEntryGroup
instances instead of freeing them and creating new ones.
2024-01-18 18:23:30 +01:00
Max Kellermann
b68c3b7f55
net/SocketDescriptor: disable msghdr methods on Windows
2024-01-18 15:44:44 +01:00
Max Kellermann
0fbed6dec1
net/SocketDescriptor: remove misplaced [[nodiscard]]
2024-01-18 15:44:43 +01:00
naglis
16af2a2998
CommandLine: fix typo
...
I believe this is a typo since all other sections have the form
"<Singular> plugins", e.g. "Encoder plugins".
2024-01-18 14:23:41 +02:00
Max Kellermann
c93fc161dc
Merge branch 'next_prev_fix' of https://github.com/DDRBoxman/MPD
2024-01-18 09:58:39 +01:00
Colin Edwards
0075c57bd4
android: Check playlist state before changing track
...
Playlist will throw an exception if we call next or previous track when it is not in the "playing" state
2024-01-13 23:23:29 -06:00
Colin Edwards
87873c9a73
android: Support play / pause from media session
2024-01-13 23:15:56 -06:00
Max Kellermann
e4cc89b2d9
Merge branch 'jg' of https://github.com/neheb/MPD
2024-01-13 22:38:34 +01:00
Max Kellermann
6f6cbeba80
net/SocketDescriptor: add Send()/Receive() overloads with iovec
2024-01-13 22:32:35 +01:00
Max Kellermann
974ed0166c
net/SocketDescriptor: add sendmsg(), recvmsg() wrappers
2024-01-13 22:31:58 +01:00
Max Kellermann
a91920a8ff
net/SocketDescriptor: pass span<byte> to Read()/Write()
2024-01-13 22:31:34 +01:00
Max Kellermann
7cd38dde09
net/SocketDescriptor: add [[nodiscard]]
2024-01-13 22:31:24 +01:00
Max Kellermann
b63a794fbe
io/FileDescriptor: add [[nodiscard]]
2024-01-13 22:31:16 +01:00
Max Kellermann
3e862b85d4
Merge branch 'mediasession' of https://github.com/DDRBoxman/MPD
2024-01-13 22:27:00 +01:00
Max Kellermann
d3335f9947
db/simple: make more fields `const`
2024-01-08 13:55:15 +01:00
Max Kellermann
1a67062e1e
db/simple: reorder fields to reduce padding
2024-01-08 13:54:15 +01:00
Max Kellermann
fec1a4ac32
db/simple: pass hide_playlist_targets to sub-instance
2024-01-08 13:53:59 +01:00
Max Kellermann
7f439b01a3
net/SocketAddress: move code to IsInet()
2024-01-08 13:48:13 +01:00
Max Kellermann
0fd6f83766
net/StaticSocketAddress: add `constexpr`
2024-01-08 13:48:05 +01:00
Max Kellermann
b15b2125e2
net/AddressInfo: add methods IsInet(), IsTCP()
2024-01-08 13:47:59 +01:00
Colin Edwards
e086f09d48
android: add next and previous track to the jni bridge
...
This will allow the android client to directly make calls to the mpd process to change tracks
I went with camel case on the function names here, if you use an underscore
javac generates a function tht looks like this:
JNIEXPORT void JNICALL Java_org_musicpd_Bridge_play_1previous
I figured what we ended up with looks a little nicer:
JNIEXPORT void JNICALL Java_org_musicpd_Bridge_playPrevious
2024-01-05 18:21:46 -06:00
Rosen Penev
e8163124e3
mpg123: fix compilation under Windows
...
Signed-off-by: Rosen Penev <rosenp@gmail.com>
2024-01-04 14:22:25 -08:00
Rosen Penev
0651be8366
fluidsynth: fix compilation on Windows
...
NarrowPath is needed.
Signed-off-by: Rosen Penev <rosenp@gmail.com>
2024-01-04 14:22:25 -08:00
Rosen Penev
4957035be6
mikmod: fix compilation on Windows
...
NarrowPath is needed.
Signed-off-by: Rosen Penev <rosenp@gmail.com>
2024-01-04 14:22:25 -08:00
Rosen Penev
bcd55c0b75
sidplay: fix compilation under Windows
...
NarrowPath is needed.
Signed-off-by: Rosen Penev <rosenp@gmail.com>
2024-01-04 14:22:25 -08:00
Rosen Penev
914ee92015
wavpack: fix compilation on Windows
...
NarrowPath is needed.
Signed-off-by: Rosen Penev <rosenp@gmail.com>
2024-01-04 14:22:25 -08:00
Max Kellermann
c04490bd52
storage/curl: eliminate std::strings, parse string_view directly
2024-01-04 21:11:07 +01:00
Max Kellermann
b601f4dc15
util/CNumberParser: remove unused function ParseInt64()
2024-01-04 21:07:50 +01:00
Max Kellermann
4086190c80
decoder/OpusTags: use ParseInteger()
2024-01-04 21:06:38 +01:00
Max Kellermann
e1eea9d98a
util/NumberParser: new library based on std::from_chars()
2024-01-04 21:03:37 +01:00
Max Kellermann
393d57b387
util/NumberParser: rename to CNumberParser
...
A new NumberParser library based on std::from_chars() will be added.
2024-01-04 21:02:45 +01:00
Max Kellermann
b283fe07af
lib/expat/ExpatParser: pass std::string_view to CharacterData()
2024-01-04 20:55:14 +01:00
Max Kellermann
feeb21577f
lib/upnp/Device: use std::forward_list instead of std::vector
2024-01-04 20:51:20 +01:00
Max Kellermann
1fca16737d
lib/upnp/Device: remove unnecessary ctors/dtors
2024-01-04 20:49:27 +01:00
Max Kellermann
4ec85a12e3
lib/upnp/Discovery: use std::map instead of std::list
2024-01-04 20:45:24 +01:00
Max Kellermann
3d2aebccad
lib/upnp/Discovery: pass std::string_view to LockRemove()
2024-01-04 20:40:47 +01:00
Max Kellermann
22382f799c
lib/upnp/Discovery: add `noexcept`
2024-01-04 20:39:21 +01:00
Max Kellermann
468eceabff
lib/upnp/Discovery: remove unreachable exception handler
2024-01-04 18:04:46 +01:00
Max Kellermann
08e0eb79f5
lib/upnp/Discovery: remove unused default ctor
2024-01-04 18:04:21 +01:00
Max Kellermann
8b03ce562c
input/curl: increase CURLOPT_BUFFERSIZE from 16 kB to 512 kB
2024-01-04 17:57:42 +01:00
Max Kellermann
997311ba14
lib/curl/Easy: add method TrySetOption()
2024-01-04 17:51:48 +01:00
Max Kellermann
cbd031ca7f
lib/upnp/Action: common UpnpSendAction() wrapper for pupnp and npupnp
...
Merge a lot of duplicate code.
2024-01-04 17:40:59 +01:00
Max Kellermann
95842e7984
db/upnp: eliminate the std::forward_list, use IterableSplitString()
2024-01-04 16:31:28 +01:00
Max Kellermann
cc41e95806
db/upnp: add `rootid_sv`
2024-01-04 16:20:44 +01:00
Max Kellermann
2c77e088b4
db/upnp: eliminate temporary std::string from Visit()
2024-01-04 16:19:03 +01:00
Max Kellermann
c8e2ab6781
db/upnp/Object: smaller enums
2024-01-04 14:31:41 +01:00
Max Kellermann
b2ed29b8c0
lib/upnp/ContentDirectoryService: getFriendlyName() returns std::string reference
...
This can avoid the overhead of casting a C string back to std::string_view.
2024-01-04 14:28:12 +01:00
Max Kellermann
1789b56a85
db/upnp: pass std::string_view to songPath()
2024-01-04 14:28:12 +01:00
Max Kellermann
714dbc9294
lib/upnp/Discovery: forward-declare inner class ContentDirectoryDescriptor
2024-01-04 14:28:12 +01:00
Max Kellermann
f40eb963fd
lib/upnp/Discovery: forward-declare inner class Downloader
2024-01-04 14:28:12 +01:00
Max Kellermann
ee4b49d12f
lib/expat/ExpatParser: pass std::string_view to Parse()
2024-01-04 14:28:12 +01:00
Max Kellermann
4c9942534c
lib/upnp/Device: pass url as std::string_view to Parse()
2024-01-04 14:28:12 +01:00
Max Kellermann
d5f7db59a8
lib/upnp/Util: pass std::string_view to path_getfather()
2024-01-04 14:28:12 +01:00
Max Kellermann
8d1b73ae89
lib/upnp/Discovery: use string_view::starts_with() instead of strncmp()
2024-01-04 14:28:08 +01:00
Rosen Penev
f68fab53a7
zzip: fix compilation on Windows
...
NarrowPath is needed.
Signed-off-by: Rosen Penev <rosenp@gmail.com>
2024-01-04 12:38:36 +01:00
Rosen Penev
6a4dc281d1
bzip2: fix compilation on Windows
...
NarrowPath is needed.
Signed-off-by: Rosen Penev <rosenp@gmail.com>
2024-01-04 12:38:30 +01:00
Rosen Penev
a859de6806
sndfile: fix compilation with clang's libc++
...
error: non-constant-expression cannot be narrowed from type 'sf_count_t'
(aka 'long long') to 'size_type' (aka 'unsigned int') in initializer list
[-Wc++11-narrowing]
215 | std::span{buffer, num_frames * frame_size},
| ^~~~~~~~~~~~~~~~~~~~~~~
note: insert an explicit cast to silence this issue
215 | std::span{buffer, num_frames * frame_size},
| ^~~~~~~~~~~~~~~~~~~~~~~
| static_cast<size_type>()
Signed-off-by: Rosen Penev <rosenp@gmail.com>
2024-01-03 12:18:52 -08:00
Rosen Penev
f6dbf38e99
upnp: change interface variable name
...
rpc.h under Windows defines interface as struct, which blows up the
build here. Rename to avoid.
Signed-off-by: Rosen Penev <rosenp@gmail.com>
2023-12-28 19:39:05 -08:00
Max Kellermann
d0a4270449
lib/upnp/Compat: remove obsolete kludges
...
Those bugs have been fixed looong ago.
2023-12-28 21:24:58 +01:00
Max Kellermann
b9a7a9981e
lib/upnp/ContentDirectoryService: remove unused fields
2023-12-28 21:22:41 +01:00
Max Kellermann
d9fb152b95
lib/upnp/ContentDirectoryService: include some headers only with libpupnp
2023-12-28 21:18:41 +01:00
Max Kellermann
9396ffb509
db/plugins/upnp/ContentDirectoryService: add missing closing curly brace
2023-12-28 20:52:53 +01:00
Rosen Penev
e7e07c39c5
meson: fix flac_dep under Windows
...
declare_dependency's found() method evaluates to true always, resulting
in MPD trying to build flac when not found. Check for dependency()'s
find() first.
Signed-off-by: Rosen Penev <rosenp@gmail.com>
2023-12-27 12:43:08 -08:00
Rosen Penev
44080154b0
no setenv on Windows
...
Signed-off-by: Rosen Penev <rosenp@gmail.com>
2023-12-27 10:50:00 -08:00
Rosen Penev
7c520f6475
fs: fix typo
...
Wrong macro used.
Signed-off-by: Rosen Penev <rosenp@gmail.com>
2023-12-26 10:57:44 -08:00
Max Kellermann
23b4688c44
util/ByteOrder: move Packed* classes to separate headers
2023-12-22 18:20:46 +01:00
Max Kellermann
a888b3a707
decoder/plugins/meson.build: add missing dependency to libid3tag
2023-12-22 18:03:47 +01:00
borine
b1f28d6003
output/alsa: Fix (theoretical error in) ALSA device recovery
...
It is not possible to prepare an ALSA device when it is is state
SND_PCM_STATE_OPEN; it is necessary to set the hardware parameters
first.
This pedantic commit corrects that error. Note that in practice
this code path cannot be encountered because MPD always sets the
hardware parameters before attempting to start playback.
2023-12-22 12:02:33 +00:00
borine
50e6950fa8
output/alsa: handle recoverable errors in DrainInternal()
...
It is possible that an underrun may occur in the ALSA output
device while MPD is draining its own internal buffer. If this
happens then MPD stops playback, reporting the error EPIPE.
This commit attempts to recover the ALSA device instead of
stopping playback, so that the drain can complete and the next
song in the play queue is played.
2023-12-22 11:53:20 +00:00
Max Kellermann
3c5b864396
tag/IcyMetadataParser: use std::span
2023-12-21 08:42:23 +01:00
Max Kellermann
58fc857a2d
tag/IcyMetadataParser: pass std::string_view to icy_parse_tag()
2023-12-20 20:18:39 +01:00
Max Kellermann
e443ee357a
tag/IcyMetadataParser: do not null-terminate strings in icy_parse_tag()
...
Just pass std::string_views into the unmodified buffer to
icy_parse_tag_item().
2023-12-20 19:58:35 +01:00
Max Kellermann
2618294eb7
tag/IcyMetadataParser: pass std::string_view to icy_parse_tag_item()
2023-12-20 19:51:22 +01:00
Max Kellermann
03352cb4ad
tag/IcyMetadataParser: use std::byte in ParseInPlace()
2023-12-20 19:49:08 +01:00
Max Kellermann
303d981099
subprojects: add lame
2023-12-20 16:50:13 +01:00
Max Kellermann
7727630f24
Merge branch 'alsa_input_exception' of https://github.com/borine/MPD
2023-12-20 13:21:37 +01:00
Colin Edwards
16c91a3f4b
android: Fix MPD shutdown from settings UI
2023-12-19 22:05:03 -06:00
Max Kellermann
dfef30a737
subprojects: add curl
2023-12-11 10:53:43 +01:00
Max Kellermann
642de1510b
lib/curl/Request: remove redundant CurlEasy wrapper methods
2023-12-09 20:54:21 +01:00
borine
f61eed1a82
input/plugins/Alsa: catch all exceptions
...
snd_pcm_poll_descriptors_revents() may return any error code; the
ALSA docs do not constrain the permitted values. A 'hw' device
will only ever return an error if the pfd array passed in is
invalid (-EINVAL), but other I/O plugins may return arbitary
errors. For example a network-based device may return -EPIPE etc.
The resulting exception thrown by
AlsaNonBlockPcm::DispatchSockets() must be caught to prevent the
mpd process from being aborted.
2023-11-26 15:36:42 +00:00
Max Kellermann
e9c40dead8
output/SharedPipeConsumer: add `noexcept`
2023-11-26 08:48:45 +01:00
Max Kellermann
31bf6d29b9
BulkEdit: forbid copying
2023-11-26 08:47:06 +01:00
Max Kellermann
571b6f0cdb
queue/IdTable: add `constexpr` (because we can)
2023-11-26 08:43:50 +01:00
Max Kellermann
e7b9e8de14
queue/IdTable: add API docs
2023-11-26 08:43:20 +01:00
Max Kellermann
321553d5f9
queue/IdTable: add `explicit`
2023-11-26 08:41:57 +01:00
Max Kellermann
4d23068c5c
queue/IdTable: use C++11 initializer
2023-11-26 08:41:19 +01:00
Max Kellermann
634b38169a
Merge branch 'alsa_input_buffer' of https://github.com/borine/MPD
2023-11-26 08:24:51 +01:00
Max Kellermann
fe4695f92a
Merge branch 'added_time_proxy_plugin' of https://github.com/jcorporation/MPD
2023-11-26 08:20:18 +01:00
Max Kellermann
3c7941b24b
Instance: work around -Wunused-parameter
2023-11-26 08:13:57 +01:00
Max Kellermann
a5d7f5e1fa
client/Client: add interface IClient
...
This allows detangling dependencies and fixes a linker problem in
test/test_translate_song.cxx.
2023-11-26 08:11:06 +01:00
Max Kellermann
0dfd7e3d8c
net/SocketDescriptor: SO_PROTOCOL is really Linux-specific
2023-11-25 23:03:30 +01:00
Max Kellermann
f757dfdc4f
SongLoader: add `noexcept`
2023-11-25 22:57:24 +01:00
Max Kellermann
eb675ad1b1
pcm/meson.build: add missing dependency on libconfig.a
2023-11-25 22:51:43 +01:00
Max Kellermann
08a5768764
fs/io/TextFile: split into class FileLineReader and AutoGunzipFileLineReader
...
Detangle dependencies.
2023-11-25 22:50:32 +01:00
Max Kellermann
d888bb1902
io/meson.build: move libfmt dependency to libio.a
2023-11-25 22:16:47 +01:00
Max Kellermann
6dc708f53f
net/SocketDescriptor: use method GetOption() internally
2023-11-25 21:58:17 +01:00
Max Kellermann
60033f3eb4
net/SocketDescriptor: add method GetProtocol()
2023-11-25 21:58:09 +01:00
Max Kellermann
1239e075b8
net/SocketDescriptor: add method GetIntOption()
2023-11-25 21:56:07 +01:00
Max Kellermann
d0eea87b1a
song/*SongFilter: use libfmt
2023-11-25 20:42:50 +01:00
Max Kellermann
273fc329e0
Merge branch 'added-since' of https://github.com/jcorporation/MPD
2023-11-25 20:36:38 +01:00
Max Kellermann
b9daeef524
event/FineTimerEvent: add SetDue(), ScheduleCurrent()
2023-11-21 20:47:29 +01:00
Max Kellermann
9383ceac30
event/{Coarse,Fine}TimerEvent: add API docs
2023-11-21 20:47:25 +01:00
Max Kellermann
ebf1fc7ca4
util/IntrusiveList: convert static_assert to concept check
2023-11-21 20:42:01 +01:00
Max Kellermann
73708e7be7
event/TimerEvent: remove transitional header
2023-11-21 20:41:55 +01:00
Max Kellermann
0c409aa290
input/LastInputStream: use CoarseTimerEvent
2023-11-21 20:41:47 +01:00
Max Kellermann
edfa329e64
util/DereferenceIterator: use *declval() to guess the default value type
...
This allows the iterator to point to another iterator.
2023-11-21 20:40:47 +01:00
Max Kellermann
5ab2c31500
Merge branch 'v0.23.x'
2023-11-21 20:37:46 +01:00
skidoo23
50c1e3738a
decoder/ffmpeg: Fix build error with ffmpeg 6.1
...
Closes https://github.com/MusicPlayerDaemon/MPD/issues/1898
2023-11-21 20:36:37 +01:00
jcorporation
1615fbc30e
Add "added-since" filter expression
2023-11-04 17:25:24 +01:00
jcorporation
45a4fcab1e
Add support for added attribute to proxy plugin
2023-11-02 21:22:48 +01:00
Max Kellermann
68b19ae087
util/SpanCast: add ReferenceAsWritableBytes()
2023-11-02 10:50:24 +01:00
Max Kellermann
a073db1e52
util/SpanCast: add ReferenceAsBytes()
2023-11-02 10:50:00 +01:00
Max Kellermann
10940da381
util/Intrusive{List,HashSet}: add "tag" for base hooks
2023-11-02 10:48:46 +01:00
Max Kellermann
57d9cffc42
event/PipeEvent: expose the EventPollBackendEvents constants
2023-11-02 10:48:21 +01:00
Max Kellermann
ac25f3456a
Merge branch 'added_time' of https://github.com/jcorporation/MPD
2023-11-02 10:42:31 +01:00
jcorporation
f4f79a3d5f
New command "stickernames" lists uniq and sorted sticker names
2023-10-21 18:21:03 +02:00
jcorporation
7bf43a9712
Add "added" timestamp to song database
...
- added is set to current time, if a new song is added to the database.
- GetAdded falls back to mtime.
Code for proxy plugin is missing, this needs a patch for libmpdclient.
closes #378
2023-10-20 17:29:31 +02:00
Max Kellermann
2b10cf3c15
pcm/Normalizer: change license identifier to LGPL-2.1-only
...
"LGPL-2.1" doesn't exist, and the old copyright header did not specify
the "or later" clause, so I must assume it's 2.1 only.
2023-10-15 11:37:21 +02:00
gd
432675d4c2
Stickers: added support for stickers on playlists and some tag types
2023-10-15 11:25:16 +02:00
Max Kellermann
70ac638d93
tag/Mask: make everything `constexpr`
2023-10-15 11:03:56 +02:00
Max Kellermann
ccbacb369b
io/linux/ProcPath: new library
2023-10-15 10:55:32 +02:00
Max Kellermann
7c0b561a16
event/InotifyEvent: add method TryAddWatch()
2023-10-15 10:51:06 +02:00
Max Kellermann
db5f270f42
util/AllocatedString: fix string_view specialization in TotalSize()
2023-10-09 14:54:40 +02:00
Max Kellermann
f49d4ef4ad
tag/Mask: switch to 64 bit because have we 34 tags now and 32 bits are not enough
2023-10-08 10:02:50 +02:00
Max Kellermann
2859845567
Merge branch 'v0.23.x'
2023-10-08 10:02:19 +02:00
Max Kellermann
f3c37e484e
tag/Mask: add static_assert on the size of the mask
2023-10-08 10:01:00 +02:00
Max Kellermann
e521b58b01
io/PeekReader: fix offset/size mixup
...
Regression by commit 7ccc4ddf0d
2023-10-08 09:55:59 +02:00
Max Kellermann
34182990ef
fs/FileInfo: add fstat() wrapper
2023-10-07 12:49:07 +02:00
Max Kellermann
1ca5d6baa6
io/FileReader: do not copy the path
2023-10-07 12:48:03 +02:00
Max Kellermann
9365f68454
io/FileReader: use GetFileInfoByHandle()
2023-10-07 12:47:57 +02:00
Max Kellermann
7b5f107341
fs/FileInfo: add GetFileInformationByHandleEx() wrapper
2023-10-07 12:37:49 +02:00
Max Kellermann
e9ec03f769
PlaylistFile: use uint_least64_t
2023-10-07 12:29:14 +02:00
Max Kellermann
579a6ee299
fs/FileInfo: un-inline the constructor to reduce header dependencies
2023-10-07 12:28:31 +02:00
Max Kellermann
7d31659137
PlaylistFile: add missing include
2023-10-07 12:28:31 +02:00
Max Kellermann
f549c611ab
fs/FileInfo: make constructor `explicit`
2023-10-07 12:24:05 +02:00
Max Kellermann
51c0a03e94
fs/FileInfo: add `constexpr` and `noexcept`
2023-10-07 12:22:54 +02:00
Max Kellermann
19c73680cf
io/FileReader: use uint_least64_t
2023-10-07 08:49:04 +02:00
Max Kellermann
a9ba9a5f92
io/Reader: add [[nodiscard]]
2023-10-07 08:45:59 +02:00
Max Kellermann
3032792563
io/Reader: add method ReadFull()
2023-10-07 08:45:52 +02:00
Max Kellermann
7ccc4ddf0d
io/Reader: use std::span
2023-10-07 08:44:42 +02:00
Max Kellermann
b9704715fb
io/FileOutputStream: pass dfd=-1 for absolute /proc/self/fd/N path
2023-10-07 08:42:35 +02:00
Max Kellermann
86e7dff2fc
util/TextFile: add missing cast
2023-10-07 08:39:24 +02:00
Max Kellermann
c450f644e6
lib/xiph/OggSyncState: fix indent
2023-10-07 08:30:12 +02:00
Max Kellermann
496184b1bc
io/Reader: add method ReadT()
2023-10-07 08:27:13 +02:00
Max Kellermann
b81cac3305
lib/nfs/Error: include cleanup
2023-10-04 23:12:45 +02:00
Max Kellermann
bf9dd24536
lib/pcre/UniqueRegex: wrap Compile() options in struct
2023-10-04 17:32:12 +02:00
Max Kellermann
e5680c712b
util/IntrusiveList: add reverse_iterator
2023-10-04 16:51:17 +02:00
Max Kellermann
44daa6d3e6
util/IntrusiveForwardList: reset last_cache properly in clear()
2023-10-04 16:50:46 +02:00
Max Kellermann
5aaa3f50aa
util/BindMethod: move SignatureHelper to return type
2023-10-04 16:50:25 +02:00
Max Kellermann
7d26cd74c1
util/BindMethod: add `noexcept`
2023-10-04 16:50:25 +02:00
Max Kellermann
7e6941acc8
util/BindMethod: add `constexpr`
2023-10-04 16:50:25 +02:00
Max Kellermann
63d865666e
util/StringBuffer: use `using` instead of `typedef`
2023-10-04 16:50:25 +02:00
Max Kellermann
5dda4084df
util/BindMethod: use `using` instead of `typedef`
2023-10-04 16:50:25 +02:00
Max Kellermann
19f9238ef0
util/BindMethod: fix indent
2023-10-04 16:50:25 +02:00
Max Kellermann
491cc8f54d
net/SocketDescriptor: add {Read,Write}NoWait()
...
It was surprising that Read() was non-blocking, but there was no
blocking version of it. Let's make the non-blocking behavior explicit
and change Read() to be blocking.
In order to find existing callers easily with compiler errors, this
also refactors Read()/Write() to take a std::span parameter.
2023-09-27 11:39:55 +02:00
Max Kellermann
cad35a83fb
io/FileDescriptor: add Read()/Write() overloads with std::span
2023-09-27 11:14:23 +02:00
Max Kellermann
5fbe5951ab
output/snapcast/Client: use SocketDescriptor::Send()
2023-09-27 10:39:48 +02:00
Max Kellermann
21590e60e6
event/FullyBufferedSocket: pass std::span to DirectWrite()
2023-09-27 10:36:56 +02:00
Max Kellermann
fe69ad0861
event/BufferedSocket: pass std::span to DirectRead()
2023-09-27 10:34:50 +02:00
Max Kellermann
9daf8f6de5
event/BufferedSocket: use std::byte
2023-09-27 10:30:09 +02:00
Max Kellermann
8ca6606323
net/SocketDescriptor: move code to Receive(), Send()
2023-09-27 10:16:21 +02:00
Max Kellermann
09a2da89a2
io/FileDescriptor: pass std::span to Full{Read,Write}()
2023-09-27 10:14:02 +02:00
Max Kellermann
9a0b3775d8
encoder/ToOutputStream: add API docs
2023-09-26 15:48:55 +02:00
Max Kellermann
2075a9a999
encoder/ToOutputStream: remove unnecessary cast
2023-09-26 15:48:22 +02:00
Max Kellermann
1090cc964a
event/Loop: relicense to BSD-2
...
This library has been initially developed at CM4all and eventually
published here:
https://github.com/CM4all/libcommon/tree/master/src/event/
On this copy of it, there were only minor modifications by people
other than me, and these are below the copyright threshold; only
non-epoll backends (which remain under the GPL) were developed by
somebody else.
2023-09-26 15:47:09 +02:00
Max Kellermann
101e12cf9a
modplug: add patch to remove the deprecated `register` keyword
2023-09-26 11:48:44 +02:00
Max Kellermann
26467e61a3
Merge branch 'consume_single_oneshot-restore' of https://github.com/jcorporation/MPD
2023-09-26 11:43:27 +02:00
Max Kellermann
fbdd2324a5
sticker/Database: add method Reopen()
2023-09-26 10:14:05 +02:00
Max Kellermann
dc31aa6a61
decoder/Plugin: remove unused and broken wrapper method ContainerScan()
2023-09-26 10:13:42 +02:00
Max Kellermann
5b28a987e5
util/IntrusiveForwardList: add method remove_and_dispose_if()
2023-09-22 11:32:40 +02:00
Max Kellermann
78d28063c4
util/IntrusiveForwardList: push_{front,back}() returns iterator
2023-09-22 11:32:33 +02:00
Max Kellermann
64647edbe1
lib/fmt/SocketAddressFormatter: new library
2023-09-19 11:22:39 +02:00
Max Kellermann
b36f5f1ec4
net/ToString: use #pragma once
2023-09-18 22:01:40 +02:00
Max Kellermann
592649d3f2
net/ToString: check family==AF_INET6 instead of looking for colons
2023-09-18 21:59:27 +02:00
Max Kellermann
9398599816
net/ToString: use libfmt
2023-09-18 21:58:55 +02:00
Max Kellermann
61c29473d3
net/ToString: append port only if it is non-zero
2023-09-18 11:11:00 +02:00
Max Kellermann
5fd2fc77f3
net/ToString: add null check
2023-09-18 11:08:16 +02:00
Max Kellermann
3eb0681e3d
net/ToString: use SocketAddress::GetLocalRaw()
2023-09-18 10:54:52 +02:00
Max Kellermann
e831af35fd
input/curl: move code to CreateEasy()
2023-09-17 14:26:47 +02:00
Max Kellermann
fb2e0f734e
lib/fmt/ToBuffer: add overload with StringBuffer parameter
2023-09-16 23:05:48 +02:00
Max Kellermann
3d69f43cff
event/Loop: include SocketEvent.hxx only if HAVE_THREADED_EVENT_LOOP
2023-09-16 22:55:04 +02:00
Max Kellermann
41b1931d91
event/Loop: move the poll_backend to the top
...
This is where all sockets are registered, so it should be initialized
first and destructed last.
2023-09-16 22:45:45 +02:00
Max Kellermann
f086444e4a
lib/curl/Easy: add method SetRequestBody(std::string_view)
2023-09-16 22:39:03 +02:00
Max Kellermann
b8210bbc45
lib/avahi/Poll: fix copyright header
2023-09-16 22:39:03 +02:00
Max Kellermann
ce2965b5bc
io/uring/meson.build: disable io_uring on Android
...
On Android, the feature is forbidden by a seccomp filter, see
https://security.googleblog.com/2023/06/learnings-from-kctf-vrps-42-linux.html
2023-09-16 22:39:03 +02:00
Max Kellermann
18000ff499
io/uring/Handler: remove unused header
2023-09-16 22:39:03 +02:00
Max Kellermann
6f7dce6dca
test/util/TestIntrusiveForwardList: implement size() only if `options.constant_time_size` is set
2023-09-16 22:39:03 +02:00
Max Kellermann
175524ad02
util/IntrusiveForwardList: make end() non-static
...
So we can have a `const` overload which is important for some
algorithm templates.
2023-09-16 22:39:03 +02:00
Max Kellermann
bfbde72676
util/Intrusive*: insertion methods return an iterator
2023-09-16 22:39:03 +02:00
Max Kellermann
f76583a08a
util/IntrusiveList: document the erase() return value
2023-09-16 22:39:03 +02:00
Max Kellermann
6d39b401b5
util/IntrusiveForwardList: add method iterator_to()
2023-09-16 22:39:03 +02:00
Max Kellermann
f448bfd3f3
util/IntrusiveForwardList: add option `cache_last`
2023-09-16 22:39:03 +02:00
Max Kellermann
64b0587e78
util/OptionalField: new library
2023-09-16 22:39:03 +02:00
Max Kellermann
9fe813e572
util/IntrusiveForwardList: add pop_front_and_dispose()
2023-09-16 22:39:03 +02:00
Max Kellermann
b0da0bbf8b
util/IntrusiveForwardList: pop_front() returns reference
2023-09-16 22:39:03 +02:00
Max Kellermann
5c44082b77
util/IntrusiveForwardList: add non-static insert_after() implementation
2023-09-16 22:39:03 +02:00
Max Kellermann
df7ed27b78
util/IntrusiveForwardList: fix move operator, really swap counter
2023-09-16 22:39:03 +02:00
Max Kellermann
bef7ce37d9
RemoteTagCache: use the pop_front() return value
2023-09-16 22:39:03 +02:00
Max Kellermann
c994fe4879
io/uring/meson.build: detect liburing with include_type=system
...
This avoids breakages due to `-Wgnu-anonymous-struct`.
2023-09-12 10:20:58 +02:00
Max Kellermann
50f0163f5f
time/SystemClock: pass by value
2023-09-12 09:56:06 +02:00
Max Kellermann
481c1b6f2e
lib/dbus/ReadIter: add method GetBool()
2023-09-12 09:53:58 +02:00
Max Kellermann
474b6610fa
lib/dbus/Error: add method GetName()
2023-09-12 09:53:15 +02:00
Max Kellermann
11c49da871
io/FileReader: remove unused method Close()
...
It's enough to have the destructor.
2023-09-12 09:53:06 +02:00
Max Kellermann
678828b56f
io/FileOutputStream: remove obsolete `maybe_unused`
2023-09-12 09:43:14 +02:00
Max Kellermann
9e802ad721
util/StringCompare: add `pure` attribute
2023-09-12 09:34:52 +02:00
Max Kellermann
859ffddea3
io/BufferedReader: fix ReadFullT() after std::span migration
2023-09-12 09:32:20 +02:00
Max Kellermann
daf935d310
util/HexFormat: add non-const overload
2023-09-12 09:11:38 +02:00
Max Kellermann
99765cc704
modplug: add patch to remove the deprecated `register` keyword
2023-09-11 22:17:45 +02:00
Max Kellermann
f68305bf00
util/NumberParser: remove obsolete __ANDROID_API__ check
2023-09-11 22:12:13 +02:00
Max Kellermann
517c234461
lib/zlib/GzipOutputStream: use MAX_WBITS
2023-09-11 22:02:04 +02:00
Max Kellermann
a58275591d
util/StaticVector: add methods erase(), pop_front()
2023-09-11 21:59:28 +02:00
Max Kellermann
a2f4fb9ddb
util/StaticVector: add method pop_back()
2023-09-11 21:59:21 +02:00
Max Kellermann
b2acf02af9
util/StaticVector: push_back(), emplace_back() return reference
...
Imitating std::vector since C++17.
2023-09-11 21:59:12 +02:00
Max Kellermann
d5b1ca1a52
util/StaticVector: use emplace_back() to implement push_back()
...
For this class, both are equal.
2023-09-11 21:58:56 +02:00
Max Kellermann
339b9f6e7b
net/StaticSocketAddress: add method GetSteadyPart()
2023-09-11 21:27:12 +02:00
Max Kellermann
35cfa6efa3
net/StaticSocketAddress: add SocketAddress cast constructor
2023-09-11 21:27:12 +02:00
Max Kellermann
34ec024bf4
net/AllocatedSocketAddress: add method GetSteadyPart()
2023-09-11 21:27:12 +02:00
Max Kellermann
75aa08ed6b
tag/Pool: use a power-of-2 hash table size
...
This is simpler to calculate and the advantage of using a prime is
negligible anyway.
2023-09-11 21:23:11 +02:00
Max Kellermann
c8dc1e0665
tag/Pool: use class IntrusiveHashSet intead of rolling a custom hash table
2023-09-11 21:15:28 +02:00
Max Kellermann
847ae7dd7c
util/IntrusiveHashSet: add insert_check_if()
2023-09-11 21:15:28 +02:00
Max Kellermann
44f55e1866
util/IntrusiveList: add missing initializer to insert_after()
...
We must not call std::next() if the list head was not yet initialized.
This was missing in commit 7065425927
2023-09-11 21:15:28 +02:00
Max Kellermann
c391adad10
tag/Pool: move code from calc_hash() to util/djb_hash.cxx
2023-09-11 20:53:37 +02:00
Max Kellermann
f578b06d83
tag/Pool: move calc_hash() returns std::size_t
2023-09-11 20:51:44 +02:00
Max Kellermann
0748f75d9b
tag/Pool: rename `TagPoolSlot` to `TagPoolItem`
2023-09-11 20:44:55 +02:00
Max Kellermann
7dff29bcd1
util/IntrusiveHashSet: add option `zero_initialized`
2023-09-11 20:34:17 +02:00
Max Kellermann
3e09f95b40
tag/Pool: enable option `zero_initialized`
...
Commit 44beae519d
caused the MPD
executable to grow by more than 1 MB because the `slots` array
suddenly was not zero-initialized anymore, because the doubly-linked
list is circular, while the singly-linked list is zero-terminated.
This option moves the array back to the `bss` section.
2023-09-11 20:32:26 +02:00
Max Kellermann
7065425927
util/IntrusiveList: add option `zero_initialized`
2023-09-11 20:30:38 +02:00
Max Kellermann
f01793ad4a
util/Intrusive*: move `constant_time_size` to an options struct
...
This makes it easier to add more options later.
2023-09-11 19:18:36 +02:00
Max Kellermann
1f495efb46
test/LoadDatabase: ignore tag/charset mismatches
...
This program shouldn't fail just because the configuration doesn't
match - it has no configuration, it's just a dumb test program.
2023-09-07 09:54:03 +02:00
Max Kellermann
2c01e79b47
SongSave: omit FixTagString() for strings from the database file
...
Strings in the database should have been sanitized already, so let's
not waste CPU on this.
2023-09-06 16:12:20 +02:00
Max Kellermann
a573d57de8
tag/Builder: remove unnecessary explicit AddItem() overload
2023-09-06 16:10:31 +02:00
Max Kellermann
2f4e2935a3
db/upnp, playlist/pls: use AddItem(std::string_view)
2023-09-06 16:08:42 +02:00
Max Kellermann
44beae519d
tag/Pool: use doubly-linked list
...
This adds some memory overhead but eliminates the linear search from
tag_pool_put_item().
2023-09-06 16:00:25 +02:00
Max Kellermann
b896711fc6
tag/Pool: fix crash in tag_pool_put_item()
...
Regression by commit 76bdfabcc5
2023-09-06 15:53:17 +02:00
Max Kellermann
76bdfabcc5
tag/Pool: use class IntrusiveForwardList
2023-09-06 15:33:26 +02:00
Max Kellermann
b35e8a588f
util/IntrusiveForwardList: add operator++(int)
2023-09-06 15:31:07 +02:00
Max Kellermann
6c48f5ac63
tag/Pool: use std::array
2023-09-06 15:10:47 +02:00
Max Kellermann
1448f52eac
util/VarSize: convert static_assert to concept check
2023-09-06 15:05:26 +02:00
Max Kellermann
c96e8ab47c
db/simple/DirectorySave: optimize duplicate checks with std::set
...
This reduces the CPU usage for loading a large database by more than 50%.
2023-09-06 14:56:41 +02:00
Max Kellermann
2c4ef4460f
db/update/SpecialDirectory: more std::string_view migration
2023-09-06 14:51:37 +02:00
Max Kellermann
20bbe1b57b
fs/Traits: add GetFilenameSuffix() overload with std::string_view
2023-09-06 14:50:36 +02:00
Max Kellermann
449d59af2f
db/simple/Directory: use operator== to compare strings
2023-09-06 14:30:08 +02:00
Max Kellermann
851136e6fd
db/simple/Directory: GetName() returns std::string_view
2023-09-06 14:29:32 +02:00
Max Kellermann
ad854e9867
db/simple/Save: initialize array without memset()
2023-09-06 14:17:07 +02:00
jcorporation
9a28176d72
Save consume and single oneshot as string
...
Consume and single oneshot should be saved as string.
closes #1853
2023-08-07 23:23:08 +02:00
Max Kellermann
ba2df05fb4
lib/zlib/GzipOutputStream: add `noexcept`
2023-08-03 20:58:43 +02:00
Max Kellermann
8722c51306
lib/dbus/AppendIter: add Append(int32_t), Append(int64_t)
2023-08-03 20:58:01 +02:00
Max Kellermann
80104eb6d5
util/IntrusiveList: fix illegal downcast (ubsan)
...
Fixes UBSanitizer warning:
src/util/IntrusiveList.hxx:108:10: runtime error: downcast of address 0xdeadbeef which does not point to an object of type 'Foo'
2023-08-03 20:56:34 +02:00
Max Kellermann
8743326924
sticker/Database: allow moving
2023-08-03 20:54:57 +02:00
Max Kellermann
83a6cb804b
util/IntrusiveHashSet: add template argument `GetKey`
...
This is a big simplification of all IntrusiveHashSet users: instead of
having to implement multiple overloads of Hash and Equal, the
IntrusiveHashSet class can first extract the effective key from an
item and then pass it to the Hash/Equal functions.
2023-08-03 20:50:21 +02:00
Max Kellermann
9691b609a2
util/IntrusiveHashSet: remove_and_dispose() returns number of removed elements
2023-08-03 20:44:47 +02:00
Max Kellermann
250fa8c732
util/IntrusiveHashSet: rename remove_and_dispose() to remove_and_dispose_key()
2023-08-03 20:44:39 +02:00
Max Kellermann
2cd5f4cd3e
util/IntrusiveHashSet: replace template parameters Hash/Equal with a single one
...
Preparing to add a key extraction function. Without this "Operators"
template parameter, we'd have even more template parameters, and that
parameter list would grow too complex. Better wrap it in one single
template that contains all operators.
This is an API change which all callers need to adjust to, but it will
be worth it.
2023-08-03 20:44:14 +02:00
Max Kellermann
dcd7c6337c
util/Intrusive{List,HashSet}: reimplement hook mode detection with implicit cast
2023-08-03 20:33:15 +02:00
Max Kellermann
43d633f560
Instance: use C++11 initializers
2023-07-23 09:14:25 +02:00
Max Kellermann
1c37b0487c
lib/fmt/SystemError: add VFmtErrno()
2023-07-21 19:44:45 +02:00
Max Kellermann
acc92b156b
util/Concepts: remove obsolete fallbacks
2023-07-21 19:43:04 +02:00
Max Kellermann
aeadae5399
util/IntrusiveHashSet: insert_check() returns the bucket head on success
...
The list head is a stable value that is guaranteed to be still valid
when insert_commit() gets called.
This fixes a linked list corruption bug in class StaticCache which
occurs when the cache item pointed to by the iterator gets evicted
between insert_check() and insert_commit().
2023-07-21 19:42:35 +02:00
Max Kellermann
42d5b05f54
util/IntrusiveHashSet: rename insert() to insert_commit()
...
Clarify that the method is not a freestanding insertion method but
should only be used after insert_check().
2023-07-21 19:42:26 +02:00
Max Kellermann
e133f621a4
util/IntrusiveHashSet: add insert_check() documentation
2023-07-21 19:41:46 +02:00
Max Kellermann
91437d9e63
util/IntrusiveList: add insert_after()
2023-07-21 19:41:40 +02:00
Max Kellermann
f1b497fb0c
util/IntrusiveList: document insert()
2023-07-21 19:41:36 +02:00
Max Kellermann
cc9d061e51
util/IntrusiveList: pop_front() and pop_back() return reference
2023-07-21 19:41:13 +02:00
Max Kellermann
62ee9a4d60
util/DynamicFifoBuffer: use `T` instead of `std::byte`
...
Mistake added by commit b528b467649754
2023-07-21 19:40:38 +02:00
jcorporation
082f72dd20
Add support of TAG_MUSICBRAINZ_RELEASEGROUPID
...
Closes #1767
2023-07-12 19:43:37 +02:00
Max Kellermann
9c19368fc7
Merge branch 'v0.23.x'
2023-06-02 14:36:02 +02:00
Shen-Ta Hsieh
38f1237d49
output/wasapi: cast to `const char *` for fmt 10 compatible
2023-06-02 14:29:43 +02:00
Shen-Ta Hsieh
fef6b9df80
flac: Try `InputStream` interface if flac failed to read through a `wchar_t` path
2023-06-02 14:28:22 +02:00
Shen-Ta Hsieh
70879f0abc
thread/WindowsFuture: remove wrong address_of operator
2023-06-02 14:27:24 +02:00
Shen-Ta Hsieh
bcb393628e
win32/ComWorker: rename variable name to prevent ambiguous
2023-06-02 14:22:11 +02:00
Max Kellermann
18d3a5c12b
decoder/flac: add `noexcept` and `inline`
2023-06-02 14:22:11 +02:00
Simon Arlott
6ee3d0102b
decoder/mad: Fix decode of LAME peak value
...
6d91b5c7b2
("fix double promotions") changed
how LAME peak values are decoded, producing large incorrect values that
cause some MP3 files to play silently.
Restore the original decode from MAD fixed-point format to double and
document what it's doing.
Fixes #1823
2023-06-02 14:15:48 +02:00
Max Kellermann
45f81cde6d
Merge branch 'null-always-off' of https://github.com/nomis/MPD
2023-05-25 10:42:58 +02:00
John Regan
a482c798ad
pcm: declare IsSilentSample as const
...
GNU libstdc++ declares cmath functions as constexpr, but libc++ does
not. The C++ standards state the standard library functions should not
be declared constexpr unless explicitly required.
2023-05-24 15:05:19 -04:00
Max Kellermann
d9b1f6223e
io/uring/Close: wrapper for io_uring_prep_close()
2023-05-22 21:59:44 +02:00
Max Kellermann
26577d1301
io/uring/Queue: make Submit() virtual, Push() not
...
This allows submitting io_uring calls without an `Operation` instance
(fire & forget). We'll do that for close().
2023-05-22 21:57:18 +02:00
Max Kellermann
6496c1b806
util/ScopeExit: convert the function from base class to member
...
This allows using `final` callables.
2023-05-22 21:20:49 +02:00
Max Kellermann
7bb251dad8
db/update/Walk: use marker to remove deleted items
...
This eliminates all `Storage::GetInfo()` calls from
`UpdateWalk::PurgeDeletedFromDirectory()` and instead uses a "marker"
field to mark items that have been visited; later, all unmarked items
can be deleted.
This eliminates a lot of redundant I/O which is noticable with the
`curl` storage plugin (i.e. WebDAV).
2023-05-22 20:13:01 +02:00
Max Kellermann
9027e5c5bb
release v0.23.13
...
-----BEGIN PGP SIGNATURE-----
iQJBBAABCgArFiEEA5IzWngIOJSkMBxDI26KWMbbRRIFAmRrqn4NHG1heEBibGFy
Zy5kZQAKCRAjbopYxttFErXiD/9QIaeO5d+U7BJK1yGkQgu5vHo4Pm34ewP8LTxs
K2MYxQQ2jZc7PXqi5Z04wmUw8ymq1BVA2D0ytMdl1Ejcbrste7UrP+1TuD8L9JBj
WCE+4otNVYDpx1PB32BN+gxCmJqiFtAQS+eMIz/SXdEXZ9sJvIgYRRkSiSFd0WHM
dT3OeeZ0V8cANbXpgI+RLghRGkVdpZJo4uXh3c0OHog1fjEBWPw6+7tH/mkotM0n
/hQjI5j14wnzZuIpkDR1kuzvGYmxJKG6LkuUqcm1WexNFbxMqDSbAlXeCmzJn7eK
NQvtROOGNjQ84thxRPLlDlYa6vbxoTqdYgZsVHzsQZWejhqw8zsPsF+Ea0A4tkLd
UKDQFTphZMVqx74+1u7IjQyW7x+k02iXWLwH2IheEl+BJhvEB7zEflN9TR81jek4
RrGx7jcTArdpt7okAe2ONkHvTYtIpaK5E2voza8K4TGOMzpkVlOkyvJ+rpn8CDRf
w0faVvmCQdSrgHKfwUUY8Z47a7d+kkKpFLlvvzNoDV8drQXfgIj5t9HOLATSVVux
l2pbgauXFsKyd4IsByXj+m8cBSvmy2C4eLJCsmguiZEvcobdJtzwOr4KuwQDjBsC
8HW0BD0t9S1dSL59vJdMG+CfK/QU5rmAIkxdydD42uo9UmSS78xw1uQgi9oDaPa8
XNCGdQ==
=nOGh
-----END PGP SIGNATURE-----
Merge tag 'v0.23.13'
release v0.23.13
2023-05-22 19:52:08 +02:00
Max Kellermann
d5bf128cee
storage/curl: throw HttpStatusError
2023-05-22 19:29:46 +02:00
Max Kellermann
5cd86e272f
input/curl: disable `CURLOPT_FAILONERROR`
...
Let OnHeaders() check the status.
The status checking code was added by commit 4f021cbced
in 2011,
but in 2008, commit a8e81326d0
enabled `CURLOPT_FAILONERROR`, which
means the status checking code never had any effect.
This allows `LoadExcludeListOrLog()` to hide boring "404 Not Found"
log messages via `IsFileNotFound()`.
2023-05-22 19:03:12 +02:00
Max Kellermann
740cbe9e02
event/Loop: remove failing assert()
...
The `assert(!quit)` can fail if the `EventThread` gets stopped before
it enters `EventLoop::Run()`. There is a similar problem with `alive`,
which gets reset by `EventThread::Stop()`.
If that happens, then `EventLoop::Run()` should return immediately
without handling any events.
2023-05-22 18:14:25 +02:00
Max Kellermann
068cd559e1
db/update/Walk: clear `Song::in_playlist`
...
Without clearing all `in_playlist` flags, the songs will never be
revealed again if they were hidden once by a CUE sheet, not even after
the CUE sheet gets deleted or modified.
Closes https://github.com/MusicPlayerDaemon/MPD/issues/1784
2023-05-22 15:41:58 +02:00
Max Kellermann
dc127f39a7
util/ScopeExit: use std::declval()
...
Fixes GCC 10 error:
error: cannot call member function `Foo` without object
2023-05-22 15:01:25 +02:00
Max Kellermann
7a99a7008c
util/ScopeExit: use std::exchange()
2023-05-22 14:44:45 +02:00
Max Kellermann
70b451db7b
util/ScopeExit: add `noexcept`
2023-05-22 14:44:17 +02:00
Max Kellermann
2ab03a0914
util/ScopeExit: allow the function to throw
...
Fixes crash inside AtScopeExit() in the WASAPI output plugin.
Closes https://github.com/MusicPlayerDaemon/MPD/issues/1759
2023-05-22 14:43:23 +02:00
Max Kellermann
2fa8c7d2db
lib/crypto/meson.build: link with `ffmpeg_util_dep`
...
This adds `MakeFfmpegError()` to the executable and fixes a linker
failure when `libavutil` is available, but `libavformat` and
`libavcodec` are not.
Closes https://github.com/MusicPlayerDaemon/MPD/issues/1786
2023-05-22 14:05:13 +02:00
Max Kellermann
7c759ba8b0
lib/ffmpeg/meson.build: move libavutil helpers into separate library
2023-05-22 14:03:47 +02:00
Max Kellermann
6d9b452fde
lib/ffmpeg/LogError: remove unused library
2023-05-22 13:48:33 +02:00
Max Kellermann
8ba68fdb47
io/OutputStream: use std::span
2023-05-21 21:35:11 +02:00
Max Kellermann
e72d27566c
io/BufferedOutputStream: use std::string_view
2023-05-21 21:31:32 +02:00
Max Kellermann
01c02a1ef8
util/StaticFifoBuffer: add method MoveFrom()
2023-05-21 21:26:20 +02:00
Max Kellermann
e1e37cfe3c
TagPrint, command/File: two more libfmt 10 workarounds
...
libfmt 10 doesn't know how to format a StringView, and doesn't cast to
std::string_view anymore. The StringView class has been removed from
MPD 0.24 completely, and this is a stable-branch-only workaround.
Closes https://github.com/MusicPlayerDaemon/MPD/pull/1814
2023-05-21 21:03:20 +02:00
latex
381934985a
reorder ffmpeg to be lower priority than gme
...
This should prevent ffmpeg from taking priority over the gme plugin.
The ffmpeg plugin is more buggy than gme.
One of the prominent bugs of preferring ffmpeg over gme is that ffmpeg
cannot seek SAP files while gme can. This should prevent that from
happening.
2023-05-21 20:58:53 +02:00
Max Kellermann
a8042885ac
TimePrint: minor fixup for libfmt 10
...
libfmt version 10 has difficulties formatting a `StringBuffer`, and we
need to help it by explicitly invoking the `c_str()` method.
2023-05-21 20:58:19 +02:00
Max Kellermann
a71e68db50
command/player, SongPrint: use AudioFormatFormatter()
...
libfmt version 10 apparently doesn't know how to format a
`StringBuffer`, failing the MPD build. Since we have a formatter
specialization for `AudioFormat`, let's use that - it's better and
easier to use.
Closes https://github.com/MusicPlayerDaemon/MPD/issues/1807
2023-05-21 20:57:59 +02:00
Max Kellermann
1417578b3d
db/update/Archive: validate directory names
...
Fixes assertion failure if the ZIP file contains a path that begins
with a slash.
Closes https://github.com/MusicPlayerDaemon/MPD/issues/1793
2023-05-21 20:57:38 +02:00
Max Kellermann
96befa138c
db/update/Archive: ignore filenames with newline character
2023-05-21 20:56:38 +02:00
Max Kellermann
16a99804de
db/update/Archive: move check to IsAcceptableFilename()
2023-05-21 20:56:32 +02:00
Max Kellermann
75a39ed279
db/update/Archive: remove useless log message
2023-05-21 20:55:59 +02:00
datasone
d4f3dd49b4
db/SimpleDatabasePlugin: store `in_playlist` value of songs into database
...
Fixes hide_playlist_targets not working after server restart
Currently, `hide_playlists_targets` works by skipping songs with
`in_playlist` value set to true in
[`Directory::Walk`](a57bcd0238/src/db/plugins/simple/Directory.cxx (L237)
). But
`in_playlist` is not stored and only updated in
[`UpdateWalk::PurgeDanglingFromPlaylists`](a57bcd0238/src/db/update/Playlist.cxx (L139)
),
which will only be executed while updating DB.
This causes the problem that playlist target songs are correctly
hidden after database update, but will remain visible after mpd server
restarted. This pr solves the problem by storing `in_playlist` value
of songs into the `SimpleDatabase` file.
2023-05-21 20:51:47 +02:00
Max Kellermann
0206a46d39
decoder/gme: require GME 0.6 or later
...
This allows dropping a few compile-time version checks and we can use
pkg-config to detect the library.
2023-05-21 20:50:03 +02:00
Max Kellermann
9475ef2202
fs/Charset: assign fs_charset
...
This got lost 8 years ago in commit 87c88fcb27
D'oh!
2023-05-21 20:50:03 +02:00