From: Luiz Augusto von Dentz Date: Wed, 24 Apr 2013 09:23:58 +0000 (+0300) Subject: tools/mpris-player: Add support for MPRIS TrackList.TrackMetadataChanged signal X-Git-Tag: android-x86-4.4-r3~8164 X-Git-Url: http://git.osdn.net/view?a=commitdiff_plain;h=9e45ac1c92f6bb6b2169bd10ff72cb4c8edc6dfe;p=android-x86%2Fexternal-bluetooth-bluez.git tools/mpris-player: Add support for MPRIS TrackList.TrackMetadataChanged signal --- diff --git a/tools/mpris-player.c b/tools/mpris-player.c index 79d815b11..681bb0965 100644 --- a/tools/mpris-player.c +++ b/tools/mpris-player.c @@ -1694,6 +1694,8 @@ static const GDBusSignalTable tracklist_signals[] = { { GDBUS_SIGNAL("TrackAdded", GDBUS_ARGS({"metadata", "a{sv}"}, {"after", "o"})) }, { GDBUS_SIGNAL("TrackRemoved", GDBUS_ARGS({"track", "o"})) }, + { GDBUS_SIGNAL("TrackMetadataChanged", GDBUS_ARGS({"track", "o"}, + {"metadata", "a{sv}"})) }, { } }; @@ -2281,6 +2283,41 @@ static void transport_property_changed(GDBusProxy *proxy, const char *name, name); } +static void item_property_changed(GDBusProxy *proxy, const char *name, + DBusMessageIter *iter, void *user_data) +{ + struct player *player; + DBusMessage *signal; + DBusMessageIter args; + const char *path; + + path = g_dbus_proxy_get_path(proxy); + + player = find_player_by_item(path); + if (player == NULL) + return; + + if (strcasecmp(name, "Metadata") != 0) + return; + + signal = dbus_message_new_signal(MPRIS_PLAYER_PATH, + MPRIS_TRACKLIST_INTERFACE, + "TrackMetadataChanged"); + if (!signal) { + fprintf(stderr, "Unable to allocate new %s.TrackAdded signal", + MPRIS_TRACKLIST_INTERFACE); + return; + } + + dbus_message_iter_init_append(signal, &args); + + dbus_message_iter_append_basic(&args, DBUS_TYPE_OBJECT_PATH, &path); + + append_iter(&args, iter); + + g_dbus_send_message(player->conn, signal); +} + static void property_changed(GDBusProxy *proxy, const char *name, DBusMessageIter *iter, void *user_data) { @@ -2294,6 +2331,9 @@ static void property_changed(GDBusProxy *proxy, const char *name, if (strcmp(interface, BLUEZ_MEDIA_TRANSPORT_INTERFACE) == 0) return transport_property_changed(proxy, name, iter, user_data); + + if (strcmp(interface, BLUEZ_MEDIA_ITEM_INTERFACE) == 0) + return item_property_changed(proxy, name, iter, user_data); } int main(int argc, char *argv[])