From 4cef9b669be9e01435b050309826b1c6af2f4e6b Mon Sep 17 00:00:00 2001 From: Pacho Ramos Date: Sun, 24 Jun 2018 13:53:24 +0200 Subject: media-sound/rhythmbox: Fix building with latest gstreamer (#658750) Package-Manager: Portage-2.3.40, Repoman-2.3.9 --- .../files/rhythmbox-3.4.2-gstreamer-1.14.patch | 455 +++++++++++++++++++++ media-sound/rhythmbox/rhythmbox-3.4.2.ebuild | 4 + 2 files changed, 459 insertions(+) create mode 100644 media-sound/rhythmbox/files/rhythmbox-3.4.2-gstreamer-1.14.patch (limited to 'media-sound/rhythmbox') diff --git a/media-sound/rhythmbox/files/rhythmbox-3.4.2-gstreamer-1.14.patch b/media-sound/rhythmbox/files/rhythmbox-3.4.2-gstreamer-1.14.patch new file mode 100644 index 000000000000..86ed17ba98ea --- /dev/null +++ b/media-sound/rhythmbox/files/rhythmbox-3.4.2-gstreamer-1.14.patch @@ -0,0 +1,455 @@ +From 36a648db0af05be579190d98c96cfb6b7bcc6ebd Mon Sep 17 00:00:00 2001 +From: Bastien Nocera +Date: Mon, 9 Oct 2017 13:11:47 +0200 +Subject: [PATCH 01/12] fmradio: Fix build with GStreamer master + +The plugin description is not supposed to be a string constant, but an +unescaped string, to be concatenated with function names. + +This used to be acceptable (though would have warned), but breaks with +the GStreamer 1.13 development branch. + +rb-fm-radio-gst-src.c:181:6: error: pasting ""rbsilencesrc"" and "_get_desc" does not give a valid preprocessing token + "rbsilencesrc", + ^ + +https://bugzilla.gnome.org/show_bug.cgi?id=788706 +--- + plugins/fmradio/rb-fm-radio-gst-src.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/plugins/fmradio/rb-fm-radio-gst-src.c b/plugins/fmradio/rb-fm-radio-gst-src.c +index 09d709c28..88abdaf35 100644 +--- a/plugins/fmradio/rb-fm-radio-gst-src.c ++++ b/plugins/fmradio/rb-fm-radio-gst-src.c +@@ -178,7 +178,7 @@ plugin_init (GstPlugin *plugin) + + GST_PLUGIN_DEFINE (GST_VERSION_MAJOR, + GST_VERSION_MINOR, +- "rbsilencesrc", ++ rbsilencesrc, + "element to output silence", + plugin_init, + VERSION, +-- +2.17.0 + + +From 355e3c40efe47f6f90d12afb6590caf85db62487 Mon Sep 17 00:00:00 2001 +From: Bastien Nocera +Date: Mon, 24 Apr 2017 16:21:41 +0200 +Subject: [PATCH 02/12] mmkeys: media-player-keys: Fix usage to match API + documentation + +See https://bugzilla.gnome.org/show_bug.cgi?id=781326 + +https://bugzilla.gnome.org/show_bug.cgi?id=781664 +--- + plugins/mmkeys/rb-mmkeys-plugin.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/plugins/mmkeys/rb-mmkeys-plugin.c b/plugins/mmkeys/rb-mmkeys-plugin.c +index 46431584f..058b82f0e 100644 +--- a/plugins/mmkeys/rb-mmkeys-plugin.c ++++ b/plugins/mmkeys/rb-mmkeys-plugin.c +@@ -385,7 +385,7 @@ impl_activate (PeasActivatable *pplugin) + plugin->proxy = g_dbus_proxy_new_sync (bus, + G_DBUS_PROXY_FLAGS_NONE, + NULL, +- "org.gnome.SettingsDaemon", ++ "org.gnome.SettingsDaemon.MediaKeys", + "/org/gnome/SettingsDaemon/MediaKeys", + "org.gnome.SettingsDaemon.MediaKeys", + NULL, +-- +2.17.0 + + +From 19d604093667139c6660d9452b4037a761bf75e0 Mon Sep 17 00:00:00 2001 +From: gkrithi8 +Date: Thu, 26 Oct 2017 02:27:38 +0530 +Subject: [PATCH 03/12] brasero-disc-recorder: Fix invalid object reference + warnings + +https://bugzilla.gnome.org/show_bug.cgi?id=789494 +--- + plugins/brasero-disc-recorder/rb-disc-recorder-plugin.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/plugins/brasero-disc-recorder/rb-disc-recorder-plugin.c b/plugins/brasero-disc-recorder/rb-disc-recorder-plugin.c +index 8608e84fd..a89d87a70 100644 +--- a/plugins/brasero-disc-recorder/rb-disc-recorder-plugin.c ++++ b/plugins/brasero-disc-recorder/rb-disc-recorder-plugin.c +@@ -558,7 +558,7 @@ update_source (RBDiscRecorderPlugin *pi, + RBDisplayPage *selected_page; + const char *page_type; + +- if (pi->selected_page != NULL && RB_IS_SOURCE (pi->selected_page)) { ++ if (pi->selected_page != NULL && RB_IS_PLAYLIST_SOURCE (pi->selected_page)) { + RhythmDBQueryModel *model; + + g_object_get (pi->selected_page, "query-model", &model, NULL); +-- +2.17.0 + + +From 00970203e760f9ae43c31087706bd31b2b395dcb Mon Sep 17 00:00:00 2001 +From: gkrithi8 +Date: Mon, 30 Oct 2017 02:25:09 +0530 +Subject: [PATCH 04/12] song-info: fix the signal name used for entry deletion + +https://bugzilla.gnome.org/show_bug.cgi?id=789632 +--- + widgets/rb-song-info.c | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +diff --git a/widgets/rb-song-info.c b/widgets/rb-song-info.c +index 54810e0b7..202f3d36e 100644 +--- a/widgets/rb-song-info.c ++++ b/widgets/rb-song-info.c +@@ -733,6 +733,7 @@ rb_song_info_set_source_internal (RBSongInfo *song_info, + + g_object_get (G_OBJECT (song_info->priv->query_model), "db", &song_info->priv->db, NULL); + ++ rb_song_info_query_model_changed_cb (G_OBJECT (song_info->priv->source), NULL, song_info); + rb_song_info_base_query_model_changed_cb (G_OBJECT (song_info->priv->source), NULL, song_info); + } + +@@ -1514,7 +1515,7 @@ rb_song_info_query_model_changed_cb (GObject *source, + "row-changed", G_CALLBACK (rb_song_info_query_model_inserted_cb), + song_info, 0); + g_signal_connect_object (G_OBJECT (song_info->priv->query_model), +- "entry-deleted", G_CALLBACK (rb_song_info_query_model_deleted_cb), ++ "post-entry-delete", G_CALLBACK (rb_song_info_query_model_deleted_cb), + song_info, 0); + g_signal_connect_object (G_OBJECT (song_info->priv->query_model), + "rows-reordered", G_CALLBACK (rb_song_info_query_model_reordered_cb), +-- +2.17.0 + + +From 223bafcc98a33262d70adc325f3393ac8f4b3ecc Mon Sep 17 00:00:00 2001 +From: gkrithi8 +Date: Tue, 31 Oct 2017 17:06:58 +0530 +Subject: [PATCH 05/12] shell: remove extra pixbuf unref + +https://bugzilla.gnome.org/show_bug.cgi?id=789706 +--- + shell/rb-shell.c | 1 - + 1 file changed, 1 deletion(-) + +diff --git a/shell/rb-shell.c b/shell/rb-shell.c +index 7ae022795..734b90dcb 100644 +--- a/shell/rb-shell.c ++++ b/shell/rb-shell.c +@@ -375,7 +375,6 @@ load_external_art_cb (RBExtDB *store, GValue *value, RBShell *shell) + + pixbuf = gdk_pixbuf_loader_get_pixbuf (loader); + if (accept_art_pixbuf (pixbuf) == FALSE) { +- g_object_unref (pixbuf); + g_object_unref (loader); + return NULL; + } +-- +2.17.0 + + +From 2604eeb2338a4da7a95f9b6d46223323c864ddf2 Mon Sep 17 00:00:00 2001 +From: gkrithi8 +Date: Mon, 27 Nov 2017 13:31:39 +0530 +Subject: [PATCH 06/12] ext-db: fix crash when store request processing fails + +https://bugzilla.gnome.org/show_bug.cgi?id=727670 +--- + metadata/rb-ext-db.c | 6 +++++- + 1 file changed, 5 insertions(+), 1 deletion(-) + +diff --git a/metadata/rb-ext-db.c b/metadata/rb-ext-db.c +index 3e241e609..7d8e01573 100644 +--- a/metadata/rb-ext-db.c ++++ b/metadata/rb-ext-db.c +@@ -954,7 +954,11 @@ do_store_request (GSimpleAsyncResult *result, GObject *object, GCancellable *can + */ + g_signal_emit (store, signals[STORE], 0, req->value, &req->data); + +- rb_debug ("stored value into encoded data of type %s", G_VALUE_TYPE_NAME (req->data)); ++ if (req->data != NULL) { ++ rb_debug ("stored value into encoded data of type %s", G_VALUE_TYPE_NAME (req->data)); ++ } else { ++ rb_debug ("failed to store value"); ++ } + } else { + /* indicates we actually didn't get anything, as opposed to communication errors etc. + * providers just shouldn't call rb_ext_db_store_* in that case. +-- +2.17.0 + + +From a6f696f195b3c0aba63267c250ee15ccb058a8a9 Mon Sep 17 00:00:00 2001 +From: Jonathan Matthew +Date: Tue, 30 Jan 2018 08:20:31 +1000 +Subject: [PATCH 07/12] xfade: schedule stream reap after EOS + +This stops streams hanging around in pending-remove state until +the stream after the following stream starts, +--- + backends/gstreamer/rb-player-gst-xfade.c | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/backends/gstreamer/rb-player-gst-xfade.c b/backends/gstreamer/rb-player-gst-xfade.c +index d553397ce..420cf7f65 100644 +--- a/backends/gstreamer/rb-player-gst-xfade.c ++++ b/backends/gstreamer/rb-player-gst-xfade.c +@@ -1831,6 +1831,7 @@ rb_player_gst_xfade_bus_cb (GstBus *bus, GstMessage *message, RBPlayerGstXFade * + * message on the stream thread and now. + */ + start_waiting_eos_streams (player); ++ schedule_stream_reap (player); + } else { + /* no need to emit EOS here, we already know what to do next */ + rb_debug ("got EOS message for stream %s in REUSING state", stream->uri); +-- +2.17.0 + + +From f984934cfcbda9253bf26460163a546d8da69a01 Mon Sep 17 00:00:00 2001 +From: Bastien Nocera +Date: Wed, 6 Jun 2018 10:48:52 +0200 +Subject: [PATCH 08/12] daap: Fix build warning +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Replace strncpy with memcpy to avoid adding a NUL-byte in the string. + +rhythmbox/plugins/daap/rb-daap-src.c: In function ‘rb_daap_src_change_state’: +rhythmbox/plugins/daap/rb-daap-src.c:286:4: error: ‘strncpy’ output truncated before terminating nul copying 4 bytes from a string of the same length [-Werror=stringop-truncation] + strncpy (httpuri, http, 4); + ^~~~~~~~~~~~~~~~~~~~~~~~~~ +--- + plugins/daap/rb-daap-src.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/plugins/daap/rb-daap-src.c b/plugins/daap/rb-daap-src.c +index 99a55caf4..002ac6a00 100644 +--- a/plugins/daap/rb-daap-src.c ++++ b/plugins/daap/rb-daap-src.c +@@ -283,7 +283,7 @@ rb_daap_src_change_state (GstElement *element, GstStateChange transition) + + /* Set daap://... URI as http:// on souphttpsrc to ready connection. */ + httpuri = g_strdup (src->daap_uri); +- strncpy (httpuri, http, 4); ++ memcpy (httpuri, http, 4); + + g_object_set (src->souphttpsrc, "location", httpuri, NULL); + g_free (httpuri); +-- +2.17.0 + + +From a73dbae82e3b3a782d36261fa2676cce1f589e45 Mon Sep 17 00:00:00 2001 +From: Bastien Nocera +Date: Wed, 6 Jun 2018 11:34:52 +0200 +Subject: [PATCH 09/12] build: Remove -Wcast-align warning + +It generates a false positive error message when trying to compile on +ARM: +/usr/include/gstreamer-1.0/gst/gstbuffer.h: In function 'gst_buffer_ref': +/usr/include/gstreamer-1.0/gst/gstbuffer.h:429:10: error: cast increases required alignment of target type [-Werror=cast-align] + return (GstBuffer *) gst_mini_object_ref (GST_MINI_OBJECT_CAST (buf)); + ^ + +See https://bugzilla.gnome.org/show_bug.cgi?id=767255 +--- + configure.ac | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/configure.ac b/configure.ac +index 746dfb49e..7124db904 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -469,7 +469,7 @@ if test "$GCC" = "yes" -a "$set_more_warnings" != "no"; then + -Wunused-label -Wunused-value \ + -Wchar-subscripts -Wmissing-declarations -Wmissing-prototypes \ + -Wnested-externs -Wpointer-arith \ +- -Wcast-align -Wformat-security -Wall \ ++ -Wformat-security -Wall \ + -Werror -Wno-deprecated-declarations -std=gnu89" + + if echo "$CFLAGS" | grep -q -- '-O' && echo "$CFLAGS" | grep -q -v -- '-O0'; then +-- +2.17.0 + + +From 9871ddcce16cae60535523ab8c229319927f6d75 Mon Sep 17 00:00:00 2001 +From: Bastien Nocera +Date: Fri, 8 Jun 2018 16:09:05 +0200 +Subject: [PATCH 10/12] artsearch: Fix TypeError when returning results + +eg. Traceback (most recent call last): + File "/usr/lib64/rhythmbox/plugins/artsearch/local.py", line 136, in _enum_children_cb + self.callback(self.callback_args) +TypeError: Argument 1 does not allow None as a value +--- + plugins/artsearch/embedded.py | 2 +- + plugins/artsearch/lastfm.py | 2 +- + plugins/artsearch/local.py | 2 +- + 3 files changed, 3 insertions(+), 3 deletions(-) + +diff --git a/plugins/artsearch/embedded.py b/plugins/artsearch/embedded.py +index 206df547f..646da0a24 100644 +--- a/plugins/artsearch/embedded.py ++++ b/plugins/artsearch/embedded.py +@@ -56,7 +56,7 @@ class EmbeddedSearch(object): + return + + +- def search (self, key, last_time, store, callback, args): ++ def search (self, key, last_time, store, callback, *args): + location = key.get_info("location") + if location is None: + print("not searching, we don't have a location") +diff --git a/plugins/artsearch/lastfm.py b/plugins/artsearch/lastfm.py +index ff1966eae..2169ebab2 100644 +--- a/plugins/artsearch/lastfm.py ++++ b/plugins/artsearch/lastfm.py +@@ -145,7 +145,7 @@ class LastFMSearch (object): + l.get_url(url, self.album_info_cb) + + +- def search(self, key, last_time, store, callback, args): ++ def search(self, key, last_time, store, callback, *args): + if last_time > (time.time() - REPEAT_SEARCH_PERIOD): + print("we already tried this one") + callback (args) +diff --git a/plugins/artsearch/local.py b/plugins/artsearch/local.py +index 58214037e..4d28bf0e8 100644 +--- a/plugins/artsearch/local.py ++++ b/plugins/artsearch/local.py +@@ -136,7 +136,7 @@ class LocalSearch: + self.callback(self.callback_args) + + +- def search (self, key, last_time, store, callback, args): ++ def search (self, key, last_time, store, callback, *args): + # ignore last_time + + location = key.get_info("location") +-- +2.17.0 + + +From 68fb588544a094a27127fe50c95e18019065b793 Mon Sep 17 00:00:00 2001 +From: Bastien Nocera +Date: Fri, 8 Jun 2018 16:10:00 +0200 +Subject: [PATCH 11/12] artsearch: Ignore unsupported scheme + +When trying to play an HTTP stream, the local artsearch backend would +throw an error. We can safely ignore it though. + +Traceback (most recent call last): + File "/usr/lib64/rhythmbox/plugins/artsearch/local.py", line 129, in _enum_children_cb + enumfiles = parent.enumerate_children_finish(result) +GLib.Error: g-io-error-quark: Operation not supported by backend (15) +--- + plugins/artsearch/local.py | 6 ++++-- + 1 file changed, 4 insertions(+), 2 deletions(-) + +diff --git a/plugins/artsearch/local.py b/plugins/artsearch/local.py +index 4d28bf0e8..074795a76 100644 +--- a/plugins/artsearch/local.py ++++ b/plugins/artsearch/local.py +@@ -130,10 +130,12 @@ class LocalSearch: + enumfiles.next_files_async(ITEMS_PER_NOTIFICATION, GLib.PRIORITY_DEFAULT, None, self._enum_dir_cb, []) + except Exception as e: + print("okay, probably done: %s" % e) +- if not isinstance(e, GLib.GError): ++ if e.matches(Gio.IOErrorEnum, Gio.IOErrorEnum.NOT_SUPPORTED): ++ self.callback(self.callback_args) ++ elif not isinstance(e, GLib.GError): + import sys + sys.excepthook(*sys.exc_info()) +- self.callback(self.callback_args) ++ self.callback(self.callback_args) + + + def search (self, key, last_time, store, callback, *args): +-- +2.17.0 + + +From 0994e76b65d0533bd148cab5631362202602b28f Mon Sep 17 00:00:00 2001 +From: Bastien Nocera +Date: Tue, 12 Jun 2018 15:16:29 +0200 +Subject: [PATCH 12/12] sources: Fix state of initial import not reflecting + reality + +When rhythmbox is started with an empty "locations" setting, it will +rewrite the setting with the user's music folder as the only location. +This will start an import job from the setting's "changed" signal. But +we already start another import job from the "load-complete" signal of +the database. + +Make sure only the load-complete signal triggers an import when setting +the "locations" setting is empty on startup. +--- + sources/rb-library-source.c | 29 +++++++++++++---------------- + 1 file changed, 13 insertions(+), 16 deletions(-) + +diff --git a/sources/rb-library-source.c b/sources/rb-library-source.c +index 15ba523d2..378a3e006 100644 +--- a/sources/rb-library-source.c ++++ b/sources/rb-library-source.c +@@ -284,6 +284,10 @@ db_load_complete_cb (RhythmDB *db, RBLibrarySource *source) + if (source->priv->do_initial_import) { + const char *music_dir; + char *music_dir_uri; ++ const char *set_locations[2]; ++ ++ g_signal_handlers_block_by_func (source->priv->db_settings, ++ G_CALLBACK (db_settings_changed_cb), source); + + music_dir = rb_music_dir (); + music_dir_uri = g_filename_to_uri (music_dir, NULL, NULL); +@@ -293,6 +297,13 @@ db_load_complete_cb (RhythmDB *db, RBLibrarySource *source) + g_mkdir_with_parents (music_dir, 0700); + } + ++ set_locations[0] = music_dir_uri; ++ set_locations[1] = NULL; ++ g_settings_set_strv (source->priv->db_settings, "locations", set_locations); ++ ++ g_signal_handlers_unblock_by_func (source->priv->db_settings, ++ G_CALLBACK (db_settings_changed_cb), source); ++ + /* import anything that's already in there */ + job = maybe_create_import_job (source); + rhythmdb_import_job_add_uri (job, music_dir_uri); +@@ -344,22 +355,8 @@ rb_library_source_constructed (GObject *object) + + /* Set up the default library location if there's no library location set */ + locations = g_settings_get_strv (source->priv->db_settings, "locations"); +- if (g_strv_length (locations) == 0) { +- char *music_dir_uri; +- +- music_dir_uri = g_filename_to_uri (rb_music_dir (), NULL, NULL); +- if (music_dir_uri != NULL) { +- const char *set_locations[2]; +- +- set_locations[0] = music_dir_uri; +- set_locations[1] = NULL; +- g_settings_set_strv (source->priv->db_settings, "locations", set_locations); +- +- source->priv->do_initial_import = TRUE; +- +- g_free (music_dir_uri); +- } +- } ++ if (g_strv_length (locations) == 0) ++ source->priv->do_initial_import = TRUE; + g_strfreev (locations); + + songs = rb_source_get_entry_view (RB_SOURCE (source)); +-- +2.17.0 + diff --git a/media-sound/rhythmbox/rhythmbox-3.4.2.ebuild b/media-sound/rhythmbox/rhythmbox-3.4.2.ebuild index a22f0e68af97..258f18663802 100644 --- a/media-sound/rhythmbox/rhythmbox-3.4.2.ebuild +++ b/media-sound/rhythmbox/rhythmbox-3.4.2.ebuild @@ -84,6 +84,10 @@ DEPEND="${COMMON_DEPEND} test? ( dev-libs/check ) " +PATCHES=( + "${FILESDIR}"/${P}-gstreamer-1.14.patch +) + pkg_setup() { use python && python-single-r1_pkg_setup } -- cgit v1.2.3-65-gdbad