[sushi] audio: move tag discovery code to JS
- From: Cosimo Cecchi <cosimoc src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [sushi] audio: move tag discovery code to JS
- Date: Wed, 19 Jun 2019 17:02:52 +0000 (UTC)
commit 5acbf79018af55e8bf8337c6981c59ca5d63e224
Author: Cosimo Cecchi <cosimoc gnome org>
Date: Wed Jun 19 10:01:39 2019 -0700
audio: move tag discovery code to JS
We don't need to do this from C, and it causes problems with
introspection on certain configurations.
https://gitlab.gnome.org/GNOME/sushi/issues/13
src/libsushi/meson.build | 1 -
src/libsushi/sushi-sound-player.c | 93 ---------------------------------------
src/ui/main.js | 1 +
src/viewers/audio.js | 27 +++++++++---
4 files changed, 23 insertions(+), 99 deletions(-)
---
diff --git a/src/libsushi/meson.build b/src/libsushi/meson.build
index a1b08ae..8986fc4 100644
--- a/src/libsushi/meson.build
+++ b/src/libsushi/meson.build
@@ -52,7 +52,6 @@ gnome.generate_gir(
symbol_prefix: 'sushi',
identifier_prefix: 'Sushi',
includes: [
- 'GstPbutils-1.0',
'GstTag-1.0',
'GdkPixbuf-2.0',
'Gtk-3.0',
diff --git a/src/libsushi/sushi-sound-player.c b/src/libsushi/sushi-sound-player.c
index 18db6a2..cd30787 100644
--- a/src/libsushi/sushi-sound-player.c
+++ b/src/libsushi/sushi-sound-player.c
@@ -27,7 +27,6 @@
#include <glib-object.h>
#include <gst/gst.h>
-#include <gst/pbutils/pbutils.h>
#include "sushi-enum-types.h"
#include "sushi-sound-player.h"
@@ -48,7 +47,6 @@ enum
PROP_PROGRESS,
PROP_DURATION,
PROP_URI,
- PROP_TAGLIST
};
struct _SushiSoundPlayerPrivate
@@ -64,9 +62,6 @@ struct _SushiSoundPlayerPrivate
gdouble duration;
guint tick_timeout_id;
- GstDiscoverer *discoverer;
- GstTagList *taglist;
-
guint in_seek : 1;
};
@@ -91,76 +86,6 @@ sushi_sound_player_set_state (SushiSoundPlayer *player,
g_object_notify (G_OBJECT (player), "state");
}
-
-static void
-sushi_sound_player_destroy_discoverer (SushiSoundPlayer *player)
-{
- SushiSoundPlayerPrivate *priv = SUSHI_SOUND_PLAYER_GET_PRIVATE (player);
-
- if (priv->discoverer == NULL)
- return;
-
- if (priv->taglist != NULL) {
- gst_tag_list_free (priv->taglist);
- priv->taglist = NULL;
- }
-
- gst_discoverer_stop (priv->discoverer);
- gst_object_unref (priv->discoverer);
- priv->discoverer = NULL;
-
- g_object_notify (G_OBJECT (player), "taglist");
-
- g_clear_object (&priv->taglist);
-}
-
-static void
-discoverer_discovered_cb (GstDiscoverer *disco,
- GstDiscovererInfo *info,
- GError *error,
- gpointer user_data)
-{
- SushiSoundPlayer *player = user_data;
- SushiSoundPlayerPrivate *priv;
- const GstTagList *taglist;
-
- priv = SUSHI_SOUND_PLAYER_GET_PRIVATE (player);
-
- if (error != NULL)
- return;
-
- taglist = gst_discoverer_info_get_tags (info);
-
- if (taglist)
- {
- priv->taglist = gst_tag_list_copy (taglist);
- g_object_notify (G_OBJECT (player), "taglist");
- }
-}
-
-static gboolean
-sushi_sound_player_ensure_discoverer (SushiSoundPlayer *player)
-{
- SushiSoundPlayerPrivate *priv;
- priv = SUSHI_SOUND_PLAYER_GET_PRIVATE (player);
-
- if (priv->discoverer)
- return TRUE;
-
- priv->discoverer = gst_discoverer_new (GST_SECOND * 60,
- NULL);
-
- if (priv->discoverer == NULL)
- return FALSE;
-
- g_signal_connect (priv->discoverer, "discovered",
- G_CALLBACK (discoverer_discovered_cb), player);
- gst_discoverer_start (priv->discoverer);
- gst_discoverer_discover_uri_async (priv->discoverer, priv->uri);
-
- return TRUE;
-}
-
static void
sushi_sound_player_set_uri (SushiSoundPlayer *player,
const char *uri)
@@ -180,11 +105,7 @@ sushi_sound_player_set_uri (SushiSoundPlayer *player,
if (priv->pipeline)
sushi_sound_player_destroy_pipeline (player);
- if (priv->discoverer)
- sushi_sound_player_destroy_discoverer (player);
-
sushi_sound_player_ensure_pipeline (player);
- sushi_sound_player_ensure_discoverer (player);
g_object_notify (G_OBJECT (player), "uri");
}
@@ -638,7 +559,6 @@ static void
sushi_sound_player_dispose (GObject *gobject)
{
sushi_sound_player_destroy_pipeline (SUSHI_SOUND_PLAYER (gobject));
- sushi_sound_player_destroy_discoverer (SUSHI_SOUND_PLAYER (gobject));
G_OBJECT_CLASS (sushi_sound_player_parent_class)->dispose (gobject);
}
@@ -679,10 +599,6 @@ sushi_sound_player_get_property (GObject *gobject,
g_value_set_string (value, priv->uri);
break;
- case PROP_TAGLIST:
- g_value_set_boxed (value, priv->taglist);
- break;
-
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (gobject, prop_id, pspec);
break;
@@ -782,15 +698,6 @@ sushi_sound_player_class_init (SushiSoundPlayerClass *klass)
NULL,
G_PARAM_READWRITE |
G_PARAM_CONSTRUCT));
-
- g_object_class_install_property
- (gobject_class,
- PROP_TAGLIST,
- g_param_spec_boxed ("taglist",
- "Taglist",
- "Taglist for the current URI",
- GST_TYPE_TAG_LIST,
- G_PARAM_READABLE));
}
static void
diff --git a/src/ui/main.js b/src/ui/main.js
index 91e8174..88a4622 100644
--- a/src/ui/main.js
+++ b/src/ui/main.js
@@ -34,6 +34,7 @@ pkg.require({
GLib: '2.0',
GObject: '2.0',
Gst: '1.0',
+ GstPbutils: '1.0',
GstTag: '1.0',
Gtk: '3.0',
GtkSource: '4',
diff --git a/src/viewers/audio.js b/src/viewers/audio.js
index 1044048..f6fee26 100644
--- a/src/viewers/audio.js
+++ b/src/viewers/audio.js
@@ -23,7 +23,7 @@
*
*/
-const {Gdk, GdkPixbuf, Gio, GLib, GObject, Gst, GstTag, Gtk, Soup, Sushi} = imports.gi;
+const {Gdk, GdkPixbuf, Gio, GLib, GObject, Gst, GstPbutils, GstTag, Gtk, Soup, Sushi} = imports.gi;
const Constants = imports.util.constants;
const Renderer = imports.ui.renderer;
@@ -234,6 +234,7 @@ var Klass = GObject.registerClass({
super._init({ orientation: Gtk.Orientation.HORIZONTAL,
spacing: 6 });
+ this._discoverAudioTags(file);
this._createPlayer(file);
this._image = new Gtk.Image({ icon_name: 'media-optical-symbolic',
@@ -263,6 +264,22 @@ var Klass = GObject.registerClass({
this.isReady();
}
+ _discoverAudioTags(file) {
+ this._discoverer = new GstPbutils.Discoverer();
+ this._discoverer.connect('discovered', (d, info, err) => {
+ if (err) {
+ logError(err, `Unable to discover audio tags for ${file.get_uri()}`);
+ return;
+ }
+
+ let tags = info.get_tags();
+ if (tags)
+ this._updateFromTags(tags);
+ });
+ this._discoverer.start();
+ this._discoverer.discover_uri_async(file.get_uri());
+ }
+
_createPlayer(file) {
this._playerNotifies = [];
@@ -275,11 +292,12 @@ var Klass = GObject.registerClass({
this._player.connect('notify::duration', this._onPlayerDurationChanged.bind(this)));
this._playerNotifies.push(
this._player.connect('notify::state', this._onPlayerStateChanged.bind(this)));
- this._playerNotifies.push(
- this._player.connect('notify::taglist', this._onTagListChanged.bind(this)));
}
_onDestroy() {
+ this._discoverer.stop();
+ this._discoverer = null;
+
this._playerNotifies.forEach((id) => this._player.disconnect(id));
this._playerNotifies = [];
this._player.playing = false;
@@ -314,8 +332,7 @@ var Klass = GObject.registerClass({
this._setCover(cover);
}
- _onTagListChanged() {
- let tags = this._player.taglist;
+ _updateFromTags(tags) {
let albumName = tags.get_string('album')[1];
let artistName = tags.get_string('artist')[1];
let titleName = tags.get_string('title')[1];
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]