Max Kellermann
64309abc14
Merge branch 'v0.21.x'
2020-01-14 22:04:55 +01:00
Max Kellermann
b11c5f8d30
util/{Const,Writable}Buffer: drop more "_type" suffixes from type names
2020-01-12 14:39:54 +01:00
Max Kellermann
af20a1c994
pulse: obey Pulse's maximum sample rate (fixes DSD128 playback)
...
Closes https://github.com/MusicPlayerDaemon/MPD/issues/708
2020-01-12 07:58:17 +01:00
Max Kellermann
44d7a1d8d2
pcm/Traits: drop "_type" from type names
2020-01-03 16:01:44 +01:00
Max Kellermann
4937d77cb6
util/{Const,Writable}Buffer: drop "_type" from type names
...
Behave like STL.
2020-01-03 15:55:06 +01:00
Max Kellermann
53f8053188
util/StringView: use using
instead of typedef
2020-01-03 15:55:05 +01:00
Max Kellermann
e654c6e005
util/{Const,Writable}Buffer: use std::size_t
2020-01-03 15:55:05 +01:00
Max Kellermann
4b0e288f00
util/{Const,Writable}Buffer: add noexcept
2020-01-03 15:55:05 +01:00
Max Kellermann
71ace2fbac
util/AllocatedString: use std::exchange()
2020-01-03 15:54:51 +01:00
Max Kellermann
fb450d2f41
Merge branch 'fix_cue_in_playlist' of git://github.com/maxmitti/MPD
2020-01-03 15:31:37 +01:00
Max Kellermann
84784badce
Merge branch 'v0.21.x'
2020-01-03 15:31:18 +01:00
Max Kellermann
5990e46de2
lib/xiph/meson.build: exclude VorbisComments.cxx if the Vorbis decoder is disabled
...
Fixes a build failure.
2020-01-02 13:01:38 +01:00
Markus Mittendrein
7dea5db5df
playlist/PlaylistSong: also copy start and end time in merge_song_metadata
...
This is needed to correctly load playlist entries that reference a song in a cuesheet that is treated as a folder.
2020-01-01 22:20:39 +01:00
Jacob Vosmaer
dca0519336
Clang: only use [[fallthrough]] in C++ files
...
It appears that [[fallthrough]] is valid in C++ but not in C. And
in some Clang versions (e.g. Clang 11 on macOS), Clang is pedantic
about this and considers it an error to use [[fallthrough]] in a
.c file such as src/util/format.c.
This changes makes gcc_fallthrough a no-op under Clang in C files.
2019-12-31 13:54:09 +01:00
Max Kellermann
803a48e96d
release v0.21.18
...
-----BEGIN PGP SIGNATURE-----
iQJEBAABCgAuFiEEA5IzWngIOJSkMBxDI26KWMbbRRIFAl4CKwwQHG1heEBtdXNp
Y3BkLm9yZwAKCRAjbopYxttFEp46D/9q1pRkhYzCyZPQGX967UPoV+Bc1YMX4o2U
Uh/HqQrKKRAK9goaxu9yMKBIFCbzj6WEZou+/uMEf6ZwXuRcnJMobrUU4+G9Yu3r
FzlQPW870DyOhk2PWHF8CW3oMt/YH05b6nYNo2ocRnX69/oqL1G7ukbF2Pz3TPc0
0uNQYYERdMawNCEi1OarzziR6DKuiN+MtZRgUQVacAsoUirwWGNJuaGSDtc3MMM7
YhgKVmd9XsgVr7fykArj6PLsm2iyXJP5nDB/tIqmwMpQFyhuLUnGOMfhCq02em+r
47LGvmZiSS/9F2JzPU8EL2yzYdBe4QvU6Ol5SfXbom11MZc3Ty502g2jUXVHjCeo
1FljCPHbarTmKhvUc0xQXA9i6exZ0wwtxL+Zv7ZQKquRPAhq8E07qkQpdaTWa6vn
3RfilLE1B/GCgoT6D1+zABxdJ1HRLT7tzFob2kkCccxguK3j2JjCUIkSgM6IY0yv
a6sMEXbqa+Lh8jggs9ksoT6O+T2HHEr3tEfpFHY+t0NFRfwHd9aX9bNjK+Ji0n51
YBf2FCb2EBrMAWNZmEnq+TuKX0HASDtoAXTviRKqBXtEG5V8MdAt4PPICCb+bkDr
psIuYcGeK3vofvq1SwEC7h7gCvsBK5w17/oE2/jYcZLo12H1IdHe5gMP3OUhjel5
BRi6rLlkYw==
=XXXs
-----END PGP SIGNATURE-----
Merge tag 'v0.21.18'
release v0.21.18
2019-12-24 16:31:06 +01:00
Max Kellermann
d27e534a85
time/ISO8601: fix Windows build failure
...
Caused by 2bc127bb43
2019-12-24 16:12:52 +01:00
Max Kellermann
6d54928d7c
Revert "lib/curl/Global: remove lower bound on timeouts"
...
This reverts commit 4475b8ca04
. Further
testing revealed that the threaded resolver still uses a timeout of
0ms. This revert however lowers the bound to a minimum of 1ms instead
of 10ms.
2019-12-24 16:09:26 +01:00
Max Kellermann
0dffe05bf7
input/curl: remove unnecessary InvalidateSockets() call
...
Like fe598e7d30
2019-12-24 11:41:52 +01:00
Max Kellermann
744bd1eadc
time/ISO8601: refactor ParseTimeOfDay() to parse one by one
...
This prepares the migration away from strptime() for Windows
portability.
But the real reason I'm doing this is that strptime() on Apple is
buggy: strptime("14", "%H%M%S") (without separating colons) succeeds
even though only the hour has been parsed. This fixes recent Travis
failures in the ParseISO8601() unit test.
2019-12-24 10:15:03 +01:00
Max Kellermann
2bc127bb43
time/ISO8601: move code to ParseTimeOfDay()
2019-12-24 10:15:01 +01:00
Max Kellermann
7770298a65
util/Compiler.h: use [[fallthrough]]
on clang
...
Older clang versions don't support the GCC __attribute__ syntax. For
those, don't use anything at all, and new clang versions shall use the
standard syntax.
2019-12-24 08:04:48 +01:00
Max Kellermann
a1afe9afc6
util/Compiler.h: add gcc_fallthrough
...
Works around build failures with ccache which may feed processed code
to GCC, which doesn't have the "fall through" code comments.
2019-12-23 17:53:57 +01:00
Max Kellermann
fe598e7d30
lib/curl/Global: remove InvalidateSockets() call from Remove()
...
curl_multi_remove_handle() calls our socket function, and there's no
need to call curl_multi_socket_action().
2019-12-23 14:52:46 +01:00
Max Kellermann
4475b8ca04
lib/curl/Global: remove lower bound on timeouts
...
This was a problem 9 years ago, and apparently, it has been fixed long
ago.
2019-12-23 14:50:51 +01:00
Max Kellermann
a714bdb0ce
lib/curl: drop support for CURL versions older than 7.32.0
...
For simplicity, this commit removes a workaround for an old CURL bug.
2019-12-23 14:41:06 +01:00
Max Kellermann
f1116c9258
event/Loop: remove bogus assertion
...
Can fail if somebody calls Break().
2019-12-23 14:20:09 +01:00
Max Kellermann
d01fb6730a
storage/curl: move start call out of the constructor
...
This can cause request completion in the I/O thread before this
constructor returns, leaving the object in an abstract state, causing
a crash due to pure virtual method call. We should not start the
request until this object is fully constructed.
Closes https://github.com/MusicPlayerDaemon/MPD/issues/665
2019-12-23 13:37:58 +01:00
Max Kellermann
57b8e7f651
Merge branch 'jv-cache-manager' of git://github.com/jacobvosmaer/MPD
...
Works around assertion failure in the boost::intrusive::set class
because we modified the container between insert_check() and
insert_commit().
Closes https://github.com/MusicPlayerDaemon/MPD/issues/691
2019-12-22 12:17:13 +01:00
Max Kellermann
9a577f8060
event/MultiSocketMonitor: add workaround for /dev/null
...
The ALSA "null" driver opens /dev/null and returns the file handle
from snd_pcm_poll_descriptors(), but /dev/null cannot be used with
epoll, the epoll_ctl() system call returns -EPERM. This means that
the ALSA output hangs, eventually freezing the whole MPD process.
This commit adds a workaround to the MultiSocketMonitor class which is
used by the ALSA output plugin.
Closes https://github.com/MusicPlayerDaemon/MPD/issues/695
2019-12-22 12:08:44 +01:00
Max Kellermann
d75a0d714e
event/MultiSocketMonitor: remove unnecessary friend
declaration
2019-12-22 12:08:44 +01:00
Max Kellermann
9be3a1554e
event/MultiSocketMonitor: remove duplicate IdleMonitor::Schedule() call
...
SetReady() does this already.
2019-12-22 12:08:10 +01:00
Max Kellermann
7764719513
event/MultiSocketMonitor: un-inline AddSocket()
2019-12-22 12:00:12 +01:00
Max Kellermann
dcbb9fe07c
event/Loop: round timeout up to avoid unnecessary wakeups
2019-12-22 11:58:31 +01:00
Max Kellermann
e3b347820a
event/MultiSocketMonitor: use std::exchange()
2019-12-20 13:42:35 +01:00
Jacob Vosmaer
83acbe1002
input/cache: use simpler intrusive::set API
2019-12-18 23:15:46 +01:00
Max Kellermann
a84bf5a92e
event/MultiSocketMonitor: AddSocket() returns bool
2019-12-18 17:50:21 +01:00
Max Kellermann
732bdc800d
event/SocketMonitor: Schedule() returns bool
2019-12-18 17:46:33 +01:00
Max Kellermann
a72878c5b9
io/FileDescriptor: add method FullRead()
2019-12-17 20:21:11 +01:00
Max Kellermann
bd4df1ae5d
util/AllocatedArray: add WritableBuffer/ConstBuffer cast operators
2019-12-17 20:18:54 +01:00
Max Kellermann
a93b7172aa
util/AllocatedArray: add ConstBuffer copy constructor
2019-12-17 20:18:49 +01:00
Max Kellermann
908b6a1939
util/AllocatedArray: use WritableBuffer::operator[]
2019-12-17 20:18:45 +01:00
Max Kellermann
561ccf600f
util/AllocatedArray: remove bogus assertions
...
`new T[0]` must not be nullptr.
2019-12-17 20:18:39 +01:00
Max Kellermann
aee861c009
util/AllocatedArray: copy constructor copies "nulled" state
2019-12-17 20:18:34 +01:00
Max Kellermann
2cc1dd28cd
util/AllocatedArray: add capacity()
...
For STL completeness.
2019-12-17 20:18:24 +01:00
Max Kellermann
f8d7bc1c34
util/AllocatedArray: use std::exchange()
2019-12-17 20:18:14 +01:00
Max Kellermann
a684b4fff1
lib/dbus/UDisks2: add missing <stdexcept> include
2019-12-16 23:50:01 +01:00
Max Kellermann
c82cef3aa6
lib/crypto/MD5: add missing include for uint8_t
2019-12-16 23:49:53 +01:00
Max Kellermann
683d5848f4
release v0.21.17
...
-----BEGIN PGP SIGNATURE-----
iQJEBAABCgAuFiEEA5IzWngIOJSkMBxDI26KWMbbRRIFAl34Bg0QHG1heEBtdXNp
Y3BkLm9yZwAKCRAjbopYxttFEmOvD/4/gBb1kIOQduz+ZV79LHPGeqDoIJBm8VWg
t9R1Mpt0flqC8+RcXFK/P0kUifBO5fu+a1DbHHijUvDNLYpUsCiXyxTpES9gGh54
7djEeqi1suoLpMUt4zkUEHGTp2dGUTmyewE1TuF1sZi2xlPgOeWXEX7a0xWs4zdG
WI4CojUSkQGVAI2XZ7xIKP1v368B9F6AbqTK4zkzjNbTCv5VfESGlxdde0NXqU2e
/bjil1aT2kdcks3ddeT4llyGIUzn1PzOyA6LQvmVXLSAtz9Rr/hHA+qkR19a4CCt
PXxE0xClhhmZglzPuES0sRqBbwG99dPzA1ajTOtielwMrlFx+OceRfUnfdgqpPqd
HTkEzMGsQ2PMMbE8R9DF5GU8B9xAcnKMh2g3/9KGStbocGSFWahLRObkHEhC5uJu
g5ncQio3o/AtlBirywn/lkd6CYRDvMheMVOTHtv4/ZN0hIONMXCb6u1SQfqnX7qb
fRP2UP9VUpPI9MUfOn/0uqM8/zXb5SMRe78p9UIYCF+mEDST190VxsdMjiBp/Xug
Pktlec72iyiNHCavp04nXkt2kBrfSIFFaAQ0Qlp4huRV1k3Ur672NHtwuPLv8ORH
xLec8On6nWVuuu5kC0F+4KxTlu6u2CMwH+wVr7t/D4rrD1iVo39MtElTBawZZC6+
8EapnNHyGg==
=A+Dp
-----END PGP SIGNATURE-----
Merge tag 'v0.21.17'
release v0.21.17
2019-12-16 23:44:20 +01:00
Max Kellermann
15ce8eb487
time/ISO8601: support omitting field separators
...
Closes https://github.com/MusicPlayerDaemon/MPD/issues/685
2019-12-16 23:31:29 +01:00
Max Kellermann
b7744be208
song/Filter: try ParseISO8601() first
...
Prepare for allowing ISO8601 time stamps without delimiters, such as
20191216, and prevent them from being interpreted as numeric UNIX time
stamps.
2019-12-16 23:31:29 +01:00
Max Kellermann
63c5d66016
time/ISO8601: support omitting minutes
2019-12-16 23:24:43 +01:00
Max Kellermann
d09bd9178f
time/ISO8601: support omitting seconds
2019-12-16 23:24:43 +01:00
Max Kellermann
7d8b1860c3
time/ISO8601: support time zone offset
2019-12-16 23:24:43 +01:00
Max Kellermann
b06825829b
time/ISO8601: allow omitting the "Z" suffix
...
And allow "Z" suffix after date.
2019-12-16 23:24:43 +01:00
Max Kellermann
ba4cd47fd8
time/ISO8601: allow omitting the time of day
2019-12-16 23:24:43 +01:00
Max Kellermann
5df2707d98
time/ISO8601: ParseISO8601() returns precision
2019-12-16 23:24:43 +01:00
Max Kellermann
4859ea468f
time/ISO8601: implement with strptime(), without ParseTimePoint()
...
Prepare for adding more flexible parsing.
2019-12-16 23:24:43 +01:00
Max Kellermann
2a8830db70
time/Convert: fallback TimeGm() implementation
...
Move code from Parser.cxx.
2019-12-16 23:24:38 +01:00
Max Kellermann
fed9b6fd74
time/Parser: use TimeGm()
2019-12-16 23:03:31 +01:00
Max Kellermann
b02890eb8a
time/Parser: explicitly initialize struct tm before strptime()
...
This is recommended by the strptime() manpage, because strptime() does
not initialize/set attributes which were not specified in the format
string.
2019-12-16 23:03:25 +01:00
Max Kellermann
da882a6eb6
time/Convert: include sys/time.h for struct timeval
...
Closes https://github.com/MusicPlayerDaemon/MPD/issues/562
2019-12-16 23:03:21 +01:00
Max Kellermann
aeb89aa9d6
time/ISO8601: forward-declare StringBuffer
2019-12-16 23:02:59 +01:00
Max Kellermann
f885807ecc
time/Convert: update copyright
2019-12-16 23:02:58 +01:00
Max Kellermann
b826fd71f0
time/Convert: mention exceptions
2019-12-16 23:02:57 +01:00
Max Kellermann
ae35df1126
zeroconf/AvahiPoll: move TimevalToChrono() to time/Convert.cxx
2019-12-16 23:02:45 +01:00
Max Kellermann
80e55f6bfc
time/Convert: add noexcept
2019-12-16 23:02:40 +01:00
Max Kellermann
e7411c0c4b
time/Convert: add pure
attributes
2019-12-16 23:02:38 +01:00
Max Kellermann
e9af692973
util/Time*: move to time/
2019-12-16 23:02:14 +01:00
Max Kellermann
0cf90ee8b6
decoder/mad: work around bogus -Wuninitialized in GCC 10
2019-12-16 23:01:31 +01:00
Max Kellermann
dc3c0c8866
pcm/Convert, ...: add missing include for std::runtime_error
2019-12-16 22:52:50 +01:00
Max Kellermann
1c46bb1ba6
lib/gcrypt/MD5: add missing include for uint8_t
2019-12-16 22:52:22 +01:00
Max Kellermann
2e8f42c6ad
util/StringBuffer: use std::size_t instead of size_t
2019-12-16 22:51:23 +01:00
Max Kellermann
b449627265
fs/io/Reader: relicense to BSD-2
2019-12-16 17:13:55 +01:00
Jacob Vosmaer
2b301ffd2c
lib/xiph: add missing meson dependency
2019-12-16 17:11:14 +01:00
Jacob Vosmaer
ef0765ca10
input: add missing boost meson dependency
2019-12-16 17:11:14 +01:00
Jacob Vosmaer
940206d106
filter/plugins: add missing meson dependency
2019-12-09 23:49:35 +01:00
Max Kellermann
65bbb975d2
command/fingerprint: fix inverted check
2019-12-04 16:59:01 +01:00
Max Kellermann
32799ff682
archive/zzip: improve error reporting
...
Most importantly, this commit translates ZZIP_ENOENT to
std::system_error(ENOENT) so IsFileNotFound() returns true and
find_stream_art() can suppress the log line.
2019-12-04 12:33:42 +01:00
Max Kellermann
ce093be12c
system/Error: add FormatFileNotFound()
2019-12-04 12:33:38 +01:00
Max Kellermann
2c276770f0
util/PrintException, ...: update copyright
2019-12-04 12:33:36 +01:00
Max Kellermann
75a592f629
system/Error: move code to IsErrno()
2019-12-04 12:33:33 +01:00
Max Kellermann
c129ca9f63
lib/xiph/VorbisComments: move to separate static library
...
This also reverts the previous commit which was wrong. When the
Vorbis decoder is disabled, we can't compile VorbisComments.cxx at
all.
Instead of expanding the #ifdef, this commit moves VorbisComments.cxx
to a separate library with dependencies on libvorbis (which was
missing previously, which could also lead to build failures if the
libvorbis headers were in a non-standard directory).
2019-11-20 16:12:35 +01:00
Max Kellermann
1e03457746
lib/xiph/VorbisComments: disable VorbisCommentToReplayGain() if Vorbis is disabled
...
Fixes build failure.
2019-11-20 15:51:49 +01:00
Max Kellermann
13ce07d181
output/shout: declare metadata as UTF-8
...
Apparently, Icecast defaults to ISO-8859-1 for MP3:
http://icecast.org/docs/icecast-2.4.0/config-file.html#mountsettings
This change forces Icecast to UTF-8 without having to configure it in
Icecast's configuration file.
2019-11-06 16:05:22 +01:00
Max Kellermann
43ac264f54
tag/Mask: add noexcept
2019-11-05 10:56:20 +01:00
Max Kellermann
cbaa98c1a1
input/curl: apply the "charset" parameter to Icy-Name
...
Extends the URI fragment parameter added in
commit cf9ee33928
Closes https://github.com/MusicPlayerDaemon/MPD/issues/679
2019-11-04 15:44:24 +01:00
Max Kellermann
ed327c597a
lib/icu/Converter: Create() returns std::unique_ptr
2019-11-04 15:44:06 +01:00
Max Kellermann
496f43e25d
Merge branch 'v0.21.x'
2019-11-04 15:07:46 +01:00
Max Kellermann
ebb952c4ad
neighbor/meson.build: disable if -Ddatabase=false
...
Fixes yet another build failure (which however only affects the 0.22
branch).
Closes https://github.com/MusicPlayerDaemon/MPD/issues/666
2019-11-04 14:18:48 +01:00
Max Kellermann
bea3b954a5
meson.build, SongUpdate: disable db-specific archive code if -Ddatabase=false
...
Fixes another build failure.
2019-11-04 14:15:48 +01:00
Max Kellermann
129d8e89b9
lib/sqlite: disable if -Ddatabase=false
...
Fixes build failure in StickerCommands.cxx.
2019-11-04 14:10:03 +01:00
Niklas Haas
65778a3774
output/Jack: mark ports as terminal
...
This is the correct thing to do for ports from which a signal ultimately
"originates", such as is the case with mpd.
2019-10-29 10:07:44 +01:00
smutbert
4ecd4761c2
add tag "Conductor"
2019-10-25 10:12:32 +02:00
Max Kellermann
e1867a99e9
release v0.21.16
...
-----BEGIN PGP SIGNATURE-----
iQJEBAABCgAuFiEEA5IzWngIOJSkMBxDI26KWMbbRRIFAl2m6cwQHG1heEBtdXNp
Y3BkLm9yZwAKCRAjbopYxttFEuMlD/9W6UTA9WfbeB2k8F2gFvy30w3jarsIdANG
iRl2qW8a/MSp6zNj5t3rIH/JTOPEVXgB7c844gIC2VHkKAu4M3kV2sqa7cDEcq6o
tFH5npemuCFbpkkAqXHpgFindWGMOqZy01PCN8m70y9IbfmI0Q25jngKeeuzgZ9O
4DHw9IniWNamAi9H3MdGt6BpyuQ+EJ+FOfuJdsJkLgfK15qMn/3LwNoUyCxjyK/K
brdQO0qpBg7dLZoGb6ER7qkyV1Cp+z/Mqeeocn4iQf3RuepIKzhZFMB1MY9FS7O1
YAA89Lpk9mvLqx1/LkArrPEOv7k5Ia5KSmxZJ5dsrdXm/TKVM1k0MxZuE7LoXLXp
wbdhXFoyhuL6lwLkw20wj1zqcTGMAYIp6t48YbDlVy59f/9OVROr++pCQsY+3L2t
JPY90z6hf6yDF5yZCucSt7gin/WXRdeQLTgAxd8EqGqFgIRrW0GZhssg+7O1iGCq
aSAVlxfzhVFxz7eyo4u3Dq/+d6gh3NRzV6exUYMxp3WHu7eweemlnKyxPxQ1lvSF
5EkZXC56wQp0JIcIRYLEXkJN8lmIy/i0xHaOLDB7cJN23CC5Z68Up6peCzvVPp+E
PIzOtT+4/FnQ6euu6KLHeiDyTWxdmGSrSP1W6cc/FpyLU86ZV/5tLg0bEaNxb9Sl
lYfRth0D/A==
=9Cv+
-----END PGP SIGNATURE-----
Merge tag 'v0.21.16'
release v0.21.16
2019-10-16 12:03:12 +02:00
Max Kellermann
12a86c4975
queue/PlaylistEdit: fix relative destination offset when moving a range
...
Commit 13208bf5a7
added range support to
the `move` command, but applied the wrong offset to the `to` variable.
When the source range is before the current song, and the song thus
gets decremented by the range size, then the final destination offset
must also be decremented by the range size.
Closes https://github.com/MusicPlayerDaemon/MPD/issues/663
2019-10-15 17:00:16 +02:00
Max Kellermann
0b9435858b
storage/curl: unescape file names from PROPFIND
...
This is the last missing piece for https://github.com/MusicPlayerDaemon/MPD/issues/662
2019-10-15 16:49:17 +02:00
Max Kellermann
f0386459ee
storage/curl: follow redirects for collections without trailing slash
2019-10-15 16:42:39 +02:00
Max Kellermann
e98d4670b8
storage/curl: work around different case in hex digits
2019-10-15 16:26:53 +02:00
Max Kellermann
56cc42b752
storage/curl: use MapUTF8() to reuse existing escaping code
...
Commit 29f78b18b1
continued.
Closes https://github.com/MusicPlayerDaemon/MPD/issues/662
2019-10-15 16:26:53 +02:00
Max Kellermann
ead208987d
storage/curl: unescape URI in MapToRelativeUTF8()
2019-10-15 16:26:49 +02:00
Max Kellermann
364acc8949
lib/curl/Escape: add CurlUnescape()
2019-10-15 13:39:02 +02:00
Max Kellermann
a8f4d2b6fc
storage/curl: move code to EscapeUriPath()
2019-10-15 13:24:06 +02:00
Max Kellermann
0eb113e7c6
lib/curl/String: OO wrapper for allocated strings returned from CURL
2019-10-15 13:13:39 +02:00
Max Kellermann
b2c4a5db14
util/UTF8: use uint8_t
instead of unsigned char
2019-10-14 13:44:11 +02:00
Max Kellermann
cadfccfd0c
util/UTF8: add noexcept
2019-10-14 13:41:06 +02:00
Max Kellermann
c89c7f71a2
thread/Util: lower the real-time priority from 50 to 40
...
On linux-rt, kernel IRQ threads are configured with priority=50, and
this change configures MPD somewhat below that priority, leaving some
room for other programs to be configured in between.
Closes https://github.com/MusicPlayerDaemon/MPD/issues/643
2019-10-09 14:40:02 +02:00
Andre Heider
96a9670c69
lib/icu: fix build with iconv()
2019-10-07 13:34:04 +02:00
Max Kellermann
dcc5ce6792
storage/curl: request the "resourcetype" property to fix update
...
Without requesting the property, "good" WebDAV servers would not send
it, and so MPD could never recognize a directory, failing the database
update.
Closes https://github.com/MusicPlayerDaemon/MPD/issues/660
2019-10-07 12:44:48 +02:00
Max Kellermann
23d08820a2
db/update/Walk: fix crash when music_directory is not a directory
...
Add a runtime sanity check to avoid the assertion failure.
Closes https://github.com/MusicPlayerDaemon/MPD/issues/660
2019-10-07 12:24:25 +02:00
Max Kellermann
2f3e94f8d0
output/MultipleOutputs: add method IsOpen()
2019-09-26 14:52:19 +02:00
Max Kellermann
f616bfe354
output/MultipleOutputs: add method HasName()
2019-09-26 14:48:31 +02:00
Max Kellermann
f2c3d86612
output: use StringIsEqual()
2019-09-26 14:48:31 +02:00
Max Kellermann
d7dbf47a3f
time/ISO8601: support omitting minutes
2019-09-25 21:39:25 +02:00
Max Kellermann
3db584a3ea
curl/Easy: add SetReadFunction()
2019-09-25 21:37:42 +02:00
Max Kellermann
409002b1c3
curl/Easy: add Perform()
2019-09-25 21:37:22 +02:00
Max Kellermann
29b542fd36
curl/Easy: add SetTimeout()
2019-09-25 21:36:52 +02:00
Max Kellermann
c9590db188
util/StringView: enable string_view support only on C++17
2019-09-25 21:34:48 +02:00
Max Kellermann
0643b5abad
release v0.21.15
...
-----BEGIN PGP SIGNATURE-----
iQJEBAABCgAuFiEEA5IzWngIOJSkMBxDI26KWMbbRRIFAl2LvuAQHG1heEBtdXNp
Y3BkLm9yZwAKCRAjbopYxttFEg3VD/9uWiK11PPXfpAqOQgL63c1CS/6HJizwnox
n0ns3T7eJJPXy06NTwuo5M8JeAIhuysEciHlJeGBf4NIGwGGHOL3nQv3FkWJlfeh
UrIJq66gIzElZ62Jvq+7zkkfjm6A0tmQoAEoIPouus+A4RNwndpqsKSotZzLK0yY
ACkJTxl8JJj+UbLzleDKSA+RxG817onGKl+urkvNDRdD7xs3VEUX6jhddVM1n3m+
BqCaihuQZYXur45mYIwFI7H5JevRawnEX8L6tERW0cE8j5IhnnPjwYvMX+DcZoTe
DgYuGkfPTfl31QufbbetTwWITjf4nrummYrAM/fKcNJcaqZFo4hs7m7N6p9c2ebm
QCUG0On32Lvkq4/iLAxXIdoy38mPkarREB2XQebHa6j2XPFjxB01lXLGYJzPtqBu
LCFRpR+ssWeZDQ3uP+fAzlgMXmB+owWa9NVqU5vlx97TCmXInOeim6tfq1T4keGW
3VFLqM6VAw4QyhrbowU0xbvxvYkWrgpkYbM5NcfwI67xZGLsI5vnRzX05VgF6BFZ
B7g+JIWjv+Mjm1ltsvC4OlJEcCXZb0BQWvwLHq0EGeEP/R9MWYX6BxlF1V8FWR2S
bIL0qIqtZfuUI66irNn23ZCyN4DilMcZkS8f30321hB2GLputG8zZwCcjxy1a/ft
1OoHXRfKNw==
=uONC
-----END PGP SIGNATURE-----
Merge tag 'v0.21.15'
release v0.21.15
2019-09-25 21:27:31 +02:00
Max Kellermann
92495d2b0b
decoder/mpcdec: fix bogus ReplayGain values
...
Apparently, libmpcdec sets gain/peak variables to zero if they are not
present. This clashes with our formula and results in bogus values
which cause noise during playback.
Closes https://github.com/MusicPlayerDaemon/MPD/issues/640
2019-09-13 19:52:11 +02:00
Max Kellermann
9270829b5b
ReplayGainInfo: move more code to a function
2019-09-13 19:50:49 +02:00
Max Kellermann
b6243a9945
decoder/mpcdec: merge duplicate code
2019-09-13 19:50:43 +02:00
Max Kellermann
496f88653d
ReplayGainInfo: add static method Undefined()
2019-09-13 19:46:39 +02:00
Max Kellermann
bf49c9e4e2
decoder/{dsf,dsdiff}: precalculate bit rate
2019-09-08 12:52:02 +02:00
Max Kellermann
0da9c91af2
decoder/{dsf,dsdiff}: fix displayed bit rate
...
The formula did not consider the channel count.
Closes https://github.com/MusicPlayerDaemon/MPD/issues/639
2019-09-08 12:45:05 +02:00
Max Kellermann
d63e2c2641
db/update: scan CUE playlist contents
...
This commit adds a PlaylistPlugin attribute "as_folder" which for now
is only enabled in the "CUE" playlist plugin (which handles separate
"*.cue" files). If a playlist with this flag set is being scanned
during database update, it will be parsed and its contents will be
added to the database. This allows clients to inspect them like
directories and its contents will be searchable.
Closes https://github.com/MusicPlayerDaemon/MPD/issues/39
2019-09-08 00:39:53 +02:00
Max Kellermann
5fdb804a50
db/simple/Song: add attribute "target"
...
Will be used for Song objects representing tracks inside a CUE file.
2019-09-08 00:32:16 +02:00
Max Kellermann
91c1274ac6
db/Song: translate relative "real_uri" paths
2019-09-08 00:31:10 +02:00
Max Kellermann
9caf90f74f
util/UriRelative: add uri_apply_relative()
2019-09-08 00:07:37 +02:00
Max Kellermann
71448e645c
util/UriExtract: use uri_get_scheme() in uri_has_scheme()
2019-09-08 00:06:52 +02:00
Max Kellermann
0509472636
util/UriExtract: add uri_is_relative_path()
2019-09-08 00:04:49 +02:00
Max Kellermann
0b956cf968
util/StringAPI: add memrchr() wrapper
2019-09-07 23:59:59 +02:00
Max Kellermann
58363cf4dd
util/UriRelative: allow "parent" to end with slash
2019-09-07 23:27:24 +02:00
Max Kellermann
2574615fa3
util/UriRelative: use StringAfterPrefix() instead of memcmp()
...
memcmp() can overrun the buffer.
2019-09-07 23:24:41 +02:00
Max Kellermann
15fbd2b4ab
util/UriRelative: use StringIsEqual()
2019-09-07 23:22:16 +02:00
Max Kellermann
ee36a48dbb
db/simple/Directory: RemoveSong() returns SongPtr
2019-09-05 21:12:10 +02:00
Max Kellermann
07f212c98c
SongSave: return DetachedSong, not a std::unique_ptr<>
...
Eliminate unnecessary dynamic allocations.
2019-09-05 20:58:04 +02:00
Max Kellermann
a1e2602c3d
SongSave: allow throwing any exception
2019-09-05 20:58:00 +02:00
Max Kellermann
b03e4ae692
queue/Save: move code to LoadQueueSong()
2019-09-05 20:56:47 +02:00
Max Kellermann
57808d1a1b
queue/Save: queue_load_song() throws on error
...
Don't catch and log exceptions here; let the caller decide.
2019-09-05 20:55:18 +02:00
Max Kellermann
7775691965
db/simple/Song: rename "uri" to "filename"
...
This attribute is not a URI; it is just the filename without its
parent directory path. To avoid confusion, let's rename it to
"filename", leaving the struct without a "uri" attribute.
2019-09-04 12:04:35 +02:00
Max Kellermann
a727150c8d
db/simple/Song: remove StringView constructor
2019-09-04 12:03:56 +02:00
Max Kellermann
949916cba1
db/simple/Song: convert NewFrom() to constructor
2019-09-04 12:03:49 +02:00
Max Kellermann
497d090814
db/simple/Song: remove static method NewFile()
2019-09-04 12:03:41 +02:00
Max Kellermann
6a13847287
db/simple/Song: add template constructor
2019-09-04 12:03:37 +02:00
Max Kellermann
cbe7d052e8
db/simple/Song: use PathTraitsUTF8::Build()
2019-09-04 12:02:18 +02:00
Max Kellermann
f4d0bd8205
db/simple/Song: make "parent" a reference, not a pointer
2019-09-04 12:02:17 +02:00
Max Kellermann
1bfede120a
fs/Traits: call std::string::reserve() in BuildPathImpl()
2019-09-04 12:01:25 +02:00
Max Kellermann
e96856032f
SongSave: use StringIsEqual()
2019-09-04 11:13:39 +02:00
Max Kellermann
05a29e8458
db/simple/Song: simplify Export()
2019-09-03 20:36:39 +02:00
Max Kellermann
7f9a8b8748
db/simple/Song: convert "uri" to a std::string
...
No longer allocate it as a "VarSize". This used to be a clever trick
to save memory 10 years ago, but these days, keeping the code
maintainable seems more important than saving a few kilobytes of
memory.
2019-09-03 20:26:47 +02:00
Max Kellermann
af3f637d3f
db/simple/Song: pass StringView to constructor
2019-09-03 20:25:04 +02:00
Max Kellermann
97a9adcbec
db/update/Archive: convert pointer to reference
2019-09-03 19:54:18 +02:00
Max Kellermann
177d3b0178
db/update/Archive: use MakeDirectoryIfModified()
2019-09-03 19:52:15 +02:00
Max Kellermann
12beb22c1d
db/update/VirtualDirectory: add LockMakeVirtualDirectoryIfModified()
2019-09-03 19:51:20 +02:00
Max Kellermann
29fd3172ee
db/update/VirtualDirectory: pass device_id to MakeVirtualDirectoryIfModified()
2019-09-03 19:49:32 +02:00
Max Kellermann
a873137702
db/update/VirtualDirectory: rename MakeDirectoryIfModified()
2019-09-03 19:49:10 +02:00
Max Kellermann
e08298a66f
db/update/Container: move MakeDirectoryIfModified() to VirtualDirectory.cxx
2019-09-03 19:37:53 +02:00
Max Kellermann
fd1826cb91
db/update/Container: move SupportsContainerSuffix() to struct DecoderPlugin
2019-09-03 19:36:56 +02:00
Max Kellermann
d5681b678c
db/update/Walk: move UpdatePlaylistFile() to Playlist.cxx
2019-09-03 18:53:33 +02:00
Max Kellermann
0fd6235a66
playlist/Registry: add FindPlaylistPluginBySuffix()
2019-09-02 20:28:14 +02:00
Max Kellermann
4d11745156
playlist/Plugin: add SupportsSuffix(), SupportsMimeType()
2019-09-02 20:19:47 +02:00
Max Kellermann
2038620bc4
db/simple/Directory: add method IsReallyAFile()
2019-09-02 20:15:52 +02:00
Max Kellermann
5dc7cb87bb
db/simple/DirectorySave: use StringIsEqual()
2019-09-02 20:10:26 +02:00
Max Kellermann
f885e068c8
playlist/Plugin: add constructors
2019-09-01 15:01:58 +02:00
Max Kellermann
0d16772dea
playlist/Plugin: rename with CamelCase
2019-09-01 14:58:49 +02:00
Max Kellermann
2376527d1f
db/DatabaseSong: add noexcept
2019-09-01 14:56:27 +02:00
Max Kellermann
7f043367ed
db/UniqueTags: add API documentation
2019-09-01 14:55:25 +02:00
Max Kellermann
45403b44de
db/update/ExcludeList: add noexcept
2019-09-01 14:02:34 +02:00
Max Kellermann
32f865f146
db/update/InotifySource: add noexcept
2019-09-01 13:58:45 +02:00
Max Kellermann
9f92b59376
db/update/InotifyQueue: add noexcept
2019-09-01 13:58:22 +02:00
Max Kellermann
2bb5030f70
db/update/Queue: add noexcept
2019-09-01 13:55:17 +02:00
Max Kellermann
366de8773c
db/update/Service: add noexcept
2019-09-01 13:51:34 +02:00
Max Kellermann
d3cc54d4eb
TagArchive, db/update/Service: catch all exceptions
2019-09-01 12:57:24 +02:00
Max Kellermann
71ef0faa2c
output/Source: move code to DropCurrentChunk()
2019-08-27 19:07:52 +02:00
Max Kellermann
328a6de86e
output/Source: document "pending_tag" ownership
2019-08-27 19:07:52 +02:00
Max Kellermann
4c7154bd23
filter/Observer: add noexcept
2019-08-26 21:04:35 +02:00
Max Kellermann
4f5c3b349d
filter/Filter: document that Flush() can throw
2019-08-26 21:03:25 +02:00
Max Kellermann
4fabfdabde
filter/Filter: allow throwing any exception
2019-08-26 21:01:22 +02:00
Max Kellermann
2e9b5e4e78
filter/Registry: rename the source file
2019-08-26 20:54:52 +02:00
Max Kellermann
115dd2b5ce
lib/curl: require CURL 7.33, remove bug workaround
2019-08-26 20:43:39 +02:00
Max Kellermann
b18003ddfd
lib/curl/Global: add missing include
2019-08-26 20:40:26 +02:00
Max Kellermann
6ec335dcd5
net/UniqueSocketDescriptor: import std::swap()
2019-08-26 20:37:47 +02:00
Max Kellermann
d5d6746ddf
net/UniqueSocketDescriptor: update copyright year
2019-08-26 20:37:31 +02:00
Max Kellermann
00d7759cee
net/SocketDescriptor: expose CheckDuplicate()
2019-08-26 20:36:51 +02:00
Max Kellermann
2ecc4e3eed
net/AllocatedSocketAddress: remove config.h, we have Features.hxx already
2019-08-26 20:28:53 +02:00
Max Kellermann
7d98145ea8
net/AddressInfo: include Features.hxx instead of config.h
2019-08-26 20:26:40 +02:00
Max Kellermann
e7c5a59e39
util/Exception: support "const char *"
2019-08-26 20:24:22 +02:00
Max Kellermann
c9081a206a
client/New: fix assertion failure in Close()
...
Caused by a revert accident in commit
f2cdbeace6
Closes https://github.com/MusicPlayerDaemon/MPD/issues/631
2019-08-22 14:43:53 +02:00
Max Kellermann
818b7e0641
output/solaris: include sys/stropts.h only on Solaris
...
This header had been available for a long time on Linux, but was
removed in glibc 2.30. This commit moves the `#include` line inside
the `#ifdef __sun` block and adds a fake declaration of `I_FLUSH` for
the Linux build.
Closes https://github.com/MusicPlayerDaemon/MPD/issues/630
2019-08-22 11:41:12 +02:00
Max Kellermann
f2cdbeace6
Revert "Client: eliminate SetExpired(), call Close() directly"
...
This reverts commit 58d7804d66
. It
caused a use-after-free bug when Client::OnSocketError() was called
due to a failed write, e.g. if the output buffer was full.
2019-08-22 09:52:19 +02:00
Max Kellermann
e6600b8562
release v0.21.14
...
-----BEGIN PGP SIGNATURE-----
iQJEBAABCgAuFiEEA5IzWngIOJSkMBxDI26KWMbbRRIFAl1dBToQHG1heEBtdXNp
Y3BkLm9yZwAKCRAjbopYxttFEhlID/4gcrbaegKpTkftGPLBGlSUc4W0qwSHbdiJ
SuzK7sraSGUlLHHiBfqvFfE8tyEaLfsJarqiOdGgfiaW5QyapdwuU5s76nAN6jjY
onEo2QK6vSbv4J/B1+Jv+NGCgVM3ZkPy91GhfTz8MEtJMaBmztFhnpxK60r9jYPG
5EBsnVa6HhI7gniQAtOwE8SXYnn92Q4j72S8OuAbJ7Vwh0oqdIyXECqzcAE97Fk2
TNX/YSLST3I7Chv2OBDb3vOegh9nFUyr0qeSYdi8vk2BBYcgX2xYOOBQCC3ta/nr
NNeuSJOLgcF1XrFqVRRhDKZ8Y2inD6qVAXOH5WtChT1n3uXqYW7vdq0fW+/w3W/E
vouzgt5KvU5Me4Mk2M2dMjEWW+7Y8EUjvrwDnbDIkyP+Yi+BLTmTnyBgAW3cvRO9
UoCcWTBOEgyX2wAFl3r+NMPEneuMLbMCZUMju4/zveiRJdFExA0LC8wk0/iWqQbW
+WD8y6RTo7Z1jsP1vnBimgAkzkLAOuMlKLYNI15ETrxwKWgOjN6a7Q61GVdsaiqG
fKQeO0kZWWFcJ7HECgp3tpwWEi1+7/uqt0TwQgOKDdZHYL0Wb6Ur09KJS4b+eKIl
UzYwCrPgUx1pcYR+rTbMxCNpWn2kA+vp2UaPBN60c/J98d+6C/2nKtIvXfr5MrUA
CEb1epw/ew==
=mEFF
-----END PGP SIGNATURE-----
Merge tag 'v0.21.14'
release v0.21.14
2019-08-21 10:52:49 +02:00
Max Kellermann
b968e1b6de
output/Thread: add missing return
in exception handler
2019-08-21 10:20:17 +02:00
Max Kellermann
6c9f9c136b
command/all: don't create new Response instance in exception handler
...
The new Response instance in the `catch` block didn't have the
`command` attribute set, so the error response didn't indicate which
command had failed, which however is required in the MPD protocol.
Closes https://github.com/MusicPlayerDaemon/MPD/issues/628
2019-08-20 20:31:36 +02:00
Max Kellermann
9bff5f9e36
client/Process, command/all: add noexcept
...
Clarify that those can't throw, preparing for the next commit.
2019-08-20 20:28:15 +02:00
Max Kellermann
2bf26a2ff8
command/all: remove obsolete prototype
2019-08-20 20:28:10 +02:00
Max Kellermann
e33b50d9c5
command/all: simplify return
from command_process()
2019-08-20 20:26:07 +02:00
Max Kellermann
21fa44c0d5
command/all: catch all exceptions
2019-08-20 20:23:54 +02:00
Max Kellermann
44444e1b89
decoder/Thread: on late SEEK, start decoder at seek position
...
Previously, a bogus value (whatever happened to be still in
`start_time`) was used.
2019-08-20 20:15:08 +02:00
Max Kellermann
ca450663d0
decoder/Control: work around crash after SEEK was too late
...
See code comment.
Closes https://github.com/MusicPlayerDaemon/MPD/issues/629
2019-08-20 20:01:53 +02:00
Max Kellermann
04e2d08417
decoder/Control: inline WaitForDecoder()
2019-08-20 19:33:15 +02:00
Max Kellermann
af4ffa91fd
decoder/Control: remove attribute client_is_waiting
...
This optimization is useless because sane pthread_cond_signal()
implementations check the number of waiters and do not invoke a system
call if there are none.
2019-08-20 19:23:44 +02:00
Max Kellermann
f3ed2c0a82
time/ISO8601: support omitting seconds
2019-08-19 22:44:41 +02:00
Max Kellermann
2c35ea92bd
time/ISO8601: support time zone offset
2019-08-19 22:44:28 +02:00
Max Kellermann
26e0e1d25a
time/ISO8601: allow omitting the "Z" suffix
...
And allow "Z" suffix after date.
2019-08-19 22:42:39 +02:00
Max Kellermann
6412efb6e4
time/ISO8601: allow omitting the time of day
2019-08-19 22:42:06 +02:00
Max Kellermann
1a08bdf16f
time/ISO8601: ParseISO8601() returns precision
2019-08-19 22:41:49 +02:00
Max Kellermann
48b122f2ed
time/ISO8601: implement with strptime(), without ParseTimePoint()
...
Prepare for adding more flexible parsing.
2019-08-19 22:26:43 +02:00
Max Kellermann
06dac4783f
time/Convert: fallback TimeGm() implementation
...
Move code from Parser.cxx.
2019-08-19 22:22:07 +02:00
Max Kellermann
fdaadc19cb
time/Parser: use TimeGm()
2019-08-19 22:21:22 +02:00
Max Kellermann
2e53e9248a
time/Parser: explicitly initialize struct tm before strptime()
...
This is recommended by the strptime() manpage, because strptime() does
not initialize/set attributes which were not specified in the format
string.
2019-08-19 22:09:38 +02:00
Max Kellermann
b7abd5691c
lib/curl/Global: use auto
2019-08-19 22:00:25 +02:00
Max Kellermann
7a0957d713
lib/curl/Global: document ToRequest()
2019-08-19 22:00:06 +02:00
Max Kellermann
2934fc2507
lib/curl/Global: remove CURL* parameter from Add() and Remove()
2019-08-19 21:53:19 +02:00
Max Kellermann
0c8ff56a15
lib/curl/Easy: add constructor with URL parameter
2019-08-19 21:48:07 +02:00
Max Kellermann
07be44a50a
lib/curl/Easy: add getter functions
2019-08-19 21:47:11 +02:00
Max Kellermann
7a473729af
lib/curl/Easy: add method Unpause()
2019-08-19 21:46:21 +02:00
Max Kellermann
402f429b17
lib/curl/Easy: add setter functions
2019-08-19 21:38:55 +02:00
Max Kellermann
4c46ca6b59
lib/curl/Global: make ReadInfo() private
2019-08-19 21:38:09 +02:00
Max Kellermann
76a0bf68c7
lib/curl/Global: remove redundant API docs
2019-08-19 21:38:03 +02:00
Max Kellermann
9f02beaba9
lib/curl: fix coding style
2019-08-19 21:37:47 +02:00
Max Kellermann
a478af6759
util/PrintException, ...: update copyright
2019-08-19 19:11:59 +02:00
Max Kellermann
4c2434788f
system/FileDescriptor: add method IsRegularFile()
2019-08-19 19:11:53 +02:00
Max Kellermann
ca9daf5e19
playlist/flac: set song URI to an empty string
...
Simplify the plugin by using a trivial relative URI; later,
playlist_check_translate_song() will set the correct full URI.
2019-08-16 14:55:12 +02:00
Max Kellermann
e98ce710b8
util/WStringAPI: add wcsncmp() wrapper
2019-08-16 14:48:54 +02:00
Max Kellermann
79d1004544
util/StringView: add method Compare()
2019-08-16 13:32:00 +02:00
Max Kellermann
bb7f7bd3e5
util/StringAPI: add strncmp() wrapper
2019-08-16 13:31:58 +02:00
Max Kellermann
ad2b858933
util/ForeignFifoBuffer: add friend function swap()
2019-08-16 13:27:22 +02:00
Max Kellermann
d7aa4fa7d3
util/ForeignFifoBuffer: make Swap() lower case
2019-08-16 13:27:22 +02:00
Max Kellermann
57c5603122
util/ForeignFifoBuffer: import std::swap()
2019-08-16 13:27:22 +02:00
Max Kellermann
1550113506
util/DynamicFifoBuffer: add nullptr constructor overload
2019-08-16 13:21:28 +02:00
Max Kellermann
a82d61a5e4
util/DynamicFifoBuffer: add API documentation
2019-08-16 13:21:11 +02:00
Max Kellermann
0c4a7c8004
util/AllocatedString: update copyright
2019-08-16 13:20:23 +02:00
Max Kellermann
674ee9d19a
util/Exception: forward the exception in ThrowException()
...
Fixes -Wreturn-std-move (clang 8).
2019-08-16 13:19:34 +02:00
Max Kellermann
3344953db8
util/*FifoBuffer: use using
instead of typedef
2019-08-16 13:16:45 +02:00
Max Kellermann
f909615b14
include cleanups (powered by iwyu)
2019-08-15 17:57:20 +02:00
Max Kellermann
92c89f0c86
playlist/flac: allow reading from FLAC streams
2019-08-15 11:13:39 +02:00
Max Kellermann
34246eb7fd
playlist/flac: read the file only once using FLAC__Metadata_Chain
2019-08-15 10:40:48 +02:00
Max Kellermann
5894514ccb
playlist/flac: move code to ToSongEnumerator()
2019-08-15 10:40:37 +02:00
Max Kellermann
dcb07e6ed4
playlist/flac: use class MemorySongEnumerator
2019-08-15 09:45:03 +02:00
Max Kellermann
ccffff9870
playlist/flac: use the NarrowPath for FLAC__metadata_get_streaminfo()
2019-08-15 09:44:20 +02:00
Max Kellermann
e34672c9d8
lib/xiph/FlacMetadataIterator: add noexcept
2019-08-14 20:14:26 +02:00
Max Kellermann
a8f314190f
playlist/flac: add noexcept
2019-08-14 20:08:55 +02:00
Max Kellermann
545af857ba
lib/xiph/{FlacStreamMetadata,VorbisComments}: merge redundant code
2019-08-14 19:57:12 +02:00
Max Kellermann
01f86e1c25
lib/xiph/FlacStreamMetadata: pass StringView to flac_scan_comment()
2019-08-14 19:54:19 +02:00
Max Kellermann
7a89b1656c
lib/xiph/FlacStreamMetadata: properly convert entries to StringView
2019-08-14 19:44:14 +02:00
Max Kellermann
07fcf091a2
tag/MixRamp: pass StringView to ParseMixRampVorbis()
2019-08-14 19:42:48 +02:00
Max Kellermann
74a883dbf8
tag/MixRamp: add noexcept
2019-08-14 19:42:28 +02:00
Max Kellermann
5c550e8b33
lib/crypto/MD5: add option to use libavutil instead of libgcrypt
2019-08-14 18:56:10 +02:00
Max Kellermann
433e18b247
decoder/{opus,vorbis}: support embedded pictures (METADATA_BLOCK_PICTURE)
...
More for https://github.com/MusicPlayerDaemon/MPD/issues/42
2019-08-14 12:39:03 +02:00
Max Kellermann
2b837277c1
lib/crypto: add base64 wrapper using libavutil
2019-08-14 12:39:03 +02:00
Max Kellermann
d515a8e99a
lib/gcrypt/MD5: add wrapper in lib/crypto/
...
Prepare for using other crypto libraries, e.g. FFmpeg's libavutil.
2019-08-14 12:39:03 +02:00
Max Kellermann
2c2efaa91f
lib/xiph/VorbisComments: pass struct vorbis_comment instead of char**
...
Use the "comments" attribute instead of relying on the nullptr
terminator.
2019-08-14 12:28:52 +02:00
Max Kellermann
9ae9b2c18f
tag/VorbisComment: use struct StringView
2019-08-14 12:22:52 +02:00
Max Kellermann
8e0d810968
tag/MixRamp: use StringView in ParseMixRampTagTemplate()
2019-08-14 12:18:49 +02:00
Max Kellermann
0f1e13d9ff
util/StringView: add StartsWithIgnoreCase(), EndsWithIgnoreCase()
2019-08-14 11:36:21 +02:00
Max Kellermann
21b81dfb1d
lib/gcrypt/Hash: use the "algo" parameter instead of hard-coding MD5
2019-08-13 20:02:08 +02:00
Max Kellermann
f3d16f6d1b
output/Thread: fix typo in comment
2019-08-13 13:08:40 +02:00
Max Kellermann
6b51429203
decoder/opus: move comment size check to ScanOneOpusTag()
...
Prepare for parsing large binary comments (such as
METADATA_BLOCK_PICTURE).
2019-08-13 12:19:31 +02:00
Max Kellermann
e2da13b0d3
command/file: add command "readpicture"
...
Closes https://github.com/MusicPlayerDaemon/MPD/issues/42
2019-08-13 11:55:51 +02:00
Max Kellermann
54daa85ac2
decoder/flac: support embedded pictures (FLAC__METADATA_TYPE_PICTURE)
2019-08-13 11:55:51 +02:00
Max Kellermann
575ba51931
tag/Id3Scan: support embedded pictures (the "APIC" tag)
2019-08-12 20:31:43 +02:00
Max Kellermann
96a1c69c29
tag/Handler: add virtual method OnPicture()
...
Preparing for https://github.com/MusicPlayerDaemon/MPD/issues/42
2019-08-12 20:31:43 +02:00
Max Kellermann
3895d35a52
command/file: move code to TagScanAny()
2019-08-12 20:31:43 +02:00
Max Kellermann
4f61cd0b93
client/Response: add constant MAX_BINARY_SIZE
...
Use the same chunk size for all binary commands.
2019-08-12 20:23:46 +02:00
Max Kellermann
989790e7f1
client/Response: add method WriteBinary()
...
Move code from read_stream_art().
2019-08-12 14:17:35 +02:00
Max Kellermann
831bc711ca
decoder/mad: remove option "gapless", always do gapless
...
Why would anybody want to keep the silence inserted by the codec?
Other plugins/codecs (such as Vorbis) have this hard-coded as well.
2019-08-12 13:05:57 +02:00
Max Kellermann
828c614d57
decoder/sidplay: use StringFormat<>()
2019-08-10 12:31:31 +02:00
Max Kellermann
4964ad7800
decoder/sidplay: sidplay_load_songlength_db() throws on error
2019-08-10 12:28:53 +02:00
Max Kellermann
a7976cd0f2
decoder/sidplay: automatic memory management inside struct SidplayGlobal
2019-08-10 12:26:10 +02:00
Max Kellermann
bed8a0e040
decoder/sidplay: move global variables to struct SidplayGlobal
2019-08-10 12:16:09 +02:00
Max Kellermann
b8a64771c0
decoder/sidplay: add noexcept
2019-08-10 12:12:52 +02:00
Max Kellermann
f357f743a3
pcm/Volume: use transform_n()
2019-08-10 12:05:37 +02:00
Max Kellermann
91e565d92e
pcm/PcmFormat: use transform_n()
2019-08-10 12:05:35 +02:00
Max Kellermann
a189a9e478
util/TransformN: new library
2019-08-10 11:59:47 +02:00
Fredrik Noring
9654a33218
decoder/sidplay: Fix empty album names by using the SID name field
...
SID files are generally collections of tunes, so a SID name field makes
sense as an MPD album. The SID tune information list (STIL) has name
and title fields for individual tunes, when such are known, but MPD is
currently not using the STIL.
2019-08-10 11:01:15 +02:00
Max Kellermann
9bcd02d178
Merge branch 'v0.21.x'
2019-08-10 10:58:32 +02:00
Fredrik Noring
2d61e526de
decoder/sidplay: Fix date field to have year but not company or author
...
Field 2 is called <released>, formerly used as <copyright>[1][2]. It is
formatted <year><space><company or author or group>, where <year> may be
<YYYY>, <YYY?>, <YY??> or <YYYY-YY>, for example "1987", "199?", "19??"
or "1985-87". The <company or author or group> may be for example Rob
Hubbard. A full field may be for example "1987 Rob Hubbard".
This change splits the <released> field at the first <space>, to retain
the <year> part.
The 51823 SID files in High Voltage SID Collection (HVSC) version 71
have the following distribution of dates:
333 19?? 11 1990-92 6 1995-99 2 2006-08
827 198? 88 1990-93 2140 1996 530 2007
32 1982 69 1990-94 9 1996-97 15 2007-08
1 1982-83 49 1990-95 2 1996-98 2 2007-09
255 1983 3467 1991 5 1996-99 1 2007-10
677 1984 75 1991-92 1840 1997 430 2008
775 1985 65 1991-93 4 1997-98 23 2008-09
3 1985-86 10 1991-94 1276 1998 1 2008-12
10 1985-87 35 1991-97 4 1998-99 631 2009
943 1986 3320 1992 865 1999 1 2009-10
12 1986-87 26 1992-93 24 200? 645 2010
5 1986-89 59 1992-94 590 2000 1 2010-12
2083 1987 1 1992-96 4 2000-01 538 2011
31 1987-88 2996 1993 727 2001 1 2011-12
44 1987-89 42 1993-94 875 2002 651 2012
2510 1988 12 1993-95 2 2002-04 811 2013
129 1988-89 2 1993-97 844 2003 790 2014
91 1988-90 2737 1994 3 2003-05 740 2015
58 1988-91 16 1994-95 842 2004 792 2016
3466 1989 20 1994-96 2 2004-05 775 2017
95 1989-90 17 1994-97 707 2005 638 2018
150 1989-91 2271 1995 1 2005-06 284 2019
1077 199? 2 1995-96 2 2005-07
2834 1990 4 1995-97 785 2006
119 1990-91 2 1995-98 6 2006-07
References:
[1] https://www.hvsc.c64.org/download/C64Music/DOCUMENTS/SID_file_format.txt
[2] https://hvsc.c64.org/info
2019-08-10 10:50:51 +02:00
Fredrik Noring
7723c481db
decoder/sidplay: Fix windows-1252 to utf-8 string conversion
...
High Voltage SID Collection (HVSC) metadata fields are encoded in
windows-1252, as described in DOCUMENTS/SID_file_format.txt:
https://www.hvsc.c64.org/download/C64Music/DOCUMENTS/SID_file_format.txt
If utf-8 transcoding fails, or the ICU library is unavailable, fall
back to plain ASCII and replace other characters with '?'.
2019-08-10 10:45:02 +02:00
Max Kellermann
cf9ee33928
input/icy: support "charset" parameter in URI fragment
...
Closes https://github.com/MusicPlayerDaemon/MPD/issues/616
2019-08-10 10:07:13 +02:00
Max Kellermann
4a47bbd816
IcyMetadataParser: implement charset conversion
2019-08-10 10:07:13 +02:00
Max Kellermann
7654038d65
util/UriQueryParser: new library
2019-08-09 20:39:34 +02:00
Max Kellermann
e4612ecb66
util/UriExtract: add uri_get_fragment()
2019-08-09 20:39:23 +02:00
Max Kellermann
9c6850210d
util/UriExtract: uri_get_scheme() returns StringView
...
Reduce overhead by not duplicating the string.
2019-08-09 20:21:37 +02:00
Max Kellermann
40a2880857
util/UriUtil: split
2019-08-09 20:21:12 +02:00
Max Kellermann
ade712d711
util/UriUtil: relicense as BSD-2
2019-08-09 20:16:02 +02:00
Fredrik Noring
0ed10542cc
decoder/sidplay: Fix song length initialisation during container scan
...
The song length was previously undetermined.
2019-08-09 15:39:36 +02:00
Max Kellermann
349a2ea7eb
Merge branch 'sid-genre-option' of git://github.com/frno7/MPD
2019-08-09 14:45:41 +02:00
Max Kellermann
192ad91010
release v0.21.13
...
-----BEGIN PGP SIGNATURE-----
iQJEBAABCgAuFiEEA5IzWngIOJSkMBxDI26KWMbbRRIFAl1JSe4QHG1heEBtdXNp
Y3BkLm9yZwAKCRAjbopYxttFEq5gEACNRnk8lADXzerHiuhyySJTpo1hweh+tRpx
fEahsC1SWa5677SsvHtk+Er8HTrpr0mSCefBbfqAKBSsJzdm1TUepCbEZrKM3jF5
0PaRiKlOQraqLnT95AOVbdzKK0N2aKvf3aJfDkquG93YfMyJJr0oTGFfQNTT4VFC
+HuvcqlMragXfLD2xp9WxhjYTajDmCobeBlHKND7FD67VyQqWIwWsRMKZKXXeplS
kQlFSNLfb4L6x7Qvnz57wMSYHQ1yzjZKoEczjR5WEJBz4GYsw+8BB6M5TR+cyo+y
LjiEMYMk1b+YiIneuloRaeCS/5PxMBeCSC+w6uqfnm9wGA5dv6zAWwHWJ6XqIYTv
ORAxoWJ1oN3HAv7ao57g2kGJ5WZwrfVyiS0hViPM0D181w6dMvPgmWdltPZphxtY
3uNurG45lecXoTtuv4EqWeeVOBzoJI1dUyQ7e73a9+Cpl9u7suAoe/nm3F/nh5ti
l+I5VeK82GVBePXn02ZRAhkZ+Ll3jvt5Bpz/wyNutP6pWtFjYS6p1W19Hi2UiNOv
56+ackJFr4oCqOoCKWHbwJbyrx44nhnBxiyEOhGdVA9xdB2EpYKOoZ29iGKEO2um
+QytEt8gf6YVe3C51OlmJfnZoJ4+pwIWpQFyjT40CMy6ZL0swdLlMgFv5+LSjzrC
eKJz2/h4dg==
=ICvW
-----END PGP SIGNATURE-----
Merge tag 'v0.21.13'
release v0.21.13
2019-08-06 11:39:25 +02:00
Max Kellermann
bcccc8f66c
output/jack: use jack_free() for Windows compatibility
2019-08-06 11:34:56 +02:00
Max Kellermann
848c63e2d5
output/jack: use std::atomic_bool for "shutdown" and "pause"
...
Without this, the compiler may optimize accesses away.
2019-08-06 11:34:00 +02:00
Max Kellermann
f6d0310f9c
output/jack: use SIZE_MAX instead of (size_t)-1
2019-08-06 11:33:52 +02:00
Max Kellermann
3ef043392c
input/cdio_paranoia: drop support for libcdio-paranoia older than 10.2+0.93+1
...
Version 10.2+0.93+1 was released five years ago in 2014 and is the
first version to feature cdio_cddap_free_messages(). There is no way
to check the libcdio-paranoia version at compile time, so let's just
remove support for older versions instead of attempting to fix the
cdio_cddap_free_messages() check at build time.
Closes https://github.com/MusicPlayerDaemon/MPD/issues/613
2019-08-06 11:09:36 +02:00
Max Kellermann
864d6f312d
Revert "decoder/mad: use MAD_F_MIN and MAD_F_MAX"
...
This reverts commit f7ed7446ae
. It was
a bad idea, because MAD_F_MIN and MAD_F_MAX do not represent the
clamping limits, but the theoretical minimum and maximum values of the
mad_fixed_t data type.
Closes https://github.com/MusicPlayerDaemon/MPD/issues/617
2019-08-05 13:07:41 +02:00
Max Kellermann
91fb91d89c
util/StringView: prepare the transition to std::string_view
...
Unfortunately, we need to disable this for GCC versions older than 7,
because it doesn't have <string_view> yet.
2019-08-05 10:23:05 +02:00
Max Kellermann
8b399b7133
output/jack: use jack_free() for Windows compatibility
2019-08-05 09:35:41 +02:00
Max Kellermann
9d24f68f51
output/jack: convert to class, make attributes/methods private
2019-08-05 09:31:40 +02:00
Max Kellermann
44652fdb13
output/jack: convert callback functions to static methods
2019-08-05 09:29:27 +02:00
Max Kellermann
2892a6f5e2
output/jack: merge set_audioformat() into Open()
2019-08-05 09:28:41 +02:00
Max Kellermann
2fc40e5575
output/jack: eliminate "shutdown" flag, use only "error" (mutex protected)
2019-08-05 09:24:43 +02:00
Fredrik Noring
7363fe90bb
decoder/sidplay: Add "default_genre" option
...
Genres are not part of the SID format, so SID files are genreless. This
"default_genre" option may be used to assign a default genre to all SID
music, for example "SID", "C64", "Chiptune", etc.
2019-08-05 06:23:40 +02:00