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
This commit is contained in:
commit
c2a2573aa5
7
NEWS
7
NEWS
|
@ -49,17 +49,22 @@ ver 0.21 (not yet released)
|
||||||
* build with Meson instead of autotools
|
* build with Meson instead of autotools
|
||||||
* use GTest instead of cppunit
|
* use GTest instead of cppunit
|
||||||
|
|
||||||
ver 0.20.22 (not yet released)
|
ver 0.20.22 (2018/10/23)
|
||||||
* protocol
|
* protocol
|
||||||
- add tag fallbacks for AlbumArtistSort, ArtistSort
|
- add tag fallbacks for AlbumArtistSort, ArtistSort
|
||||||
|
- fix empty string filter on fallback tags
|
||||||
- "count group ..." can print an empty group
|
- "count group ..." can print an empty group
|
||||||
- fix broken command "list ... group"
|
- fix broken command "list ... group"
|
||||||
* storage
|
* storage
|
||||||
- curl: URL-encode paths
|
- curl: URL-encode paths
|
||||||
|
* decoder
|
||||||
|
- fluidsynth: adapt to API change in version 2.0
|
||||||
* Android
|
* Android
|
||||||
- now runs as a service
|
- now runs as a service
|
||||||
- add button to start/stop MPD
|
- add button to start/stop MPD
|
||||||
- add option to auto-start on boot
|
- add option to auto-start on boot
|
||||||
|
* work around clang bug leading to crash
|
||||||
|
* install the SVG icon
|
||||||
|
|
||||||
ver 0.20.21 (2018/08/17)
|
ver 0.20.21 (2018/08/17)
|
||||||
* database
|
* database
|
||||||
|
|
|
@ -133,13 +133,15 @@ class AndroidNdkToolchain:
|
||||||
libcxx_path = os.path.join(ndk_path, 'sources/cxx-stl/llvm-libc++')
|
libcxx_path = os.path.join(ndk_path, 'sources/cxx-stl/llvm-libc++')
|
||||||
libcxx_libs_path = os.path.join(libcxx_path, 'libs', android_abi)
|
libcxx_libs_path = os.path.join(libcxx_path, 'libs', android_abi)
|
||||||
|
|
||||||
libstdcxx_flags = '-stdlib=libc++'
|
libstdcxx_flags = ''
|
||||||
libstdcxx_cxxflags = libstdcxx_flags + ' -isystem ' + os.path.join(libcxx_path, 'include') + ' -isystem ' + os.path.join(ndk_path, 'sources/android/support/include')
|
libstdcxx_cxxflags = libstdcxx_flags + ' -isystem ' + os.path.join(libcxx_path, 'include') + ' -isystem ' + os.path.join(ndk_path, 'sources/android/support/include')
|
||||||
libstdcxx_ldflags = libstdcxx_flags + ' -static-libstdc++ -L' + libcxx_libs_path
|
libstdcxx_ldflags = libstdcxx_flags + ' -L' + libcxx_libs_path
|
||||||
|
libstdcxx_libs = '-lc++_static -lc++abi'
|
||||||
|
|
||||||
if use_cxx:
|
if use_cxx:
|
||||||
self.cxxflags += ' ' + libstdcxx_cxxflags
|
self.cxxflags += ' ' + libstdcxx_cxxflags
|
||||||
self.ldflags += ' ' + libstdcxx_ldflags
|
self.ldflags += ' ' + libstdcxx_ldflags
|
||||||
|
self.libs += ' ' + libstdcxx_libs
|
||||||
|
|
||||||
self.env = dict(os.environ)
|
self.env = dict(os.environ)
|
||||||
|
|
||||||
|
|
|
@ -64,7 +64,12 @@ fluidsynth_level_to_mpd(enum fluid_log_level level)
|
||||||
* logging library.
|
* logging library.
|
||||||
*/
|
*/
|
||||||
static void
|
static void
|
||||||
fluidsynth_mpd_log_function(int level, char *message, gcc_unused void *data)
|
fluidsynth_mpd_log_function(int level,
|
||||||
|
#if FLUIDSYNTH_VERSION_MAJOR >= 2
|
||||||
|
const
|
||||||
|
#endif
|
||||||
|
char *message,
|
||||||
|
void *)
|
||||||
{
|
{
|
||||||
Log(fluidsynth_domain,
|
Log(fluidsynth_domain,
|
||||||
fluidsynth_level_to_mpd(fluid_log_level(level)),
|
fluidsynth_level_to_mpd(fluid_log_level(level)),
|
||||||
|
|
|
@ -30,7 +30,15 @@
|
||||||
* exist? This function attempts to recognize exceptions thrown by
|
* exist? This function attempts to recognize exceptions thrown by
|
||||||
* various input plugins.
|
* various input plugins.
|
||||||
*/
|
*/
|
||||||
|
#ifndef __clang__
|
||||||
|
/* the "pure" attribute must be disabled because it triggers a clang
|
||||||
|
bug, wrongfully leading to std::terminate() even though the
|
||||||
|
function catches all exceptions thrown by std::rethrow_exception();
|
||||||
|
this can be reproduced with clang 7 from Android NDK r18b and on
|
||||||
|
clang 6 on FreeBSD
|
||||||
|
(https://github.com/MusicPlayerDaemon/MPD/issues/373) */
|
||||||
gcc_pure
|
gcc_pure
|
||||||
|
#endif
|
||||||
bool
|
bool
|
||||||
IsFileNotFound(std::exception_ptr e) noexcept;
|
IsFileNotFound(std::exception_ptr e) noexcept;
|
||||||
|
|
||||||
|
|
|
@ -54,15 +54,6 @@ TagSongFilter::MatchNN(const Tag &tag) const noexcept
|
||||||
}
|
}
|
||||||
|
|
||||||
if (type < TAG_NUM_OF_ITEM_TYPES && !visited_types[type]) {
|
if (type < TAG_NUM_OF_ITEM_TYPES && !visited_types[type]) {
|
||||||
/* If the search critieron was not visited during the
|
|
||||||
sweep through the song's tag, it means this field
|
|
||||||
is absent from the tag or empty. Thus, if the
|
|
||||||
searched string is also empty
|
|
||||||
then it's a match as well and we should return
|
|
||||||
true. */
|
|
||||||
if (filter.empty())
|
|
||||||
return true;
|
|
||||||
|
|
||||||
bool result = false;
|
bool result = false;
|
||||||
if (ApplyTagFallback(type,
|
if (ApplyTagFallback(type,
|
||||||
[&](TagType tag2) {
|
[&](TagType tag2) {
|
||||||
|
@ -80,6 +71,15 @@ TagSongFilter::MatchNN(const Tag &tag) const noexcept
|
||||||
return true;
|
return true;
|
||||||
}))
|
}))
|
||||||
return result;
|
return result;
|
||||||
|
|
||||||
|
/* If the search critieron was not visited during the
|
||||||
|
sweep through the song's tag, it means this field
|
||||||
|
is absent from the tag or empty. Thus, if the
|
||||||
|
searched string is also empty
|
||||||
|
then it's a match as well and we should return
|
||||||
|
true. */
|
||||||
|
if (filter.empty())
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
|
|
Loading…
Reference in New Issue