Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package pianobar for openSUSE:Factory 
checked in at 2025-10-17 17:25:58
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/pianobar (Old)
 and      /work/SRC/openSUSE:Factory/.pianobar.new.18484 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "pianobar"

Fri Oct 17 17:25:58 2025 rev:9 rq:1311823 version:2024.12.21

Changes:
--------
--- /work/SRC/openSUSE:Factory/pianobar/pianobar.changes        2024-10-11 
17:03:41.202132770 +0200
+++ /work/SRC/openSUSE:Factory/.pianobar.new.18484/pianobar.changes     
2025-10-17 17:26:53.756806518 +0200
@@ -1,0 +2,10 @@
+Thu Oct 16 14:30:45 UTC 2025 - Luigi Baldoni <[email protected]>
+
+- Update to version 2024.12.21
+  * Improved network error retrying
+  * Improved compatibility with newer versions of ffmpeg and
+    libcurl
+  * Minor documentation fixes
+- Drop b11ba432.patch and 8bf4c1bb.patch (merged upstream)
+
+-------------------------------------------------------------------

Old:
----
  8bf4c1bb.patch
  b11ba432.patch
  pianobar-2022.04.01.tar.bz2

New:
----
  pianobar-2024.12.21.tar.bz2

----------(Old B)----------
  Old:  * Minor documentation fixes
- Drop b11ba432.patch and 8bf4c1bb.patch (merged upstream)
  Old:  * Minor documentation fixes
- Drop b11ba432.patch and 8bf4c1bb.patch (merged upstream)
----------(Old E)----------

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

Other differences:
------------------
++++++ pianobar.spec ++++++
--- /var/tmp/diff_new_pack.wsFOZ8/_old  2025-10-17 17:26:54.360831960 +0200
+++ /var/tmp/diff_new_pack.wsFOZ8/_new  2025-10-17 17:26:54.360831960 +0200
@@ -1,7 +1,7 @@
 #
 # spec file for package pianobar
 #
-# Copyright (c) 2024 SUSE LLC
+# Copyright (c) 2025 SUSE LLC and contributors
 # Copyright (c) 2016 Packman team: http://packman.links2linux.org/
 #
 # All modifications and additions to the file contributed by third parties
@@ -18,15 +18,13 @@
 
 
 Name:           pianobar
-Version:        2022.04.01
+Version:        2024.12.21
 Release:        0
 Summary:        Pandora Player
 License:        MIT
 Group:          Productivity/Multimedia/Sound/Utilities
 URL:            https://6xq.net/pianobar
-Source0:        %{url}/pianobar-2022.04.01.tar.bz2
-Patch0:         https://github.com/PromyLOPh/pianobar/commit/b11ba432.patch
-Patch1:         https://github.com/PromyLOPh/pianobar/commit/8bf4c1bb.patch
+Source0:        %{url}/pianobar-%{version}.tar.bz2
 BuildRequires:  libgcrypt-devel
 BuildRequires:  pkgconfig
 BuildRequires:  pkgconfig(ao)

++++++ pianobar-2022.04.01.tar.bz2 -> pianobar-2024.12.21.tar.bz2 ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pianobar-2022.04.01/.github/workflows/build.yml 
new/pianobar-2024.12.21/.github/workflows/build.yml
--- old/pianobar-2022.04.01/.github/workflows/build.yml 2022-04-01 
13:02:42.000000000 +0200
+++ new/pianobar-2024.12.21/.github/workflows/build.yml 2024-12-21 
12:41:13.000000000 +0100
@@ -9,7 +9,7 @@
 jobs:
   build:
 
-    runs-on: ubuntu-20.04
+    runs-on: ubuntu-latest
 
     steps:
     - uses: actions/checkout@v2
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pianobar-2022.04.01/ChangeLog 
new/pianobar-2024.12.21/ChangeLog
--- old/pianobar-2022.04.01/ChangeLog   2022-04-01 13:02:42.000000000 +0200
+++ new/pianobar-2024.12.21/ChangeLog   2024-12-21 12:41:13.000000000 +0100
@@ -1,3 +1,9 @@
+Release 2024.12.21
+
+- Improved network error retrying
+- Improved compatibility with newer versions of ffmpeg and libcurl
+- Minor documentation fixes
+
 Release 2022.04.01
 
 - Not a joke
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pianobar-2022.04.01/INSTALL 
new/pianobar-2024.12.21/INSTALL
--- old/pianobar-2022.04.01/INSTALL     2022-04-01 13:02:42.000000000 +0200
+++ new/pianobar-2024.12.21/INSTALL     2024-12-21 12:41:13.000000000 +0100
@@ -7,10 +7,10 @@
 - gmake
 - pthreads
 - libao
-- libcurl
+- libcurl>=7.32.0
 - gcrypt[1]
 - json-c
-- ffmpeg>=3.3 [2]
+- ffmpeg>=5.1 [2]
 - UTF-8 console/locale
 
 [1] with blowfish cipher enabled
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pianobar-2022.04.01/Makefile 
new/pianobar-2024.12.21/Makefile
--- old/pianobar-2022.04.01/Makefile    2022-04-01 13:02:42.000000000 +0200
+++ new/pianobar-2024.12.21/Makefile    2024-12-21 12:41:13.000000000 +0100
@@ -52,8 +52,8 @@
 LIBCURL_CFLAGS:=$(shell $(PKG_CONFIG) --cflags libcurl)
 LIBCURL_LDFLAGS:=$(shell $(PKG_CONFIG) --libs libcurl)
 
-LIBGCRYPT_CFLAGS:=
-LIBGCRYPT_LDFLAGS:=-lgcrypt
+LIBGCRYPT_CFLAGS:=$(shell $(PKG_CONFIG) --cflags libgcrypt)
+LIBGCRYPT_LDFLAGS:=$(shell $(PKG_CONFIG) --libs libgcrypt)
 
 LIBJSONC_CFLAGS:=$(shell $(PKG_CONFIG) --cflags json-c 2>/dev/null || 
$(PKG_CONFIG) --cflags json)
 LIBJSONC_LDFLAGS:=$(shell $(PKG_CONFIG) --libs json-c 2>/dev/null || 
$(PKG_CONFIG) --libs json)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pianobar-2022.04.01/README.rst 
new/pianobar-2024.12.21/README.rst
--- old/pianobar-2022.04.01/README.rst  2022-04-01 13:02:42.000000000 +0200
+++ new/pianobar-2024.12.21/README.rst  2024-12-21 12:41:13.000000000 +0100
@@ -33,10 +33,12 @@
 .. _homebrew: http://brew.sh/
 .. _native Windows Port: https://github.com/thedmd/pianobar-windows
 
-The current pianobar release is 2020.11.28_ (sha256__, sign__). More recent and
+The current pianobar release is 2024.12.21_ (sha256__, sign__). More recent and
 experimental code is available at GitHub_ and the local gitweb_. Older releases
 are available here:
 
+- 2022.04.01_ (sha256__, sign__)
+- 2020.11.28_ (sha256__, sign__)
 - 2020.04.05_ (sha256__, sign__)
 - 2019.02.14_ (sha256__, sign__)
 - 2019.01.25_ (sha256__, sign__)
@@ -66,6 +68,12 @@
 - 2010.10.07_ (sha1__)
 - 2010.08.21_ (sha1__)
 
+.. _2024.12.21: https://6xq.net/pianobar/pianobar-2024.12.21.tar.bz2
+__ https://6xq.net/pianobar/pianobar-2024.12.21.tar.bz2.sha256
+__ https://6xq.net/pianobar/pianobar-2024.12.21.tar.bz2.asc
+.. _2022.04.01: https://6xq.net/pianobar/pianobar-2022.04.01.tar.bz2
+__ https://6xq.net/pianobar/pianobar-2022.04.01.tar.bz2.sha256
+__ https://6xq.net/pianobar/pianobar-2022.04.01.tar.bz2.asc
 .. _2020.11.28: https://6xq.net/pianobar/pianobar-2020.11.28.tar.bz2
 __ https://6xq.net/pianobar/pianobar-2020.11.28.tar.bz2.sha256
 __ https://6xq.net/pianobar/pianobar-2020.11.28.tar.bz2.asc
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pianobar-2022.04.01/contrib/config-example 
new/pianobar-2024.12.21/contrib/config-example
--- old/pianobar-2022.04.01/contrib/config-example      2022-04-01 
13:02:42.000000000 +0200
+++ new/pianobar-2024.12.21/contrib/config-example      2024-12-21 
12:41:13.000000000 +0100
@@ -23,7 +23,6 @@
 #act_stationaddbygenre = g
 #act_songinfo = i
 #act_addshared = j
-#act_songmove = m
 #act_songnext = n
 #act_songpause = S
 #act_songpausetoggle = p
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pianobar-2022.04.01/contrib/pianobar.1 
new/pianobar-2024.12.21/contrib/pianobar.1
--- old/pianobar-2022.04.01/contrib/pianobar.1  2022-04-01 13:02:42.000000000 
+0200
+++ new/pianobar-2024.12.21/contrib/pianobar.1  2024-12-21 12:41:13.000000000 
+0100
@@ -103,10 +103,6 @@
 Delete artist/song seeds or feedback.
 
 .TP
-.B act_songmove = m
-Move current song to another station
-
-.TP
 .B act_songnext = n
 Skip current song.
 
@@ -449,13 +445,13 @@
 information like error code and description, was well as song information
 related to the current event, is supplied through stdin.
 
-Currently supported events are: artistbookmark, songban, songbookmark,
-songexplain, songfinish, songlove, songmove, songshelf, songstart,
+Currently supported events are: artistbookmark, settingschange, settingsget,
+songban, songbookmark, songexplain, songfinish, songlove, songshelf, songstart,
 stationaddgenre, stationaddmusic, stationaddshared, stationcreate,
 stationdelete, stationdeleteartistseed, stationdeletefeedback,
-stationdeletesongseed, stationfetchinfo, stationfetchplaylist,
-stationfetchgenre stationquickmixtoggle, stationrename, userlogin,
-usergetstations
+stationdeletesongseed, stationdeletestationseed, stationfetchgenre,
+stationfetchinfo, stationfetchplaylist, stationgetmodes, stationquickmixtoggle,
+stationrename, stationsetmode, usergetstations, userlogin
 
 An example script can be found in the contrib/ directory of
 .B pianobar's
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pianobar-2022.04.01/src/config.h 
new/pianobar-2024.12.21/src/config.h
--- old/pianobar-2022.04.01/src/config.h        2022-04-01 13:02:42.000000000 
+0200
+++ new/pianobar-2024.12.21/src/config.h        2024-12-21 12:41:13.000000000 
+0100
@@ -3,7 +3,7 @@
 /* package name */
 #define PACKAGE "pianobar"
 
-#define VERSION "2022.04.01"
+#define VERSION "2024.12.21"
 
 /* glibc feature test macros, define _before_ including other files */
 #define _POSIX_C_SOURCE 200809L
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pianobar-2022.04.01/src/libpiano/response.c 
new/pianobar-2024.12.21/src/libpiano/response.c
--- old/pianobar-2022.04.01/src/libpiano/response.c     2022-04-01 
13:02:42.000000000 +0200
+++ new/pianobar-2024.12.21/src/libpiano/response.c     2024-12-21 
12:41:13.000000000 +0100
@@ -206,7 +206,7 @@
                                break;
                        }
 
-                       for (int i = 0; i < json_object_array_length 
(stations); i++) {
+                       for (unsigned int i = 0; i < json_object_array_length 
(stations); i++) {
                                PianoStation_t *tmpStation;
                                json_object *s = json_object_array_get_idx 
(stations, i);
 
@@ -229,7 +229,7 @@
                        if (mix != NULL) {
                                PianoStation_t *curStation = ph->stations;
                                PianoListForeachP (curStation) {
-                                       for (int i = 0; i < 
json_object_array_length (mix); i++) {
+                                       for (unsigned int i = 0; i < 
json_object_array_length (mix); i++) {
                                                json_object *id = 
json_object_array_get_idx (mix, i);
                                                if (strcmp 
(json_object_get_string (id),
                                                                curStation->id) 
== 0) {
@@ -256,7 +256,7 @@
                        }
                        assert (items != NULL);
 
-                       for (int i = 0; i < json_object_array_length (items); 
i++) {
+                       for (unsigned int i = 0; i < json_object_array_length 
(items); i++) {
                                json_object *s = json_object_array_get_idx 
(items, i);
                                PianoSong_t *song;
 
@@ -377,7 +377,7 @@
                        /* get artists */
                        json_object *artists;
                        if (json_object_object_get_ex (result, "artists", 
&artists)) {
-                               for (int i = 0; i < json_object_array_length 
(artists); i++) {
+                               for (unsigned int i = 0; i < 
json_object_array_length (artists); i++) {
                                        json_object *a = 
json_object_array_get_idx (artists, i);
                                        PianoArtist_t *artist;
 
@@ -396,7 +396,7 @@
                        /* get songs */
                        json_object *songs;
                        if (json_object_object_get_ex (result, "songs", 
&songs)) {
-                               for (int i = 0; i < json_object_array_length 
(songs); i++) {
+                               for (unsigned int i = 0; i < 
json_object_array_length (songs); i++) {
                                        json_object *s = 
json_object_array_get_idx (songs, i);
                                        PianoSong_t *song;
 
@@ -456,7 +456,7 @@
                        /* get genre stations */
                        json_object *categories;
                        if (json_object_object_get_ex (result, "categories", 
&categories)) {
-                               for (int i = 0; i < json_object_array_length 
(categories); i++) {
+                               for (unsigned int i = 0; i < 
json_object_array_length (categories); i++) {
                                        json_object *c = 
json_object_array_get_idx (categories, i);
                                        PianoGenreCategory_t *tmpGenreCategory;
 
@@ -471,7 +471,7 @@
                                        /* get genre subnodes */
                                        json_object *stations;
                                        if (json_object_object_get_ex (c, 
"stations", &stations)) {
-                                               for (int k = 0;
+                                               for (unsigned int k = 0;
                                                                k < 
json_object_array_length (stations); k++) {
                                                        json_object *s =
                                                                        
json_object_array_get_idx (stations, k);
@@ -520,12 +520,13 @@
                        assert (reqData != NULL);
 
                        json_object *explanations;
-                       if (json_object_object_get_ex (result, "explanations", 
&explanations)) {
+                       if (json_object_object_get_ex (result, "explanations", 
&explanations) &&
+                                       json_object_array_length (explanations) 
> 0) {
                                reqData->retExplain = malloc (strSize *
                                                sizeof (*reqData->retExplain));
                                strncpy (reqData->retExplain, "We're playing 
this track "
                                                "because it features ", 
strSize);
-                               for (int i = 0; i < json_object_array_length 
(explanations); i++) {
+                               for (unsigned int i = 0; i < 
json_object_array_length (explanations); i++) {
                                        json_object *e = 
json_object_array_get_idx (explanations,
                                                        i);
                                        json_object *f;
@@ -573,7 +574,7 @@
                                /* songs */
                                json_object *songs;
                                if (json_object_object_get_ex (music, "songs", 
&songs)) {
-                                       for (int i = 0; i < 
json_object_array_length (songs); i++) {
+                                       for (unsigned int i = 0; i < 
json_object_array_length (songs); i++) {
                                                json_object *s = 
json_object_array_get_idx (songs, i);
                                                PianoSong_t *seedSong;
 
@@ -594,7 +595,7 @@
                                /* artists */
                                json_object *artists;
                                if (json_object_object_get_ex (music, 
"artists", &artists)) {
-                                       for (int i = 0; i < 
json_object_array_length (artists); i++) {
+                                       for (unsigned int i = 0; i < 
json_object_array_length (artists); i++) {
                                                json_object *a = 
json_object_array_get_idx (artists, i);
                                                PianoArtist_t *seedArtist;
 
@@ -622,7 +623,7 @@
                                                continue;
                                        }
                                        assert (json_object_is_type (val, 
json_type_array));
-                                       for (int i = 0; i < 
json_object_array_length (val); i++) {
+                                       for (unsigned int i = 0; i < 
json_object_array_length (val); i++) {
                                                json_object *s = 
json_object_array_get_idx (val, i);
                                                PianoSong_t *feedbackSong;
 
@@ -665,7 +666,7 @@
 
                        json_object *availableModes;
                        if (json_object_object_get_ex (result, 
"availableModes", &availableModes)) {
-                               for (int i = 0; i < json_object_array_length 
(availableModes); i++) {
+                               for (unsigned int i = 0; i < 
json_object_array_length (availableModes); i++) {
                                        json_object *val = 
json_object_array_get_idx (availableModes, i);
 
                                        assert (json_object_is_type (val, 
json_type_object));
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pianobar-2022.04.01/src/player.c 
new/pianobar-2024.12.21/src/player.c
--- old/pianobar-2022.04.01/src/player.c        2022-04-01 13:02:42.000000000 
+0200
+++ new/pianobar-2024.12.21/src/player.c        2024-12-21 12:41:13.000000000 
+0100
@@ -235,7 +235,7 @@
                softfail ("avcodec_parameters_to_context");
        }
 
-       AVCodec * const decoder = avcodec_find_decoder (cp->codec_id);
+       const AVCodec * const decoder = avcodec_find_decoder (cp->codec_id);
        if (decoder == NULL) {
                softfail ("find_decoder");
        }
@@ -282,11 +282,13 @@
        /* abuffer */
        AVRational time_base = player->st->time_base;
 
+       char channelLayout[128];
+       av_channel_layout_describe(&player->cctx->ch_layout, channelLayout, 
sizeof(channelLayout));
        snprintf (strbuf, sizeof (strbuf),
-                       
"time_base=%d/%d:sample_rate=%d:sample_fmt=%s:channel_layout=0x%"PRIx64, 
+                       
"time_base=%d/%d:sample_rate=%d:sample_fmt=%s:channel_layout=%s",
                        time_base.num, time_base.den, cp->sample_rate,
                        av_get_sample_fmt_name (player->cctx->sample_fmt),
-                       cp->channel_layout);
+                       channelLayout);
        if ((ret = avfilter_graph_create_filter (&player->fabuf,
                        avfilter_get_by_name ("abuffer"), "source", strbuf, 
NULL,
                        player->fgraph)) < 0) {
@@ -340,7 +342,7 @@
        memset (&aoFmt, 0, sizeof (aoFmt));
        aoFmt.bits = av_get_bytes_per_sample (avformat) * 8;
        assert (aoFmt.bits > 0);
-       aoFmt.channels = cp->channels;
+       aoFmt.channels = cp->ch_layout.nb_channels;
        aoFmt.rate = getSampleRate (player);
        aoFmt.byte_format = AO_FMT_NATIVE;
 
@@ -431,8 +433,12 @@
                        } else if (ret < 0) {
                                /* error, abort */
                                /* mark the EOF, so that BarAoPlayThread can 
quit*/
-                               debugPrint (DEBUG_AUDIO, "av_read_frame failed 
with code %i, sending "
-                                               "NULL frame\n", ret);
+                               char error[AV_ERROR_MAX_STRING_SIZE];
+                               if (av_strerror(ret, error, sizeof(error)) < 0) 
{
+                                       strncpy (error, "(unknown)", 
sizeof(error)-1);
+                               }
+                               debugPrint (DEBUG_AUDIO, "av_read_frame failed 
with code %i (%s), "
+                                               "sending NULL frame\n", ret, 
error);
                                pthread_mutex_lock (&player->aoplayLock);
                                const int rt = av_buffersrc_add_frame 
(player->fabuf, NULL);
                                assert (rt == 0);
@@ -508,7 +514,7 @@
                player->fgraph = NULL;
        }
        if (player->cctx != NULL) {
-               avcodec_close (player->cctx);
+               avcodec_free_context (&player->cctx);
                player->cctx = NULL;
        }
        if (player->fctx != NULL) {
@@ -533,7 +539,9 @@
                        if (openFilter (player) && openDevice (player)) {
                                changeMode (player, PLAYER_PLAYING);
                                BarPlayerSetVolume (player);
-                               retry = play (player) == AVERROR_INVALIDDATA &&
+                               const int ret = play (player);
+                               retry = (ret == AVERROR_INVALIDDATA ||
+                                                ret == -ECONNRESET) &&
                                                !player->interrupted;
                        } else {
                                /* filter missing or audio device busy */
@@ -583,8 +591,7 @@
                }
                pthread_mutex_unlock (&player->aoplayLock);
 
-               const int numChannels = av_get_channel_layout_nb_channels (
-                               filteredFrame->channel_layout);
+               const int numChannels = filteredFrame->ch_layout.nb_channels;
                const int bps = av_get_bytes_per_sample (filteredFrame->format);
                ao_play (player->aoDev, (char *) filteredFrame->data[0],
                                filteredFrame->nb_samples * numChannels * bps);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pianobar-2022.04.01/src/ui.c 
new/pianobar-2024.12.21/src/ui.c
--- old/pianobar-2022.04.01/src/ui.c    2022-04-01 13:02:42.000000000 +0200
+++ new/pianobar-2024.12.21/src/ui.c    2024-12-21 12:41:13.000000000 +0100
@@ -161,8 +161,8 @@
 
 /*     libcurl progress callback. aborts the current request if user pressed ^C
  */
-int progressCb (void * const data, double dltotal, double dlnow,
-               double ultotal, double ulnow) {
+int progressCb (void * const data, curl_off_t dltotal, curl_off_t dlnow,
+               curl_off_t ultotal, curl_off_t ulnow) {
        const sig_atomic_t lint = *((sig_atomic_t *) data);
        if (lint) {
                return 1;
@@ -224,8 +224,8 @@
        setAndCheck (CURLOPT_POSTFIELDS, req->postData);
        setAndCheck (CURLOPT_WRITEFUNCTION, httpFetchCb);
        setAndCheck (CURLOPT_WRITEDATA, &buffer);
-       setAndCheck (CURLOPT_PROGRESSFUNCTION, progressCb);
-       setAndCheck (CURLOPT_PROGRESSDATA, &lint);
+       setAndCheck (CURLOPT_XFERINFOFUNCTION, progressCb);
+       setAndCheck (CURLOPT_XFERINFODATA, &lint);
        setAndCheck (CURLOPT_NOPROGRESS, 0);
        setAndCheck (CURLOPT_POST, 1);
        setAndCheck (CURLOPT_TIMEOUT, settings->timeout);
@@ -844,6 +844,49 @@
        return i;
 }
 
+enum {
+       NO_DURATION = 0,
+};
+#define NO_POSTFIX ""
+
+/*     Print song information to the eventcmd stream
+ *     @param Event command stream.
+ *     @param Song information.
+ *     @param Printed key name postfix, use NO_POSTFIX to print bare keys.
+ *     @param Override song length from song parameter, use NO_DURATION if 
unavailable.
+ */
+static void BarUiEventcmdPrintSong (FILE * restrict stream,
+               const PianoSong_t * const song, const char * const postfix,
+               const unsigned int songDuration) {
+       assert (song != NULL);
+       assert (stream != NULL);
+       assert (postfix != NULL);
+
+       fprintf (stream,
+                       "artist%s=%s\n"
+                       "title%s=%s\n"
+                       "album%s=%s\n"
+                       "coverArt%s=%s\n"
+                       "rating%s=%i\n"
+                       "detailUrl%s=%s\n"
+                       "songDuration%s=%u\n",
+                       postfix,
+                       song->artist,
+                       postfix,
+                       song->title,
+                       postfix,
+                       song->album,
+                       postfix,
+                       song->coverArt,
+                       postfix,
+                       song->rating,
+                       postfix,
+                       song->detailUrl,
+                       postfix,
+                       songDuration == NO_DURATION ? song->length : 
songDuration
+                       );
+}
+
 /*     Excute external event handler
  *     @param settings containing the cmdline
  *     @param event type
@@ -900,36 +943,37 @@
                pthread_mutex_unlock (&player->lock);
 
                fprintf (pipeWriteFd,
-                               "artist=%s\n"
-                               "title=%s\n"
-                               "album=%s\n"
-                               "coverArt=%s\n"
                                "stationName=%s\n"
                                "songStationName=%s\n"
                                "pRet=%i\n"
                                "pRetStr=%s\n"
                                "wRet=%i\n"
                                "wRetStr=%s\n"
-                               "songDuration=%u\n"
-                               "songPlayed=%u\n"
-                               "rating=%i\n"
-                               "detailUrl=%s\n",
-                               curSong == NULL ? "" : curSong->artist,
-                               curSong == NULL ? "" : curSong->title,
-                               curSong == NULL ? "" : curSong->album,
-                               curSong == NULL ? "" : curSong->coverArt,
+                               "songPlayed=%u\n",
                                curStation == NULL ? "" : curStation->name,
                                songStation == NULL ? "" : songStation->name,
                                pRet,
                                PianoErrorToStr (pRet),
                                wRet,
                                curl_easy_strerror (wRet),
-                               songDuration,
-                               songPlayed,
-                               curSong == NULL ? PIANO_RATE_NONE : 
curSong->rating,
-                               curSong == NULL ? "" : curSong->detailUrl
+                               songPlayed
                                );
 
+               if (curSong != NULL) {
+                       BarUiEventcmdPrintSong (pipeWriteFd, curSong, 
NO_POSTFIX, songDuration);
+               }
+
+               const PianoSong_t *nextSong = PianoListNextP (curSong);
+               if (nextSong != NULL) {
+                       unsigned int i = 0;
+                       PianoListForeachP (nextSong) {
+                               char postfix[16];
+                               snprintf (postfix, sizeof(postfix)-1, "Next%i", 
i);
+                               BarUiEventcmdPrintSong (pipeWriteFd, nextSong, 
postfix, NO_DURATION);
+                               i++;
+                       }
+               }
+
                if (stations != NULL) {
                        /* send station list */
                        PianoStation_t **sortedStations = NULL;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pianobar-2022.04.01/src/ui_act.c 
new/pianobar-2024.12.21/src/ui_act.c
--- old/pianobar-2022.04.01/src/ui_act.c        2022-04-01 13:02:42.000000000 
+0200
+++ new/pianobar-2024.12.21/src/ui_act.c        2024-12-21 12:41:13.000000000 
+0100
@@ -271,8 +271,12 @@
 
        BarUiMsg (&app->settings, MSG_INFO, "Receiving explanation... ");
        if (BarUiActDefaultPianoCall (PIANO_REQUEST_EXPLAIN, &reqData)) {
-               BarUiMsg (&app->settings, MSG_INFO, "%s\n", reqData.retExplain);
-               free (reqData.retExplain);
+               if (reqData.retExplain == NULL) {
+                       BarUiMsg (&app->settings, MSG_ERR, "No explanation 
provided.\n");
+               } else {
+                       BarUiMsg (&app->settings, MSG_INFO, "%s\n", 
reqData.retExplain);
+                       free (reqData.retExplain);
+               }
        }
        BarUiActDefaultEventcmd ("songexplain");
 }

Reply via email to