Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package mpd for openSUSE:Factory checked in 
at 2021-06-27 18:59:23
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/mpd (Old)
 and      /work/SRC/openSUSE:Factory/.mpd.new.2625 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "mpd"

Sun Jun 27 18:59:23 2021 rev:32 rq:902616 version:0.22.9

Changes:
--------
--- /work/SRC/openSUSE:Factory/mpd/mpd.changes  2021-06-01 10:40:21.705109284 
+0200
+++ /work/SRC/openSUSE:Factory/.mpd.new.2625/mpd.changes        2021-06-27 
19:00:46.436409427 +0200
@@ -1,0 +2,11 @@
+Sun Jun 27 11:12:37 UTC 2021 - ???????? ???????????? <i...@ilya.pp.ua>
+
+- Updated to 0.22.9
+  * https://github.com/MusicPlayerDaemon/MPD/blob/v0.22.9/NEWS
+  * database: simple: load all .mpdignore files of all parent directories
+  * tags: fix: "readcomments" and "readpicture" on remote files with ID3 tags
+  * decoder: ffmpeg:
+    * support the tags "sort_album", "album-sort", "artist-sort"
+    * fix build failure with FFmpeg 3.4
+
+-------------------------------------------------------------------

Old:
----
  mpd-0.22.8.tar.xz
  mpd-0.22.8.tar.xz.sig

New:
----
  mpd-0.22.9.tar.xz
  mpd-0.22.9.tar.xz.sig

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ mpd.spec ++++++
--- /var/tmp/diff_new_pack.LY0Bu1/_old  2021-06-27 19:00:46.908410048 +0200
+++ /var/tmp/diff_new_pack.LY0Bu1/_new  2021-06-27 19:00:46.908410048 +0200
@@ -20,7 +20,7 @@
 %bcond_with    faad
 %bcond_without mpd_iso9660
 Name:           mpd
-Version:        0.22.8
+Version:        0.22.9
 Release:        0
 Summary:        Music Player Daemon
 License:        GPL-2.0-or-later

++++++ mpd-0.22.8.tar.xz -> mpd-0.22.9.tar.xz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/mpd-0.22.8/NEWS new/mpd-0.22.9/NEWS
--- old/mpd-0.22.8/NEWS 2021-05-22 17:33:36.000000000 +0200
+++ new/mpd-0.22.9/NEWS 2021-06-23 20:56:13.000000000 +0200
@@ -1,3 +1,16 @@
+ver 0.22.9 (2021/06/23)
+* database
+  - simple: load all .mpdignore files of all parent directories
+* tags
+  - fix "readcomments" and "readpicture" on remote files with ID3 tags
+* decoder
+  - ffmpeg: support the tags "sort_album", "album-sort", "artist-sort"
+  - ffmpeg: fix build failure with FFmpeg 3.4
+* Android
+  - fix auto-start on boot in Android 8 or later
+* Windows
+  - fix build failure with SQLite
+
 ver 0.22.8 (2021/05/22)
 * fix crash bug in "albumart" command (0.22.7 regression)
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/mpd-0.22.8/README.md new/mpd-0.22.9/README.md
--- old/mpd-0.22.8/README.md    2021-05-22 17:33:36.000000000 +0200
+++ new/mpd-0.22.9/README.md    2021-06-23 20:56:13.000000000 +0200
@@ -14,7 +14,7 @@
 
 - [Manual](http://www.musicpd.org/doc/user/)
 - [Forum](http://forum.musicpd.org/)
-- [IRC](irc://chat.freenode.net/#mpd)
+- [IRC](ircs://irc.libera.chat:6697/#mpd)
 - [Bug tracker](https://github.com/MusicPlayerDaemon/MPD/issues/)
 
 # Developers
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/mpd-0.22.8/android/AndroidManifest.xml 
new/mpd-0.22.9/android/AndroidManifest.xml
--- old/mpd-0.22.8/android/AndroidManifest.xml  2021-05-22 17:33:36.000000000 
+0200
+++ new/mpd-0.22.9/android/AndroidManifest.xml  2021-06-23 20:56:13.000000000 
+0200
@@ -2,8 +2,8 @@
 <manifest xmlns:android="http://schemas.android.com/apk/res/android";
           package="org.musicpd"
           android:installLocation="auto"
-          android:versionCode="56"
-          android:versionName="0.22.8">
+          android:versionCode="57"
+          android:versionName="0.22.9">
 
   <uses-sdk android:minSdkVersion="21" android:targetSdkVersion="29"/>
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/mpd-0.22.8/android/src/Main.java 
new/mpd-0.22.9/android/src/Main.java
--- old/mpd-0.22.8/android/src/Main.java        2021-05-22 17:33:36.000000000 
+0200
+++ new/mpd-0.22.9/android/src/Main.java        2021-06-23 20:56:13.000000000 
+0200
@@ -414,6 +414,15 @@
         * start Main service without any callback
         */
        public static void start(Context context, boolean wakelock) {
-               context.startService(new Intent(context, 
Main.class).putExtra("wakelock", wakelock));
+               Intent intent = new Intent(context, Main.class)
+                       .putExtra("wakelock", wakelock);
+
+               if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O)
+                       /* in Android 8+, we need to use this method
+                          or else we'll get "IllegalStateException:
+                          app is in background" */
+                       context.startForegroundService(intent);
+               else
+                       context.startService(intent);
        }
 }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/mpd-0.22.8/doc/conf.py new/mpd-0.22.9/doc/conf.py
--- old/mpd-0.22.8/doc/conf.py  2021-05-22 17:33:36.000000000 +0200
+++ new/mpd-0.22.9/doc/conf.py  2021-06-23 20:56:13.000000000 +0200
@@ -38,7 +38,7 @@
 # built documents.
 #
 # The short X.Y version.
-version = '0.22.8'
+version = '0.22.9'
 # The full version, including alpha/beta/rc tags.
 release = version
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/mpd-0.22.8/doc/plugins.rst 
new/mpd-0.22.9/doc/plugins.rst
--- old/mpd-0.22.8/doc/plugins.rst      2021-05-22 17:33:36.000000000 +0200
+++ new/mpd-0.22.9/doc/plugins.rst      2021-06-23 20:56:13.000000000 +0200
@@ -715,7 +715,7 @@
    * - Name
      - Description
    * - **type**
-     - The interpolator type. See below for a list of known types.
+     - The interpolator type. Defaults to :samp:`2`. See below for a list of 
known types.
 
 The following converter types are provided by libsamplerate:
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/mpd-0.22.8/doc/user.rst new/mpd-0.22.9/doc/user.rst
--- old/mpd-0.22.8/doc/user.rst 2021-05-22 17:33:36.000000000 +0200
+++ new/mpd-0.22.9/doc/user.rst 2021-06-23 20:56:13.000000000 +0200
@@ -55,7 +55,7 @@
 
 In any case, you need:
 
-* a C++17 compiler (e.g. GCC 8 or clang 5)
+* a C++17 compiler (e.g. GCC 8 or clang 7)
 * `Meson 0.49.0 <http://mesonbuild.com/>`__ and `Ninja
   <https://ninja-build.org/>`__
 * Boost 1.58
@@ -688,6 +688,8 @@
      - Specify the state file location. The parent directory must be writable 
by the :program:`MPD` user (+wx).
    * - **state_file_interval SECONDS**
      - Auto-save the state file this number of seconds after each state 
change. Defaults to 120 (2 minutes).
+   * - **restore_paused yes|no**
+     - If set to :samp:`yes`, then :program:`MPD` is put into pause mode 
instead of starting playback after startup. Default is :samp:`no`.
 
 The Sticker Database
 ^^^^^^^^^^^^^^^^^^^^
@@ -1120,7 +1122,7 @@
 Getting Help
 ^^^^^^^^^^^^
 
-The :program:`MPD` project runs a `forum <https://forum.musicpd.org/>`_ and an 
IRC channel (#mpd on Freenode) for requesting help. Visit the MPD help page for 
details on how to get help.
+The :program:`MPD` project runs a `forum <https://forum.musicpd.org/>`_ and an 
IRC channel (#mpd on Libera.Chat) for requesting help. Visit the MPD help page 
for details on how to get help.
 
 Common Problems
 ^^^^^^^^^^^^^^^
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/mpd-0.22.8/meson.build new/mpd-0.22.9/meson.build
--- old/mpd-0.22.8/meson.build  2021-05-22 17:33:36.000000000 +0200
+++ new/mpd-0.22.9/meson.build  2021-06-23 20:56:13.000000000 +0200
@@ -1,7 +1,7 @@
 project(
   'mpd',
   ['c', 'cpp'],
-  version: '0.22.8',
+  version: '0.22.9',
   meson_version: '>= 0.49.0',
   default_options: [
     'c_std=c11',
@@ -24,8 +24,8 @@
 
 if compiler.get_id() == 'gcc' and compiler.version().version_compare('<8')
   warning('Your GCC version is too old.  You need at least version 8.')
-elif compiler.get_id() == 'clang' and compiler.version().version_compare('<5')
-  warning('Your clang version is too old.  You need at least version 5.')
+elif compiler.get_id() == 'clang' and compiler.version().version_compare('<7')
+  warning('Your clang version is too old.  You need at least version 7.')
 endif
 
 version_conf = configuration_data()
@@ -42,57 +42,64 @@
   '-D_GNU_SOURCE',
 ]
 
-common_cflags = [
-]
-
-common_cxxflags = [
+test_global_common_flags = [
+  '-fvisibility=hidden',
 ]
 
 test_common_flags = [
   '-Wvla',
   '-Wdouble-promotion',
 
-  '-fvisibility=hidden',
-
   '-ffast-math',
   '-ftree-vectorize',
 ]
 
+test_global_cxxflags = test_global_common_flags + [
+]
+
+test_global_cflags = test_global_common_flags + [
+]
+
 test_cxxflags = test_common_flags + [
   '-fno-threadsafe-statics',
   '-fmerge-all-constants',
 
+  '-Wcast-qual',
+  '-Wcomma-subscript',
+  '-Wextra-semi',
+  '-Wmismatched-tags',
   '-Wmissing-declarations',
+  '-Woverloaded-virtual',
   '-Wshadow',
-  '-Wpointer-arith',
-  '-Wcast-qual',
+  '-Wsign-promo',
+  '-Wunused',
+  '-Wvolatile',
+  '-Wvirtual-inheritance',
   '-Wwrite-strings',
-  '-Wsign-compare',
+
+  # a vtable without a dtor is just fine
+  '-Wno-non-virtual-dtor',
+
+  # clang specific warning options:
   '-Wcomma',
-  '-Wextra-semi',
   '-Wheader-hygiene',
   '-Winconsistent-missing-destructor-override',
-  '-Wunreachable-code-break',
-  '-Wunused',
+  '-Wunreachable-code-aggressive',
   '-Wused-but-marked-unused',
-
-  '-Wno-non-virtual-dtor',
 ]
 
-if compiler.get_id() == 'clang'
-  # Workaround for clang bug
-  # https://bugs.llvm.org/show_bug.cgi?id=32611
-  test_cxxflags += '-funwind-tables'
+if compiler.get_id() != 'gcc' or compiler.version().version_compare('>=9')
+  # The GCC 8 implementation of this flag is buggy: it complains even
+  # if "final" is present, which implies "override".
+  test_cxxflags += '-Wsuggest-override'
 endif
 
 test_cflags = test_common_flags + [
+  '-Wcast-qual',
   '-Wmissing-prototypes',
   '-Wshadow',
-  '-Wpointer-arith',
   '-Wstrict-prototypes',
-  '-Wcast-qual',
   '-Wwrite-strings',
-  '-pedantic',
 ]
 
 test_ldflags = [
@@ -104,11 +111,11 @@
 ]
 
 if get_option('buildtype') != 'debug'
-  test_cxxflags += [
+  test_global_cxxflags += [
     '-ffunction-sections',
     '-fdata-sections',
   ]
-  test_cflags += [
+  test_global_cflags += [
     '-ffunction-sections',
     '-fdata-sections',
   ]
@@ -118,15 +125,20 @@
 endif
 
 if get_option('fuzzer')
-  fuzzer_flags = ['-fsanitize=fuzzer,address,undefined']
+  fuzzer_flags = ['-fsanitize=fuzzer']
+  if get_option('b_sanitize') == 'none'
+    fuzzer_flags += ['-fsanitize=address,undefined']
+  endif
   add_global_arguments(fuzzer_flags, language: 'cpp')
   add_global_arguments(fuzzer_flags, language: 'c')
   add_global_link_arguments(fuzzer_flags, language: 'cpp')
 endif
 
-add_global_arguments(common_cxxflags + 
compiler.get_supported_arguments(test_cxxflags), language: 'cpp')
-add_global_arguments(common_cflags + 
c_compiler.get_supported_arguments(test_cflags), language: 'c')
-add_global_link_arguments(compiler.get_supported_link_arguments(test_ldflags), 
language: 'cpp')
+add_global_arguments(compiler.get_supported_arguments(test_global_cxxflags), 
language: 'cpp')
+add_global_arguments(c_compiler.get_supported_arguments(test_global_cflags), 
language: 'c')
+add_project_arguments(compiler.get_supported_arguments(test_cxxflags), 
language: 'cpp')
+add_project_arguments(c_compiler.get_supported_arguments(test_cflags), 
language: 'c')
+add_project_link_arguments(compiler.get_supported_link_arguments(test_ldflags),
 language: 'cpp')
 
 is_linux = host_machine.system() == 'linux'
 is_android = get_option('android_ndk') != ''
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/mpd-0.22.8/python/build/project.py 
new/mpd-0.22.9/python/build/project.py
--- old/mpd-0.22.8/python/build/project.py      2021-05-22 17:33:36.000000000 
+0200
+++ new/mpd-0.22.9/python/build/project.py      2021-06-23 20:56:13.000000000 
+0200
@@ -20,7 +20,7 @@
             self.base = base
 
         if name is None or version is None:
-            m = re.match(r'^([-\w]+)-(\d[\d.]*[a-z]?[\d.]*(?:-alpha\d+)?)$', 
self.base)
+            m = 
re.match(r'^([-\w]+)-(\d[\d.]*[a-z]?[\d.]*(?:-alpha\d+)?)(\+.*)?$', self.base)
             if name is None: name = m.group(1)
             if version is None: version = m.group(2)
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/mpd-0.22.8/src/Main.cxx new/mpd-0.22.9/src/Main.cxx
--- old/mpd-0.22.8/src/Main.cxx 2021-05-22 17:33:36.000000000 +0200
+++ new/mpd-0.22.9/src/Main.cxx 2021-06-23 20:56:13.000000000 +0200
@@ -477,6 +477,7 @@
 #endif
 
        ZeroconfInit(raw_config, instance.event_loop);
+       AtScopeExit() { ZeroconfDeinit(); };
 
 #ifdef ENABLE_DATABASE
        if (create_db) {
@@ -537,9 +538,6 @@
                instance.state_file->Write();
 
        instance.BeginShutdownUpdate();
-
-       ZeroconfDeinit();
-
        instance.BeginShutdownPartitions();
 }
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/mpd-0.22.8/src/TagAny.cxx 
new/mpd-0.22.9/src/TagAny.cxx
--- old/mpd-0.22.8/src/TagAny.cxx       2021-05-22 17:33:36.000000000 +0200
+++ new/mpd-0.22.9/src/TagAny.cxx       2021-06-23 20:56:13.000000000 +0200
@@ -25,6 +25,7 @@
 #include "client/Client.hxx"
 #include "protocol/Ack.hxx"
 #include "fs/AllocatedPath.hxx"
+#include "input/InputStream.hxx"
 #include "util/Compiler.h"
 #include "util/UriExtract.hxx"
 #include "LocateUri.hxx"
@@ -32,8 +33,13 @@
 static void
 TagScanStream(const char *uri, TagHandler &handler)
 {
-       if (!tag_stream_scan(uri, handler))
+       Mutex mutex;
+
+       auto is = InputStream::OpenReady(uri, mutex);
+       if (!tag_stream_scan(*is, handler))
                throw ProtocolError(ACK_ERROR_NO_EXIST, "Failed to load file");
+
+       ScanGenericTags(*is, handler);
 }
 
 static void
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/mpd-0.22.8/src/db/plugins/ProxyDatabasePlugin.cxx 
new/mpd-0.22.9/src/db/plugins/ProxyDatabasePlugin.cxx
--- old/mpd-0.22.8/src/db/plugins/ProxyDatabasePlugin.cxx       2021-05-22 
17:33:36.000000000 +0200
+++ new/mpd-0.22.9/src/db/plugins/ProxyDatabasePlugin.cxx       2021-06-23 
20:56:13.000000000 +0200
@@ -424,6 +424,7 @@
        return mpd_search_add_group_tag(connection, tag);
 #else
        (void)connection;
+       (void)group;
 
        throw std::runtime_error("Grouping requires libmpdclient 2.12");
 #endif
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/mpd-0.22.8/src/db/update/Walk.cxx 
new/mpd-0.22.9/src/db/update/Walk.cxx
--- old/mpd-0.22.8/src/db/update/Walk.cxx       2021-05-22 17:33:36.000000000 
+0200
+++ new/mpd-0.22.9/src/db/update/Walk.cxx       2021-06-23 20:56:13.000000000 
+0200
@@ -312,6 +312,29 @@
 #endif
 }
 
+static void
+LoadExcludeListOrThrow(const Storage &storage, const Directory &directory,
+                      ExcludeList &exclude_list)
+{
+       Mutex mutex;
+       auto is = 
InputStream::OpenReady(storage.MapUTF8(PathTraitsUTF8::Build(directory.GetPath(),
+                                                                              
".mpdignore")).c_str(),
+                                        mutex);
+       exclude_list.Load(std::move(is));
+}
+
+static void
+LoadExcludeListOrLog(const Storage &storage, const Directory &directory,
+                    ExcludeList &exclude_list) noexcept
+{
+       try {
+               LoadExcludeListOrThrow(storage, directory, exclude_list);
+       } catch (...) {
+               if (!IsFileNotFound(std::current_exception()))
+                       LogError(std::current_exception());
+       }
+}
+
 bool
 UpdateWalk::UpdateDirectory(Directory &directory,
                            const ExcludeList &exclude_list,
@@ -331,17 +354,7 @@
        }
 
        ExcludeList child_exclude_list(exclude_list);
-
-       try {
-               Mutex mutex;
-               auto is = 
InputStream::OpenReady(storage.MapUTF8(PathTraitsUTF8::Build(directory.GetPath(),
-                                                                               
       ".mpdignore")).c_str(),
-                                                mutex);
-               child_exclude_list.Load(std::move(is));
-       } catch (...) {
-               if (!IsFileNotFound(std::current_exception()))
-                       LogError(std::current_exception());
-       }
+       LoadExcludeListOrLog(storage, directory, child_exclude_list);
 
        if (!child_exclude_list.IsEmpty())
                RemoveExcludedFromDirectory(directory, child_exclude_list);
@@ -445,6 +458,28 @@
        return directory;
 }
 
+static void
+LoadExcludeLists(std::forward_list<ExcludeList> &lists,
+                const Storage &storage, const Directory &directory) noexcept
+{
+       assert(!lists.empty());
+
+       if (!directory.IsRoot())
+               LoadExcludeLists(lists, storage, *directory.parent);
+
+       lists.emplace_front();
+       LoadExcludeListOrLog(storage, directory, lists.front());
+}
+
+static auto
+LoadExcludeLists(const Storage &storage, const Directory &directory) noexcept
+{
+       std::forward_list<ExcludeList> lists;
+       lists.emplace_front();
+       LoadExcludeLists(lists, storage, directory);
+       return lists;
+}
+
 inline void
 UpdateWalk::UpdateUri(Directory &root, const char *uri) noexcept
 try {
@@ -465,9 +500,8 @@
                return;
        }
 
-       ExcludeList exclude_list;
-
-       UpdateDirectoryChild(*parent, exclude_list, name, info);
+       const auto exclude_lists = LoadExcludeLists(storage, *parent);
+       UpdateDirectoryChild(*parent, exclude_lists.front(), name, info);
 } catch (...) {
        LogError(std::current_exception());
 }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/mpd-0.22.8/src/decoder/plugins/FfmpegDecoderPlugin.cxx 
new/mpd-0.22.9/src/decoder/plugins/FfmpegDecoderPlugin.cxx
--- old/mpd-0.22.8/src/decoder/plugins/FfmpegDecoderPlugin.cxx  2021-05-22 
17:33:36.000000000 +0200
+++ new/mpd-0.22.9/src/decoder/plugins/FfmpegDecoderPlugin.cxx  2021-06-23 
20:56:13.000000000 +0200
@@ -470,6 +470,7 @@
 #if LIBAVFORMAT_VERSION_INT >= AV_VERSION_INT(58, 6, 100)
        return (format_context.ctx_flags & AVFMTCTX_UNSEEKABLE) != 0;
 #else
+       (void)format_context;
        return false;
 #endif
 }
@@ -658,6 +659,8 @@
        return FfmpegScanStream(*f, handler);
 }
 
+#if LIBAVFORMAT_VERSION_INT >= AV_VERSION_INT(58, 9, 100)
+
 static void
 ffmpeg_uri_decode(DecoderClient &client, const char *uri)
 {
@@ -689,6 +692,8 @@
        return protocols;
 }
 
+#endif
+
 /**
  * A list of extensions found for the formats supported by ffmpeg.
  * This list is current as of 02-23-09; To find out if there are more
@@ -812,6 +817,8 @@
 constexpr DecoderPlugin ffmpeg_decoder_plugin =
        DecoderPlugin("ffmpeg", ffmpeg_decode, ffmpeg_scan_stream)
        .WithInit(ffmpeg_init, ffmpeg_finish)
+#if LIBAVFORMAT_VERSION_INT >= AV_VERSION_INT(58, 9, 100)
        .WithProtocols(ffmpeg_protocols, ffmpeg_uri_decode)
+#endif
        .WithSuffixes(ffmpeg_suffixes)
        .WithMimeTypes(ffmpeg_mime_types);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/mpd-0.22.8/src/decoder/plugins/FfmpegMetaData.cxx 
new/mpd-0.22.9/src/decoder/plugins/FfmpegMetaData.cxx
--- old/mpd-0.22.8/src/decoder/plugins/FfmpegMetaData.cxx       2021-05-22 
17:33:36.000000000 +0200
+++ new/mpd-0.22.9/src/decoder/plugins/FfmpegMetaData.cxx       2021-06-23 
20:56:13.000000000 +0200
@@ -30,11 +30,22 @@
 #include <libavutil/dict.h>
 }
 
+/**
+ * FFmpeg specific tag name mappings, as supported by
+ * libavformat/id3v2.c, libavformat/mov.c and others.
+ */
 static constexpr struct tag_table ffmpeg_tags[] = {
-       { "year", TAG_DATE },
-       { "author-sort", TAG_ARTIST_SORT },
+       /* from libavformat/id3v2.c, libavformat/mov.c */
        { "album_artist", TAG_ALBUM_ARTIST },
-       { "album_artist-sort", TAG_ALBUM_ARTIST_SORT },
+
+       /* from libavformat/id3v2.c */
+       { "album-sort", TAG_ALBUM_SORT },
+       { "artist-sort", TAG_ARTIST_SORT },
+
+       /* from libavformat/mov.c */
+       { "sort_album_artist", TAG_ALBUM_ARTIST_SORT },
+       { "sort_album", TAG_ALBUM_SORT },
+       { "sort_artist", TAG_ARTIST_SORT },
 
        /* sentinel */
        { nullptr, TAG_NUM_OF_ITEM_TYPES }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/mpd-0.22.8/src/decoder/plugins/MadDecoderPlugin.cxx 
new/mpd-0.22.9/src/decoder/plugins/MadDecoderPlugin.cxx
--- old/mpd-0.22.8/src/decoder/plugins/MadDecoderPlugin.cxx     2021-05-22 
17:33:36.000000000 +0200
+++ new/mpd-0.22.9/src/decoder/plugins/MadDecoderPlugin.cxx     2021-06-23 
20:56:13.000000000 +0200
@@ -889,8 +889,6 @@
 MadDecoder::HandleCurrentFrame() noexcept
 {
        switch (mute_frame) {
-               DecoderCommand cmd;
-
        case MadDecoderMuteFrame::SKIP:
                mute_frame = MadDecoderMuteFrame::NONE;
                break;
@@ -899,8 +897,8 @@
                        mute_frame = MadDecoderMuteFrame::NONE;
                UpdateTimerNextFrame();
                break;
-       case MadDecoderMuteFrame::NONE:
-               cmd = SynthAndSubmit();
+       case MadDecoderMuteFrame::NONE: {
+               const auto cmd = SynthAndSubmit();
                UpdateTimerNextFrame();
                if (cmd == DecoderCommand::SEEK) {
                        assert(input_stream.IsSeekable());
@@ -922,6 +920,7 @@
                } else if (cmd != DecoderCommand::NONE)
                        return false;
        }
+       }
 
        return true;
 }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/mpd-0.22.8/src/input/LastInputStream.cxx 
new/mpd-0.22.9/src/input/LastInputStream.cxx
--- old/mpd-0.22.8/src/input/LastInputStream.cxx        2021-05-22 
17:33:36.000000000 +0200
+++ new/mpd-0.22.9/src/input/LastInputStream.cxx        2021-06-23 
20:56:13.000000000 +0200
@@ -32,6 +32,7 @@
 void
 LastInputStream::Close() noexcept
 {
+       uri.clear();
        is.reset();
        close_timer.Cancel();
 }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/mpd-0.22.8/src/input/LastInputStream.hxx 
new/mpd-0.22.9/src/input/LastInputStream.hxx
--- old/mpd-0.22.8/src/input/LastInputStream.hxx        2021-05-22 
17:33:36.000000000 +0200
+++ new/mpd-0.22.9/src/input/LastInputStream.hxx        2021-06-23 
20:56:13.000000000 +0200
@@ -64,8 +64,7 @@
                        return is.get();
                }
 
-               is.reset();
-               close_timer.Cancel();
+               Close();
 
                is = open(new_uri, mutex);
                uri = std::forward<U>(new_uri);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/mpd-0.22.8/src/lib/sqlite/meson.build 
new/mpd-0.22.9/src/lib/sqlite/meson.build
--- old/mpd-0.22.8/src/lib/sqlite/meson.build   2021-05-22 17:33:36.000000000 
+0200
+++ new/mpd-0.22.9/src/lib/sqlite/meson.build   2021-06-23 20:56:13.000000000 
+0200
@@ -1,5 +1,7 @@
 if enable_database
-  sqlite_dep = dependency('sqlite3', version: '>= 3.7.3', required: 
get_option('sqlite'))
+  sqlite_dep = dependency('sqlite3', version: '>= 3.7.3',
+                          fallback: ['sqlite3', 'sqlite3_dep'],
+                          required: get_option('sqlite'))
 else
   sqlite_dep = dependency('', required: false)
 endif
@@ -21,4 +23,7 @@
 
 sqlite_dep = declare_dependency(
   link_with: sqlite,
+  dependencies: [
+    sqlite_dep,
+  ],
 )
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/mpd-0.22.8/src/sticker/Database.cxx 
new/mpd-0.22.9/src/sticker/Database.cxx
--- old/mpd-0.22.8/src/sticker/Database.cxx     2021-05-22 17:33:36.000000000 
+0200
+++ new/mpd-0.22.9/src/sticker/Database.cxx     2021-06-23 20:56:13.000000000 
+0200
@@ -21,6 +21,7 @@
 #include "Sticker.hxx"
 #include "lib/sqlite/Util.hxx"
 #include "fs/Path.hxx"
+#include "fs/NarrowPath.hxx"
 #include "Idle.hxx"
 #include "util/StringCompare.hxx"
 #include "util/ScopeExit.hxx"
@@ -82,7 +83,7 @@
        "";
 
 StickerDatabase::StickerDatabase(Path path)
-       :db(path.c_str())
+       :db(NarrowPath(path))
 {
        assert(!path.IsNull());
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/mpd-0.22.8/src/util/RuntimeError.hxx 
new/mpd-0.22.9/src/util/RuntimeError.hxx
--- old/mpd-0.22.8/src/util/RuntimeError.hxx    2021-05-22 17:33:36.000000000 
+0200
+++ new/mpd-0.22.9/src/util/RuntimeError.hxx    2021-06-23 20:56:13.000000000 
+0200
@@ -35,7 +35,7 @@
 
 #include <stdio.h>
 
-#ifdef __clang__
+#if defined(__clang__) || defined(__GNUC__)
 #pragma GCC diagnostic push
 // TODO: fix this warning properly
 #pragma GCC diagnostic ignored "-Wformat-security"
@@ -59,7 +59,7 @@
        return std::invalid_argument(buffer);
 }
 
-#ifdef __clang__
+#if defined(__clang__) || defined(__GNUC__)
 #pragma GCC diagnostic pop
 #endif
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/mpd-0.22.8/src/zeroconf/AvahiPoll.cxx 
new/mpd-0.22.9/src/zeroconf/AvahiPoll.cxx
--- old/mpd-0.22.8/src/zeroconf/AvahiPoll.cxx   2021-05-22 17:33:36.000000000 
+0200
+++ new/mpd-0.22.9/src/zeroconf/AvahiPoll.cxx   2021-06-23 20:56:13.000000000 
+0200
@@ -78,7 +78,7 @@
 };
 
 struct AvahiTimeout final {
-       TimerEvent timer;
+       TimerEvent event;
 
        const AvahiTimeoutCallback callback;
        void *const userdata;
@@ -87,17 +87,17 @@
        AvahiTimeout(const struct timeval *tv,
                     AvahiTimeoutCallback _callback, void *_userdata,
                     EventLoop &_loop)
-               :timer(_loop, BIND_THIS_METHOD(OnTimeout)),
+               :event(_loop, BIND_THIS_METHOD(OnTimeout)),
                 callback(_callback), userdata(_userdata) {
                if (tv != nullptr)
-                       timer.Schedule(ToSteadyClockDuration(*tv));
+                       Schedule(*tv);
        }
 
        static void TimeoutUpdate(AvahiTimeout *t, const struct timeval *tv) {
                if (tv != nullptr)
-                       t->timer.Schedule(ToSteadyClockDuration(*tv));
+                       t->Schedule(*tv);
                else
-                       t->timer.Cancel();
+                       t->event.Cancel();
        }
 
        static void TimeoutFree(AvahiTimeout *t) {
@@ -105,6 +105,30 @@
        }
 
 private:
+       [[gnu::pure]]
+       Event::Duration AbsoluteToDuration(const struct timeval &tv) noexcept {
+               if (tv.tv_sec == 0)
+                       /* schedule immediately */
+                       return {};
+
+               struct timeval now;
+               if (gettimeofday(&now, nullptr) < 0)
+                       /* shouldn't ever fail, but if it does, do
+                          something reasonable */
+                       return std::chrono::seconds(1);
+
+               auto d = ToSteadyClockDuration(tv)
+                       - ToSteadyClockDuration(now);
+               if (d.count() < 0)
+                       return {};
+
+               return d;
+       }
+
+       void Schedule(const struct timeval &tv) noexcept {
+               event.Schedule(AbsoluteToDuration(tv));
+       }
+
        void OnTimeout() noexcept {
                callback(this, userdata);
        }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/mpd-0.22.8/src/zeroconf/ZeroconfAvahi.cxx 
new/mpd-0.22.9/src/zeroconf/ZeroconfAvahi.cxx
--- old/mpd-0.22.8/src/zeroconf/ZeroconfAvahi.cxx       2021-05-22 
17:33:36.000000000 +0200
+++ new/mpd-0.22.9/src/zeroconf/ZeroconfAvahi.cxx       2021-06-23 
20:56:13.000000000 +0200
@@ -157,8 +157,6 @@
        FormatDebug(avahi_domain, "Client changed to state %d", state);
 
        switch (state) {
-               int reason;
-
        case AVAHI_CLIENT_S_RUNNING:
                LogDebug(avahi_domain, "Client is RUNNING");
 
@@ -169,8 +167,8 @@
                break;
 
        case AVAHI_CLIENT_FAILURE:
-               reason = avahi_client_errno(c);
-               if (reason == AVAHI_ERR_DISCONNECTED) {
+               if (int reason = avahi_client_errno(c);
+                   reason == AVAHI_ERR_DISCONNECTED) {
                        LogNotice(avahi_domain,
                                  "Client Disconnected, will reconnect 
shortly");
                        if (avahi_group != nullptr) {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/mpd-0.22.8/subprojects/.gitignore 
new/mpd-0.22.9/subprojects/.gitignore
--- old/mpd-0.22.8/subprojects/.gitignore       2021-05-22 17:33:36.000000000 
+0200
+++ new/mpd-0.22.9/subprojects/.gitignore       2021-06-23 20:56:13.000000000 
+0200
@@ -1,3 +1,4 @@
 /packagecache/
 
 /googletest-*/
+/sqlite-*/
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/mpd-0.22.8/subprojects/sqlite3.wrap 
new/mpd-0.22.9/subprojects/sqlite3.wrap
--- old/mpd-0.22.8/subprojects/sqlite3.wrap     1970-01-01 01:00:00.000000000 
+0100
+++ new/mpd-0.22.9/subprojects/sqlite3.wrap     2021-06-23 20:56:13.000000000 
+0200
@@ -0,0 +1,12 @@
+[wrap-file]
+directory = sqlite-amalgamation-3340100
+source_url = https://www.sqlite.org/2021/sqlite-amalgamation-3340100.zip
+source_filename = sqlite-amalgamation-3340100.zip
+source_hash = e0b1c0345fe4338b936e17da8e1bd88366cd210e576834546977f040c12a8f68
+patch_url = https://wrapdb.mesonbuild.com/v1/projects/sqlite3/3.34.1/1/get_zip
+patch_filename = sqlite3-3.34.1-1-wrap.zip
+patch_hash = cba9e47bdb4c02f88fadaae8deab357218d32562c6b86ce7ba0c72f107044360
+
+[provide]
+sqlite3 = sqlite3_dep
+

Reply via email to