Max Kellermann
f5857c4689
net/SocketUtil: update API documentation
2018-10-30 19:56:10 +01:00
Max Kellermann
c97469283c
pcm: build dsd2pcm only if -Dtest=true
2018-10-30 13:31:43 +01:00
Max Kellermann
9b1f44e758
LogInit: work around two Android compiler warnings
2018-10-30 13:23:10 +01:00
Max Kellermann
804ccddf7e
pcm/Clamp: convert to `constexpr`
2018-10-30 00:08:25 +01:00
Max Kellermann
bb5918932b
pcm/PcmUtils: rename to Clamp.hxx
2018-10-30 00:05:58 +01:00
Max Kellermann
aa77bc323f
pcm/FloatConvert: make IntegerToFloatSampleConvert::Convert() constexpr
2018-10-29 23:52:25 +01:00
Max Kellermann
9b6a2589e5
Merge branch 'v0.20.x'
2018-10-29 23:06:32 +01:00
Max Kellermann
cc5fab28af
pcm/FloatConvert: fix compile-time integer overflow for S32
...
The compile-time calculation for `factor` overflows because `1<<31`
cannot be represented by `int`. By casting to `uintmax_t` first, we
can avoid this overflow.
Closes #380
2018-10-29 22:50:54 +01:00
Max Kellermann
a3f7127e72
pcm/FloatConvert: use FloatToIntegerSampleConvert::factor for IntegerToFloatSampleConvert::factor
2018-10-29 22:50:06 +01:00
Max Kellermann
b0a6a569df
pcm/FloatConvert: add `static_assert` on the factor
...
This assertion currently fails for S32 due to integer overflow (#380 ).
2018-10-29 22:38:32 +01:00
Max Kellermann
92523f8cf2
input/CdioParanoia: parse_cdio_uri() returns CdioUri
...
The `bool` return value isn't used anymore, so we can just return the
parsed object instead of passing it as an output parameter.
2018-10-29 14:34:33 +01:00
Max Kellermann
e33c08357a
input/CdioParanoia: rename struct cdio_uri to CdioUri
2018-10-29 14:34:30 +01:00
Max Kellermann
2dc5648e57
input/CdioParanoia: use StringAfterPrefixIgnoreCase()
2018-10-29 14:34:30 +01:00
Max Kellermann
d0349880da
util/StringCompare: add StringAfterPrefixIgnoreCase()
2018-10-29 14:34:29 +01:00
Max Kellermann
7aa1dceef6
player/Control: move IDLE_PLAYER to Player::SeekDecoder()
...
This emits the event even if PlayerControl::Play() is used to replay
the current song, which emits the missing "player" idle event.
Closes #381
2018-10-29 12:01:48 +01:00
Max Kellermann
f76544be4c
db/update: catch all exceptions
2018-10-29 11:05:50 +01:00
Max Kellermann
1e6c445320
configure.ac: add `-funwind-tables` to work around clang bug
...
Replaces the workaround from commit
751fff07fb
which fixed only one of many
crash locations.
See:
https://github.com/MusicPlayerDaemon/MPD/issues/373
https://github.com/android-ndk/ndk/issues/831
https://bugs.llvm.org/show_bug.cgi?id=32611
2018-10-29 11:05:35 +01:00
Max Kellermann
eeae9a04d3
input/Registry: add missing include
2018-10-25 09:21:13 +02:00
Max Kellermann
8bb35e7bb6
decoder/Thread: reimplement HasRemoteTagScanner() using the InputPlugin list
2018-10-25 09:09:21 +02:00
Max Kellermann
3e78c9ab48
input/Plugin: add attribute `prefixes`
2018-10-24 20:25:32 +02:00
Max Kellermann
9ec86acb9c
decoder/Thread: enable output tags for Tidal and Qobuz
...
Fixes formatted paths in the `recorder` output, closing #345 .
2018-10-24 16:38:26 +02:00
Max Kellermann
426bde3f75
decoder/Thread: move check to SongHasVolatileTags()
2018-10-24 16:32:41 +02:00
Max Kellermann
30e22b753b
tag/Chromaprint: OO wrapper for a ChromaprintContext
2018-10-24 10:52:45 +02:00
Max Kellermann
f7141c9201
decoder/Control: convert to class, make various attributes private
2018-10-24 10:47:34 +02:00
Max Kellermann
c2a2573aa5
release v0.20.22
...
-----BEGIN PGP SIGNATURE-----
iQJEBAABCgAuFiEEA5IzWngIOJSkMBxDI26KWMbbRRIFAlvPX+UQHG1heEBtdXNp
Y3BkLm9yZwAKCRAjbopYxttFElO8EACgPMaiN3m/x1hzJ3QTLzCXgeqSG1vuv1tC
F+sFISLPx/IoVjTpvd9H8jMt7lD+SYB620pAfNyLIGZpWcTxu1wmaviOghqCqnGP
sql0vtS9CrRGhsKDi5earox3zecylWJ3PRPXpy/4NjFuFUxE2ij/wbXzDb9UbtMg
1WnVL++fAlFj54CnPR35XHglYU+X7/bMWApkVUfsKBgyX9aghqLYUIm0jaUjj3Bs
xB/2Nemd1A88yrc4kqyzbFsN96S/W2eXhDYfPlDwFdplfoRJ8nrEMdwrsn0nabIF
7x+OsAGAfrz3e00TZdiDSaIy7VU4EFV9ctZVonoCGUluBHL0iG7G7bj2cnd+hVnZ
ecidfHMUqVO99elmUtWsUQwzbhL/TxM6Fzn2qDwqdwcCWDgHcn4fpXfsY0MRt6NK
cUhCyspMTuhqS3ohLO6RfiWDActm6QL2IHiDty/WAe1Td0VjOiRQMq7CADHlgn/D
IalN8kGyWHK5ew+3Iiw5zRoYjNXG4ALZN8cEqVh2R7i2uxh8+qm46HkhticAjfDM
4mETs3oAZdpOGCgv6Q0eY7tQDKB13DD/303NJaVFb6Iew2TZCWDbFz5HjqYShCZi
PgnPosdRg0LoQbMah4Uhsj6frs6LEBMpg6c7nScJN/1MoRaOyVNDg03X+rBmPe5z
XULvdsZ8Sw==
=8OQx
-----END PGP SIGNATURE-----
Merge tag 'v0.20.22'
release v0.20.22
2018-10-23 20:10:57 +02:00
Max Kellermann
751fff07fb
input/Error: work around clang bug leading to crash
...
Closes #373
2018-10-23 19:52:22 +02:00
Max Kellermann
005e691339
decoder/fluidsynth: adapt to API change in version 2.0
...
Closes #360
2018-10-23 18:44:28 +02:00
Max Kellermann
c26703b7e6
SongFilter: check value.empty() after checking tag fallbacks
...
In this new order, a filter 'AlbumArtist ""' matches only on songs
which neither have `AlbumArtist` nor `Artist`.
2018-10-22 18:34:47 +02:00
Max Kellermann
66ab2de578
Merge branch 'v0.20.x'
2018-10-22 18:20:29 +02:00
Max Kellermann
db27bb76e2
db: fix broken command "list ... group"
...
Grouping in the "list" command was completely broken from the start,
unlike "count group". I have no idea what I have been thinking when I
wrote commit ae178c77bd
, but it didn't
make any sense.
This commit is a rewrite of the feature.
For clients to be able to detect this feature, this commit also
increments the protocol version.
2018-10-22 13:08:24 +02:00
Max Kellermann
7cfe929c36
db/Count: print empty group if song without grouped tag exists
...
Be consistent with "list" responses.
2018-10-22 12:42:18 +02:00
Max Kellermann
6c06244e83
db/Count: move code to tag/VisitCallback.hxx
2018-10-22 11:50:51 +02:00
Max Kellermann
53448e4633
tag/Fallback: add tag fallbacks for AlbumArtistSort, ArtistSort
...
Just like AlbumArtist falls back to Artist, AlbumArtistSort should
fall back tom AlbumArtist, ArtistSort and finally Artist.
Closes #355
2018-10-22 10:52:42 +02:00
Max Kellermann
21adc78713
SongFilter: use ApplyTagFallback()
2018-10-22 10:46:26 +02:00
Max Kellermann
0340b01392
db/Count: use ApplyTagFallback()
2018-10-22 10:46:26 +02:00
Max Kellermann
94aed92e9a
tag/Set: move code to ApplyTagWithFallback()
2018-10-22 10:10:43 +02:00
Max Kellermann
6b9966e969
tag/Set: include cleanup
2018-10-22 10:09:56 +02:00
Max Kellermann
4bc5333995
tag/Set: use TagBuilder::AddItemUnchecked()
...
This improves the workaround from commit
b5ba94f1de
and actually gives a useful
result for "list" with a disabled tag.
2018-10-22 10:06:04 +02:00
Max Kellermann
ff58b8d255
tag/Builder: move code to AddItemUnchecked()
2018-10-22 10:03:47 +02:00
Max Kellermann
e28d1e0f65
decoder/mad: convert `Tag**` parameter to just `Tag*`
2018-10-22 09:44:54 +02:00
Max Kellermann
a491d8ae24
decoder/mad: use class UniqueId3Tag
2018-10-22 09:44:50 +02:00
Max Kellermann
3cd5dd15f8
decoder/mad: don't initialize xing::frames
2018-10-22 09:44:48 +02:00
Max Kellermann
562ae44d38
decoder/mad: remove unused attribute from `xing::magic`
2018-10-22 09:44:46 +02:00
Max Kellermann
92541dedc0
Merge branch 'master' of git://github.com/skidoo23/MPD
2018-10-22 09:44:36 +02:00
Max Kellermann
650a67dc38
decoder/mad: use mad_bit_skip() where appropriate
2018-10-19 20:24:16 +02:00
Max Kellermann
c63f24e58e
decoder/audiofile: larger stack buffer to reduce overhead
2018-10-19 20:04:28 +02:00
Max Kellermann
3be8b02cc2
decoder/sndfile: make `vio` constexpr
...
Use `const_cast` to be able to pass it to sf_open_virtual() which has
a wrong parameter declaration.
2018-10-19 19:51:17 +02:00
Max Kellermann
bdfaea0c25
decoder/mad: move parse_id3_mixramp() to src/tag/Id3ReplayGain.cxx
2018-10-19 19:45:32 +02:00
Max Kellermann
ed5c0d6546
tag/Id3Scan: make struct id3_tag pointers `const`
2018-10-19 19:43:03 +02:00
Max Kellermann
86dc621086
tag/Rva2: make struct id3_tag pointers `const`
2018-10-19 19:41:59 +02:00
skidoo23
fbea965c70
tag: new tag Label
2018-10-17 20:33:03 +02:00
Max Kellermann
eefc0f5d80
input/Error: add `noexcept`
2018-10-16 21:26:04 +02:00
skidoo23
69749eb591
decoder/sidplay: fix typo to avoid linker error with meson (libsidplayfp)
2018-10-16 14:56:40 +02:00
Max Kellermann
94592c1406
build with Meson instead of autotools
...
So long, autotools! This is my last MPD related project to migrate
away from it. It has its strengths, but also very obvious weaknesses
and weirdnesses. Today, many of its quirks are not needed anymore,
and are cumbersome and slow. Now welcome our new Meson overlords!
2018-10-14 23:41:38 +02:00
skidoo23
f80ebf68b0
decoder/wavpack: fix warning 'unused variable is_dsd' when compiled with --enable-dsd=no
2018-10-12 01:02:34 +02:00
Max Kellermann
1155a29096
Merge branch 'cdda_set_cdspeed' of git://github.com/andrewbasterfield/MPD
2018-10-08 21:16:52 +02:00
Max Kellermann
030e603940
decoder/gme: fix include
...
Broken since commit 08f77c2b60
2018-10-07 22:33:52 +02:00
Andrew Basterfield
9c1bf9ac5f
Remove some extraneous leftover debugging
2018-10-07 19:21:38 +01:00
Andrew Basterfield
2f07b8f482
Set cdrive speed hint for cdparanoia
2018-10-06 20:18:19 +01:00
Max Kellermann
6c40a27809
db/update/ExcludeList: fix variable name in #else block
2018-10-01 08:40:53 +02:00
Max Kellermann
8736a3533b
db/update/ExcludeList: add missing #ifdef
2018-10-01 08:40:15 +02:00
Max Kellermann
608d232373
util/SliceBuffer: re-add line which got lost in the last commit
2018-09-23 19:33:34 +02:00
Max Kellermann
1702e98fdf
util/SliceBuffer: move code to DiscardMemory()
2018-09-23 19:15:28 +02:00
Max Kellermann
2ec94c0497
player/Control: start thread on demand
...
Keep MPD's footprint small until playback is requested.
2018-09-23 17:32:34 +02:00
Max Kellermann
bf372e3e1f
player/Control: move public methods up
2018-09-23 17:28:41 +02:00
Max Kellermann
0d971963fd
player/Control: make several methods `private`
2018-09-23 17:27:42 +02:00
Max Kellermann
287cff40b9
player/Control: remove Lock(), Unlock()
2018-09-23 17:27:42 +02:00
Max Kellermann
0e0bc7976f
player/Control: add LockGetSyncInfo()
2018-09-23 17:17:57 +02:00
Max Kellermann
8c638c50a3
player/Thread: remove obsolete `buffered_before_play` attribute
2018-09-23 16:50:04 +02:00
Max Kellermann
5b2374b949
player/Thread: calculate `buffered_before_play` based on a fixed duration
...
Previously, there was the setting `buffered_before_play` which
specified a percentage of the audio buffer, defaulting to `10%`. That
was working well enough for quite some time, until high-quality audio
formats became common.
At 44.1 kHz, 16 bit stereo, MPD collected 2.3 seconds worth of data in
the buffer before starting playback. With the same default settings
and 192 kHz, 24 bit stereo, that was only 0.27 seconds.
Making this depend on the byte size only leads to high latency at low
quality, and too little data at high quality. The natural choice
would be to use a duration instead of a byte size, which should give
the same good experience with all audio formats.
Since the `buffered_before_play` configuration setting was not
understood well by users and caused more harm than good, this commit
deprecates it. It has now no effect.
2018-09-23 15:46:29 +02:00
Max Kellermann
c1600bcf3d
player/Thread: copy `buffered_before_play`
2018-09-23 15:46:27 +02:00
Max Kellermann
a82d864c91
config/File: print warning about deprecated options
2018-09-23 15:43:38 +02:00
Max Kellermann
dcac32a6c4
AudioFormat: add implicit cast to `duration::rep`
...
Fixes integer truncation bugs (closes #359 ).
2018-09-23 15:15:53 +02:00
Max Kellermann
5286477f73
Chrono: remove unnecessary `typedef rep`
...
It is already inherited by the base class, and we don't need to import
it explicitly.
2018-09-23 15:15:18 +02:00
Max Kellermann
2f3845ef51
player/Thread: remove `buffered_before_play` from `decoder_wakeup_threshold` formula
...
Simplify the formula, and I guess this makes the formula more
reliable. Imagine somebody configured `buffered_before_play` larger
than 25%; then the decoder would be woken up all the time. This
doesn't seem logical. On the other hand, it's easy to understand that
the decoder should be woken up below 75% buffer fill.
2018-09-23 15:00:47 +02:00
Max Kellermann
1191025bbf
player/Thread: add attribute `decoder_wakeup_threshold`
...
Calculate the value only once.
2018-09-22 19:56:00 +02:00
Max Kellermann
bfd261929e
AudioFormat: remove obsolete method GetTimeToSize()
2018-09-22 19:39:20 +02:00
Max Kellermann
84de88841b
player/CrossFade: use AudioFormat::SizeToTime() instead of GetTimeToSize()
2018-09-22 19:37:45 +02:00
Max Kellermann
224400074c
player/CrossFade: use std::chrono::duration
2018-09-22 19:37:02 +02:00
Max Kellermann
863722545f
player/CrossFade, ...: use lround()
2018-09-22 19:08:03 +02:00
Max Kellermann
d3d1d37782
AudioFormat: add TimeToSize(), SizeToTime()
2018-09-21 20:51:08 +02:00
Max Kellermann
1a2012a97e
player/Control: convert `total_play_time` to `FloatDuration`
2018-09-21 20:50:15 +02:00
Max Kellermann
90f4e97751
decoder/Client: use std::chrono::duration<double> instead of raw `double`
2018-09-21 20:42:34 +02:00
Max Kellermann
d1bcd98f79
Chrono: add FloatDuration
2018-09-21 20:42:30 +02:00
Max Kellermann
39542de69d
Chrono: add static method Cast()
2018-09-21 20:41:23 +02:00
Max Kellermann
1d00d55d53
player/Thread: stop buffering if buffer is full
...
Shouldn't ever happen, but who knows...
2018-09-21 19:05:25 +02:00
Max Kellermann
a190db0873
player/Thread: simplify loop condition
2018-09-21 18:58:38 +02:00
Max Kellermann
e3142312bb
player/Control: convert to class
2018-09-21 18:12:28 +02:00
Max Kellermann
e5d1ac0bd0
player/Thread: move functions into PlayerControl
2018-09-21 18:09:14 +02:00
Max Kellermann
c0411fa412
decoder/Thread: add `noexcept`
2018-09-21 17:58:34 +02:00
Max Kellermann
781e690012
player/Thread: catch and log initialization errors
2018-09-21 17:35:32 +02:00
Max Kellermann
9a2d71341e
player/Control: apply CamelCase to struct player_status
2018-09-21 17:22:35 +02:00
Max Kellermann
6db6d3c50c
player/Thread: move StartPlayerThread() into PlayerControl
2018-09-21 17:14:19 +02:00
Max Kellermann
0e2c597884
MusicBuffer: remove `noexcept` from constructor
...
The `SliceBuffer` constructor can throw.
2018-09-21 17:11:52 +02:00
Max Kellermann
debdf9bb96
decoder/{Thread,Control,...}: rename source files, drop prefix
2018-09-21 17:01:24 +02:00
Max Kellermann
218d9383d7
decoder/Thread: move decoder_thread_start() into DecoderControl
2018-09-21 16:57:54 +02:00
Max Kellermann
af64bd5088
Thread/Thread: disallow copying
2018-09-21 16:55:09 +02:00
Max Kellermann
050f81c4fe
Thread/Thread: document Start() exception
2018-09-21 16:53:52 +02:00
Max Kellermann
ab678787f4
java/Ref: API doc line breaks
2018-09-06 20:04:46 +02:00
Max Kellermann
23556585ca
java/Ref: add LocalRef::GetEnv()
2018-09-06 20:04:40 +02:00
Max Kellermann
728e4e9a38
util/StringCompare: add StringEndsWithIgnoreCase(), StringStartsWithIgnoreCase()
2018-09-06 19:52:43 +02:00
Max Kellermann
2d6f9f9a9c
Util/WStringAPI: non-Windows implementation of _wcs*cmp()
2018-09-06 19:49:45 +02:00
Max Kellermann
c2e2e5543e
util/WStringAPI: add wcscoll() wrapper
2018-09-06 19:39:28 +02:00
Max Kellermann
349d8eb248
util/WStringCompare: add "noexcept"
2018-09-06 19:35:09 +02:00
Max Kellermann
94b96bde9b
util/WStringCompare: wcpcpy() and wcsdup() are available on Android
2018-09-06 19:33:50 +02:00
Max Kellermann
45ffc864c5
util/StringCompare: add more function attributes
2018-09-06 19:23:13 +02:00
Max Kellermann
19d9ce260a
fs/io/FileOutputStream: disallow copying
2018-09-03 14:36:01 +02:00
Max Kellermann
0701333ec1
db/proxy: forward filter as expression to server
...
This adds support for the full set of MPD 0.21 filter types.
2018-09-02 22:39:45 +02:00
Max Kellermann
a8e70f0901
db/proxy: forward `sort` and `window` to server
2018-09-02 17:51:30 +02:00
Max Kellermann
c7c32a3ce9
db/Print: move sort/window emulation code to class DatabaseVisitorHelper
...
That way, each plugin can decide to implement it better.
2018-09-02 17:37:02 +02:00
Max Kellermann
94694e0f33
db/simple: pass DatabaseSelection to WalkMount()
...
This passes the new `sort` and `window` attributes to the mounted
database.
2018-09-02 17:13:35 +02:00
Max Kellermann
a73176a1e9
db/Helpers: fix include guard
2018-09-02 12:32:33 +02:00
Max Kellermann
e6a974a93e
db/Selection: add `sort` and `window`
...
Remove them as parameters from `db_selection_print()`.
2018-09-02 11:10:04 +02:00
Max Kellermann
9894967fcb
db/Selection: move `bool` attribute to the end
...
May allow a better memory layout.
2018-09-02 11:10:04 +02:00
Max Kellermann
92da483ecd
db/Selection: add `noexcept`
2018-09-02 11:10:04 +02:00
Max Kellermann
9cc960ac5e
db/proxy: require MPD 0.19
2018-09-02 11:07:32 +02:00
Max Kellermann
18dd082f1e
db/proxy: use ~0 instead of -1
...
No undefined behavior.
2018-09-02 11:06:08 +02:00
Max Kellermann
81b734be10
db/Interface: add "noexcept"
2018-09-02 10:20:48 +02:00
Max Kellermann
c59be7ced3
db/Interface: add more documentation about exceptions
2018-09-02 10:19:10 +02:00
Max Kellermann
c5c4d4a57e
db/proxy: forward the audio format
...
Requires libmpdclient 2.15.
2018-09-02 08:38:23 +02:00
Max Kellermann
2d0b429b6a
db/proxy: require libmpdclient 2.9
2018-09-02 08:21:11 +02:00
Max Kellermann
60620d9af5
db/Print: move variable `i`
2018-09-02 08:17:22 +02:00
Max Kellermann
15b2a4862e
protocol/RangeArg: add Contains()
2018-09-02 08:17:22 +02:00
Max Kellermann
2915d2dd0f
protocol/RangeArg: add IsAll()
2018-09-02 08:17:22 +02:00
Max Kellermann
590687fdea
protocol/RangeArg: eliminate SetAll()
2018-09-02 08:17:22 +02:00
Max Kellermann
993f8d6a5e
db/Print: pass RangeArg to db_selection_print()
2018-09-02 08:17:22 +02:00
Max Kellermann
68f824a186
protocol/ArgParser: move struct RangeArg to separate header
2018-09-02 08:17:22 +02:00
Max Kellermann
b9cca49e14
lib/dbus/ReadIter: switch off -Wshadow on GCC<8
...
GCC 6.3.0 emits bogus warnings like this:
In file included from src/lib/dbus/UDisks2.cxx:22:0:
src/lib/dbus/ReadIter.hxx: In instantiation of 'ODBus::ReadMessageIter::ForEachProperty(F&&)::<lambda(auto:2&&)> [with auto:2 = ODBus::ReadMessageIter; F = std::_Bind<void (*(std::reference_wrapper<UDisks2::Object>, std::_Placeholder<1>, std::_Placeholder<2>))(UDisks2::Object&, const char*, ODBus::ReadMessageIter&&) noexcept>]':
src/lib/dbus/ReadIter.hxx:102:6: required from 'ODBus::ReadMessageIter::ForEachRecurse(int, F&&)::<lambda(auto:1&&)> [with auto:1 = ODBus::ReadMessageIter&; F = ODBus::ReadMessageIter::ForEachProperty(F&&) [with F = std::_Bind<void (*(std::reference_wrapper<UDisks2::Object>, std::_Placeholder<1>, std::_Placeholder<2>))(UDisks2::Object&, const char*, ODBus::ReadMessageIter&&) noexcept>]::<lambda(auto:2&&)>]'
src/lib/dbus/ReadIter.hxx:92:5: required from 'void ODBus::ReadMessageIter::ForEach(int, F&&) [with F = ODBus::ReadMessageIter::ForEachRecurse(int, F&&) [with F = ODBus::ReadMessageIter::ForEachProperty(F&&) [with F = std::_Bind<void (*(std::reference_wrapper<UDisks2::Object>, std::_Placeholder<1>, std::_Placeholder<2>))(UDisks2::Object&, const char*, ODBus::ReadMessageIter&&) noexcept>]::<lambda(auto:2&&)>]::<lambda(auto:1&&)>]'
src/lib/dbus/ReadIter.hxx:101:3: required from 'void ODBus::ReadMessageIter::ForEachRecurse(int, F&&) [with F = ODBus::ReadMessageIter::ForEachProperty(F&&) [with F = std::_Bind<void (*(std::reference_wrapper<UDisks2::Object>, std::_Placeholder<1>, std::_Placeholder<2>))(UDisks2::Object&, const char*, ODBus::ReadMessageIter&&) noexcept>]::<lambda(auto:2&&)>]'
src/lib/dbus/ReadIter.hxx:114:3: required from 'void ODBus::ReadMessageIter::ForEachProperty(F&&) [with F = std::_Bind<void (*(std::reference_wrapper<UDisks2::Object>, std::_Placeholder<1>, std::_Placeholder<2>))(UDisks2::Object&, const char*, ODBus::ReadMessageIter&&) noexcept>]'
src/lib/dbus/UDisks2.cxx:71:30: required from here
src/lib/dbus/ReadIter.hxx:114:53: error: declaration of 'ODBus::ReadMessageIter&& i' shadows a parameter [-Werror=shadow]
ForEachRecurse(DBUS_TYPE_DICT_ENTRY, [&f](auto &&i){
^
src/lib/dbus/ReadIter.hxx:101:33: note: shadowed declaration is here
ForEach(arg_type, [&f](auto &&i){
^
2018-09-02 08:17:21 +02:00
Max Kellermann
931b571e3d
neighbor/udisks: add `this->` to work around GCC 6 bug
...
Since `this` was captured, it does not need to be specified, but GCC 6
can't do it. Since we want to support the standard compiler from
Debian Stretch (stable), we need to work around this problem:
src/neighbor/plugins/UdisksNeighborPlugin.cxx:239:12: error: cannot call member function 'void UdisksNeighborExplorer::Insert(UDisks2::Object&&)' without object
Insert(std::move(o));
~~~~~~^~~~~~~~~~~~~~
This fixes #300 which I previously thought was a different bug.
2018-09-02 08:12:51 +02:00
Max Kellermann
35eca08d48
java/*: add `noexcept`
2018-08-28 13:27:28 +02:00
Max Kellermann
7137ca375a
Merge branch 'v0.20.x'
2018-08-28 13:27:04 +02:00
Max Kellermann
282859a62a
java/String: include cleanup
2018-08-28 13:07:28 +02:00
Max Kellermann
fbeb5eefdc
java/Class: drop unnecessary namespace spec
2018-08-28 13:01:01 +02:00
Max Kellermann
85bada0505
java/Class: use DiscardException() in FindOptional()
...
Sometimes, the JVM returns a non-nullptr value with an exception
pending (seen on Android 1.6, maybe a Dalvik bug?). Let's catch all
such cases.
2018-08-28 13:00:08 +02:00
Max Kellermann
fe2f7a3e5a
configure.ac: add automake conditional "LINUX"
2018-08-22 16:09:40 +02:00
Max Kellermann
98eed1f5ab
system/EpollFD: use class UniqueFileDescriptor
2018-08-22 16:09:40 +02:00
Max Kellermann
5d0a463f09
system/{Epoll,Event,Signal}FD: relicense to BSD-2
2018-08-22 15:40:45 +02:00
Max Kellermann
dd461400fb
system/EPollFD: rename to EpollFD
2018-08-22 15:40:45 +02:00
Max Kellermann
b1390ec27f
system/UniqueFileDescriptor: make the "int" constructor public
2018-08-22 15:40:45 +02:00
Max Kellermann
dda5516eec
net/IPv6Address: pass reference to Cast()
2018-08-21 20:21:41 +02:00
Max Kellermann
adc5c5db88
net/IPv4Address: pass reference to Cast()
2018-08-21 20:16:57 +02:00
Max Kellermann
0642ce4795
fs/io/FileOutputStream: make linkat() mandatory on Linux
2018-08-21 19:02:03 +02:00
Max Kellermann
d11e1d5880
fs/io/FileOutputStream: add "noexcept"
2018-08-21 18:56:14 +02:00
Max Kellermann
b143477774
fs/io/BufferedReader: add "noexcept" to constructor
2018-08-21 18:52:57 +02:00
Max Kellermann
d092a88a93
system/Open: new UniqueFileDescriptor constructing library
2018-08-21 18:27:39 +02:00
Max Kellermann
ab7597b089
fs/io/FileReader: use class UniqueFileDescriptor
2018-08-21 18:26:36 +02:00
Max Kellermann
84df470008
fs/io/FileReader: use std::exchange()
2018-08-21 18:26:34 +02:00
Max Kellermann
5ca0b7a28f
fs/io/FileReader: add "noexcept"
2018-08-21 18:26:09 +02:00
Max Kellermann
21d621e7ad
fs/io/FileReader: simplify includes
2018-08-21 18:26:09 +02:00
Max Kellermann
d036e20826
system/FileDescriptor: add openat() wrapper
2018-08-21 18:15:37 +02:00
Max Kellermann
9151b84c25
net/AllocatedSocketAddress: convert operator== to template
2018-08-21 12:26:19 +02:00
Max Kellermann
5d7dd12f7a
net/SocketDescriptor: add multicast methods
2018-08-21 11:37:19 +02:00
Max Kellermann
21783ff5f7
net/SocketDescriptor: remove unnecessary SO_REUSEPORT check
2018-08-21 11:35:29 +02:00
Max Kellermann
fd923d5d96
net/SocketDescriptor: add Shutdown()
2018-08-21 11:31:58 +02:00
Max Kellermann
ebf607eef8
net/SocketDescriptor: fix SOCK_NONBLOCK flag in CreateSocketPairNonBlock()
2018-08-21 11:27:15 +02:00
Max Kellermann
e092eadd8d
net/SocketDescriptor: add "noexcept"
2018-08-21 11:08:34 +02:00
Max Kellermann
185148f57c
net/SocketAddress: add cast to size_type
2018-08-21 11:06:05 +02:00
Max Kellermann
ede7434901
net/SocketAddress: add GetSteadyPart()
2018-08-21 10:57:46 +02:00
Max Kellermann
ba3b422ce5
net/SocketDescriptor: make accept4() mandatory on Linux
2018-08-21 10:53:54 +02:00
Max Kellermann
1f3ce380ed
net/SocketAddress: reimplement GetPort() using IPv4Address::GetPort()
2018-08-21 10:49:55 +02:00
Max Kellermann
dfc1f6342a
net/SocketAddress: add IsV4Mapped()
2018-08-21 10:48:37 +02:00
Max Kellermann
94092f1f90
net/SocketAddress: reimplement IsV6Any() using IPv6Address::IsAny()
2018-08-21 10:46:20 +02:00
Max Kellermann
a84b83f20f
net/IPv6Address: new class
2018-08-21 10:39:54 +02:00
Max Kellermann
614e410fe7
net/Resolver: update copyright year
2018-08-21 10:30:24 +02:00
Max Kellermann
4a1e885c0a
net/Resolver: replace with more advanced implementation
...
The new implementation is copied from another project and is
BSD-licensed. It is exception-safe and can parse IPv6 scope ids with
interface names.
2018-08-21 08:26:12 +02:00
Max Kellermann
eee91aa4ea
util/Exception: update copyright
2018-08-21 08:20:52 +02:00
Max Kellermann
855750c784
util/{Const,Writable}Buffer: add method SetEnd()
2018-08-21 08:20:17 +02:00
Max Kellermann
4f2163e76c
system/FileDescriptor: include cleanup
2018-08-20 17:25:42 +02:00
Max Kellermann
eef66dee04
system/FileDescriptor: pass FileDescriptor to CheckDuplicate()
2018-08-20 17:23:14 +02:00
Max Kellermann
7ad440ca1c
net/SocketDescriptor: make eventfd() and signalfd() mandatory on Linux
2018-08-20 17:16:07 +02:00
Max Kellermann
13b3e9e7b3
system/FileDescriptor: make inotify_init1() mandatory on Linux
2018-08-20 17:12:50 +02:00
Max Kellermann
8106929d60
system/FileDescriptor: add pipe2() wrapper
2018-08-20 17:05:29 +02:00
Max Kellermann
795baed3f5
system/FileDescriptor: make pipe2() mandatory on Linux
2018-08-20 17:04:43 +02:00
Max Kellermann
5487d40be9
system/FileDescriptor: add operator!=
2018-08-20 16:49:14 +02:00
Max Kellermann
5e512763d3
system/UniqueFileDescriptor: make the base class public
2018-08-20 16:38:27 +02:00
Max Kellermann
a65d02d3ae
system/FileDescriptor: add "noexcept"
2018-08-20 16:34:47 +02:00
Max Kellermann
2156fc64f4
util/StringStrip: more API documentation
2018-08-20 16:30:46 +02:00
Max Kellermann
441440101d
util/StringStrip: add more "nonnull" attributes
2018-08-20 16:28:43 +02:00
Max Kellermann
ec54754e22
Compiler.h: move to util/
2018-08-20 16:19:17 +02:00
Max Kellermann
0ebba73cb8
net/SocketDescriptor: add method GetPeerCredentials()
2018-08-20 16:11:17 +02:00
Max Kellermann
50c7337965
net/SocketDescriptor: add GetType(), IsStream()
2018-08-20 16:06:58 +02:00
Max Kellermann
b5c569cd30
system/FileDescriptor: add IsPipe(), IsSocket()
2018-08-20 16:05:03 +02:00
Max Kellermann
11396d4fba
net/SocketAddress: add method GetLocalRaw()
2018-08-20 15:59:17 +02:00
Max Kellermann
4c6ae4e9e8
net/IPv4Address: add various helper methods
2018-08-20 15:57:13 +02:00
Max Kellermann
9cb9154b08
net/IPv4Address: add struct sockaddr_in constructor
2018-08-20 15:57:13 +02:00
Max Kellermann
234a6193bb
net/SocketAddress: make GetAddress() constexpr
2018-08-20 15:57:13 +02:00
Max Kellermann
2bf5f32224
net/IPv4Address: add API documentation
2018-08-20 15:50:25 +02:00
Max Kellermann
82d0f68acf
net/IPv4Address: add static method ConstructInAddrBE()
2018-08-20 15:48:52 +02:00
Max Kellermann
616c8383c0
net/IPv4Address: check _WIN32 instead of WIN32
2018-08-20 15:48:49 +02:00
Max Kellermann
5de46268af
net/IPv4Address: add "noexcept"
2018-08-20 15:43:35 +02:00
Max Kellermann
489e11072e
util/WritableBuffer: add ConstBuffer cast operator
2018-08-20 15:36:50 +02:00
Max Kellermann
5e2af15e94
util/Manual: add static method Cast()
2018-08-20 15:35:43 +02:00
Max Kellermann
3fbb54e0a4
util/IterableSplitString: use operator==(nullptr_t)
2018-08-20 15:35:09 +02:00
Max Kellermann
fe6de14faf
util/StringView: add ConstBuffer cast constructors
2018-08-20 15:34:07 +02:00
Max Kellermann
e85b9960f0
util/StringCompare: use StringAPI.hxx
2018-08-20 15:33:16 +02:00
Max Kellermann
75c836fbd9
util/StringAPI: use StringCompare() in StringIsEqual()
2018-08-20 15:31:09 +02:00
Max Kellermann
94b1025780
util/RuntimeError: fix typo
2018-08-20 15:22:24 +02:00
Max Kellermann
36ca9d01fb
util/ForeignFifoBuffer: shift the buffer in MoveFrom() on demand
...
The API documentation says "move as much data as possible", and if
there is room at the head of the buffer, we should use that if the
room after the tail is not large enough.
2018-08-20 15:21:05 +02:00
Max Kellermann
3bceed1b53
util/ForeignFifoBuffer: add "noexcept"
2018-08-20 14:53:39 +02:00
Max Kellermann
90de2c4bd6
util/Exception: move code to NestCurrentException()
2018-08-20 14:52:54 +02:00
Max Kellermann
9d63c8220b
util/Cast: reverse operands in ContainerAttributeOffset()
...
The result shall be positive.
2018-08-20 14:23:02 +02:00
Max Kellermann
edd9d16c84
util/Cast: move OffsetPointer() to OffsetPointer.hxx
2018-08-20 13:46:18 +02:00
Max Kellermann
ec373eba5d
util/BindMethod: add "noexcept"
2018-08-20 13:45:41 +02:00
Max Kellermann
0dfb27b7e5
util/StringAPI: stpcpy() was added in Bionic API level 21
2018-08-20 13:31:23 +02:00
Thomas Guillem
735f62be0c
storage/nfs: implement follow
2018-08-20 11:29:27 +02:00
Thomas Guillem
a04e01d5f5
lib/nfs/Connection: add Lstat
2018-08-20 11:29:11 +02:00
Max Kellermann
0b7d7fe069
Merge branch 'v0.20.x'
2018-08-20 11:27:56 +02:00
Thomas Guillem
9127afbf3f
lib/nfs/Connection: use nfs_stat64_async
...
Since nfs_stat_async is deprecated.
2018-08-20 10:51:24 +02:00
Max Kellermann
616abdda26
Merge branch 'v0.20.x'
2018-08-20 00:19:31 +02:00
Thomas Guillem
aff070bcbb
android: add LogListener
...
A Java object to send logs on the android side.
2018-08-19 23:32:24 +02:00
Max Kellermann
cc64c715a2
db/update/Service: Enqueue() throws on error
2018-08-19 23:15:52 +02:00
Max Kellermann
9999914c74
Main: throw exception instead of calling FatalError()
2018-08-19 23:13:29 +02:00
Max Kellermann
bd32a11016
config/Global: remove obsolete library
2018-08-19 23:08:41 +02:00
Max Kellermann
140aeea300
Main: allocate ConfigData on the stack
2018-08-19 23:08:23 +02:00
Max Kellermann
afd0fe666a
config/Global: move config_global_check() to Check.cxx
2018-08-19 23:01:30 +02:00
Max Kellermann
5f95c07305
config/Path: add InitPathParser()
...
Eliminate yet another access to the global ConfigData instance.
2018-08-19 22:29:39 +02:00
Max Kellermann
1a9659ef45
output/Init: pass global configuration in struct AudioOutputDefaults
2018-08-19 07:52:23 +02:00
Max Kellermann
aaa438e745
mixer/Type: mixer_type_parse() throws on error
2018-08-19 07:49:54 +02:00
Max Kellermann
4531e4cc55
filter/LoadChain: move code to class FilterFactory
...
Eliminate a use of GetGlobalConfig().
2018-08-18 20:57:02 +02:00
Joshua Wise
29f78b18b1
storage/plugins/CurlStorage: URL-encode paths in CurlStorage::MapUTF8
...
When using a database that was not created with a WebDAV music_directory
(i.e., if using a remote database, on which updates happen locally) and
using the Curl storage plugin, MPD would previously send GET requests that
had unescaped spaces in them. This change uses Curl's URL-encode API to
solve this.
2018-08-17 23:03:56 +02:00
Max Kellermann
147872fe97
lib/curl/Easy: add curl_easy_escape() wrapper
2018-08-17 23:02:49 +02:00
Max Kellermann
1ba35e1fd4
release v0.20.21
...
-----BEGIN PGP SIGNATURE-----
iQJEBAABCgAuFiEEA5IzWngIOJSkMBxDI26KWMbbRRIFAlt3CwMQHG1heEBtdXNp
Y3BkLm9yZwAKCRAjbopYxttFEiQcD/0S7NzE9nLsuTJJB9ElzOW17XiKkLKuDErQ
P1r46APwa0agqfHFTUM5a+ifMCFQ4QTh0p+MiImYniBKmTnuKYBxZJFgHYojrPOS
jxJbPJI6R7vLfo07kIem1jw/3YjqF4BDJyn9FYLBLgWz3IiFC/H4XH4XYxoQhTYL
Xv0aGMCnil6gD2ENvx4by3tqsM9l5ktvPwR6bktRw4ImhgT5zHShpuPYZekas1ic
+A1oCXFO4UrlZQ0sHdcG7Up8NOEJvAiNR5+BCnb9aR8l6M2Mzu2u715zSSWvTBI+
SCa8lE/gkndJC2Q3BmPRp+OcWU/uwVIkWdJdCF8DgN5vmk3cLRJ/SpHGkR1iYSvF
MUW8QF0tc2Xctv0NHYXlDj6wVVJ+OWNUcNy6SWHAT7o5S0ppB+2nesAfTVqqGK/Z
yRmcW5CvYNH8dfN7WBkLehN57dpI6O1YkfF30xCPcT+fu4oBYv7owU4MqFVcJN2r
FEbTZCfRFGjF7Kmb6aF+mFMhTnqYNEZjFS0SljLJWjlimLaSfgTXdEv23IpxIMnV
i+CEy7B2RseR31tmCekyWxdLnNJPYC4Zqwer8dd7yrY/exEM/6x9JQDUbCaGccar
NlwmCj6uDKXxU3tkb9Mk77oX51dFL58BtpoQw/DfXRWSX+UsAxFioyAbJ9juJUrM
JO9WMABo0Q==
=2zvn
-----END PGP SIGNATURE-----
Merge tag 'v0.20.21'
release v0.20.21
2018-08-17 20:02:27 +02:00
Max Kellermann
98efb4f6d5
android: raise minSdkVersion to 21
...
The number of MPD installs on Android < 5.0 is negligible, and that
API version introduces lots of useful features for MPD.
2018-08-17 19:01:37 +02:00
Max Kellermann
4ba3812baf
Merge branch 'fchmod_fix' of git://github.com/1848/MPD
2018-08-14 23:14:10 +02:00
1848
4797357fa9
fixed setting unix socket permissions
...
first call fchmod() to prevent TOCTTOU, then apply permissions using
chmod()
2018-08-14 22:53:19 +02:00
Max Kellermann
f6b3a88723
Merge branch 'master' of git://github.com/skidoo23/MPD
2018-08-14 19:02:37 +02:00
Max Kellermann
fcf487f4e0
playlist/cue: support file type declaration "FLAC" (non-standard)
...
According to http://wiki.hydrogenaud.io/index.php?title=Cue_sheet FLAC
files should use the "WAVE" file type, but I recently encountered CUE
files declared as "FLAC" which could not be read by MPD.
2018-08-13 08:18:18 +02:00
skidoo23
82e8913c05
decoder/sidplay: support basic and kernal rom (libsidplayfp)
2018-08-12 14:25:11 +02:00
Max Kellermann
c46483a4ab
tag/Config: support incremental "metadata_to_use" setting
...
With a "+" or "-" prefix, the "metadata_to_use" setting can manipulate
the existing default. This way, one can enable `TAG_COMMENT` without
having to list all the other tags.
2018-08-10 18:46:47 +02:00
Max Kellermann
0f19108ce3
tag/Config: use SplitString()
2018-08-10 18:46:16 +02:00
Max Kellermann
4208fe29b5
tag/Mask: add method Unset()
2018-08-10 18:46:15 +02:00
Max Kellermann
c1b33533da
event/ServerSocket: fix get_remote_uid() call
...
This call was broken since commit
9a5bcc6db0
because the
`UniqueSocketDescriptor` had already been moved.
2018-08-09 13:22:25 +02:00
Max Kellermann
66fcd25b7e
command/sticker, sticker/song: embed struct sticker_song_find_data in namespace
...
Fixes `-Werror=odr`
2018-08-09 12:57:47 +02:00
Max Kellermann
01d3777574
decoder/Thread, ...: log all exceptions
2018-08-09 11:14:40 +02:00
Max Kellermann
87570cdd9b
Merge branch 'HttpdOutputPlugin_socket' of git://github.com/1848/MPD
2018-08-08 16:57:24 +02:00
Max Kellermann
0ea6a2dd99
decoder/mpg123: remove obsolete const_cast hack
2018-08-07 22:52:38 +02:00
Max Kellermann
cacc1ffdad
decoder/mpg123: use AtScopeExit() to call mpg123_delete() during scan
2018-08-07 22:48:11 +02:00
Max Kellermann
cfe34647e1
decoder/mpg123: use AtScopeExit() to call mpg123_delete()
2018-08-07 22:29:51 +02:00
1848
737267cedc
Moved call to fchmod() on socket from OneServerSocket::Open() to socket_bind_listen()
2018-08-07 22:01:13 +02:00
1848
84054203af
Use fchmod instead of chmod for unix sockets to prevent TOCTTOU
2018-08-07 21:30:25 +02:00
1848
0c1a899fbe
Added unix socket support in HttpdOutputPlugin
2018-08-07 19:28:29 +02:00
1848
52521d02ea
Added a function for generic address parsing
...
Changed listen_add_config_param() to use generic address parsing
2018-08-07 19:18:33 +02:00
Yue Wang
2127a482da
Fix various bugs in OS X DSD playback
...
the most notable bugs are
1. osx_output_set_device_format should use the target asbd rather than AudioFormat. This is because asbd's sample rate calculation reflects the real dop target rate of the DAC, white AudioFormat's sample rate is the original DSD format rate.
2. the original code value the highest rate that's the multiple of the target rate. This cause DOP always have the wrong rate chosen. This is also not necessary for PCM playback --- MPD's goal is bit perfect, and it's meaningless to raise to two or four times the PCM sample rate.
3. if sample_rate cannot be synchronized, the test for falling back to PCM is wrong. If the file format is in DSD format such fallback is necessary, whatever the params.dop setting is.
2018-08-07 01:55:06 -07:00
Max Kellermann
7df0d3b7fc
event/SignalMonitor: make SignalMonitorFinish() noexcept
2018-08-06 12:01:46 +02:00
Max Kellermann
fdd101c4c5
event/SignalMonitor: add `noexcept`
2018-08-06 12:00:49 +02:00
Max Kellermann
4218f56f6c
system/SignalFD: add "noexcept"
2018-08-06 11:58:37 +02:00
Max Kellermann
dd18fe34a7
system/SignalFD: throw exception on error
2018-08-06 11:58:29 +02:00
Max Kellermann
5b09504a71
system/Event{FD,Pipe}: add "noexcept"
2018-08-06 11:57:40 +02:00
Max Kellermann
0c1a001622
system/Event{FD,Pipe}: throw exception on error
2018-08-06 11:49:38 +02:00
Max Kellermann
148c38fbb9
Main: use AtScopeExit() to delete the Instance
2018-08-06 11:42:46 +02:00
Max Kellermann
fbfefcc0a3
Main: call daemonize_finish() with AtScopeExit()
2018-08-06 10:47:06 +02:00
Max Kellermann
b4c517c501
song/AudioFormatFilter: add mask support
2018-08-02 21:34:29 +02:00
Max Kellermann
b39bc85e60
AudioFormat: add mask support to ToString()
2018-08-02 21:18:36 +02:00
Max Kellermann
603ce87ac2
AudioFormat: split the printf() calls in ToString()
...
Prepare for formatting masks.
2018-08-02 21:17:54 +02:00
Max Kellermann
4b16a8bf84
lib/icu: require at least version 50
2018-08-02 21:01:39 +02:00
Max Kellermann
ca4c81dd84
decoder/mikmod: require at least version 3.2
2018-08-02 20:45:14 +02:00
Max Kellermann
e9881bbfc8
configure.ac: detect libmikmod with pkg-config
2018-08-02 20:42:25 +02:00
Max Kellermann
69f4178bff
decoder/ffmpeg: require at least version 11.12
...
This is the version in Debian Jessie (oldstable).
2018-08-02 20:18:19 +02:00
Max Kellermann
027e562f65
song/OptimizeFilter: optimization stage for filters
2018-08-02 19:42:53 +02:00
Max Kellermann
e5e623ffaa
SongFilter: add class NotSongFilter
2018-08-02 19:22:55 +02:00
Max Kellermann
592d2ebd26
song/AudioFormatSongFilter: new filter type
2018-08-02 17:28:17 +02:00
Max Kellermann
299c809272
song/Filter: convert LOCATE_TAG_* macros to enum
2018-08-02 17:23:25 +02:00
Max Kellermann
d929d0c26f
song/Filter: move each class into a separate source
2018-08-02 13:54:36 +02:00
Max Kellermann
90201e9970
DetachedSong, db/LightSong, SongFilter: move to src/song/
2018-08-02 13:51:18 +02:00
Max Kellermann
a31da51fd9
lib/systemd/Watchdog: implement the systemd watchdog protocol
2018-08-02 11:15:35 +02:00
Max Kellermann
cf471e830f
Merge branch 'v0.20.x'
2018-08-02 11:07:40 +02:00
Max Kellermann
906972973e
case-insensitive URI scheme comparison
...
Required according to RFC 3986:
> An implementation should accept uppercase letters as equivalent to
> lowercase in scheme names
Closes #330
2018-08-02 11:01:45 +02:00
Max Kellermann
116edf5fce
util/ASCII: add StringStartsWithCaseASCII()
2018-08-02 10:42:28 +02:00
Max Kellermann
22192adbc8
lib/icu/Init: add class ScopeIcuInit
2018-08-02 10:17:31 +02:00
Max Kellermann
b8f3de693f
lib/icu/Init: add "noexcept"
2018-08-02 10:17:04 +02:00
Max Kellermann
68c023cdd8
config/Path: simplify expression
2018-08-02 09:43:48 +02:00
Max Kellermann
b18b0bf328
config/Path: remove unnecessary IsNull() check
...
`AllocatedPath::FromUTF8Throw()` will never return a nulled instance.
2018-08-02 09:43:17 +02:00
Max Kellermann
2a2c5d50ff
unix/PidFile: add "noexcept"
2018-08-01 20:27:56 +02:00
Max Kellermann
dfda0faac7
unix/{Daemon,PidFile}: throw exception on error
...
Don't use the bad `FatalError` library.
2018-08-01 20:20:29 +02:00
Max Kellermann
95acc4be07
Main: add "noexcept"
2018-08-01 20:16:40 +02:00
Max Kellermann
330a4cf573
Main: remove exception handler from mpd_main_after_fork()
...
Let MainOrThrow() forward it to mpd_main().
2018-08-01 20:15:54 +02:00
Max Kellermann
6ffbb151a0
Main: move log_deinit() call to mpd_main()
...
Deinitialize the logging library after the last exception handler,
because that one could still need it.
Use `AtScopeExit()` to ensure it's always called, even if an exception
was thrown.
2018-08-01 20:14:31 +02:00
Max Kellermann
271e49db5d
Main: move code to MainOrThrow(), leaving exception handler in mpd_main()
2018-08-01 20:13:27 +02:00
Max Kellermann
8d2101ccb4
Main: move libdbus cleanup to class ODBus::ScopeInit
2018-08-01 19:24:50 +02:00
Max Kellermann
7aa8497546
SongFilter: implement the AND operator
2018-07-30 10:19:31 +02:00
Max Kellermann
7a8d5070f5
Songfilter: move code to ExpectWord()
2018-07-30 10:18:42 +02:00
Max Kellermann
8707ae6fd4
Songfilter: allow redundant parantheses
2018-07-30 10:00:44 +02:00
Max Kellermann
8786b61636
SongFilter: make ParseExpression() static
2018-07-30 09:57:04 +02:00
Max Kellermann
1b5faf5cbf
SongFilter: move code from SongFilter to AndSongFilter
2018-07-29 18:39:47 +02:00
Yue Wang
1e88e71b9a
[OSXOutputPlugin] Fix a bug that the stream sample rate is missing
...
the code here tried to guard DSD features behind ENABLE_DSD. However, the sample rate setting should be shared between two scenarios.
40a1ebee29 (diff-ce7ecec9ea9ca3df90d9c290cb3ef9d4R795)
The code runs fine if the dac supports the sample rate, as Mac OS will use the device rate if stream rate is 0.
However, when DAC is uncapable of processing the sample rate, a wrong rate (device rate) will be used for the stream rate.
2018-07-28 00:06:56 -07:00
Max Kellermann
e16fd4a09b
input/qobuz: initialize the libgcrypt library
2018-07-26 18:26:46 +02:00
Max Kellermann
7db7568dcf
lib/gcrypt/MD5: move code to util/HexFormat.cxx
2018-07-26 17:46:56 +02:00
Max Kellermann
409d3c7136
lib/gcrypt/MD5: return a StringBuffer
2018-07-26 17:45:45 +02:00
Max Kellermann
7f81375861
lib/gcrypt/MD5: move code to Hash.hxx
2018-07-26 12:14:31 +02:00
Max Kellermann
0de39a431b
lib/gcrypt/MD5: relicense to BSD-2
2018-07-26 12:14:00 +02:00
Max Kellermann
1726278ccc
SongFilter: make several macros internal
2018-07-25 11:32:41 +02:00
Max Kellermann
8661a51aba
SongFilter: make locate_parse_type() static
2018-07-25 11:30:56 +02:00
Max Kellermann
42ec67168a
command/Database: don't use locate_parse_type()
2018-07-25 11:29:14 +02:00
Max Kellermann
91af2ebc2a
command/Database: move code to handle_list_file()
2018-07-25 11:27:12 +02:00
Max Kellermann
f7fb8a33d7
db/Print: pass TagType to PrintUniqueTags()
2018-07-25 11:21:47 +02:00
Max Kellermann
0505cb8f7e
db/Print: move code to PrintSongUris()
2018-07-25 11:18:45 +02:00
Max Kellermann
2cfccc1c34
SongFilter: make Item an interface
...
Prepare to allow more complex expressions.
2018-07-25 11:04:41 +02:00
Max Kellermann
438366effc
SongFilter: move code to class StringFilter
2018-07-25 11:04:41 +02:00
Max Kellermann
29d5ad667c
SongFilter: allow dash in tag name
...
Required for "modified-since".
2018-07-25 11:04:41 +02:00
Max Kellermann
235ddc0990
util/TimeISO8601: new utility library
2018-07-25 08:43:06 +02:00