Commit Graph

15552 Commits

Author SHA1 Message Date
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