diff --git a/tools/bluetooth-player.c b/tools/bluetooth-player.c
index d6aaaa1..e6d97e2 100644
--- a/tools/bluetooth-player.c
+++ b/tools/bluetooth-player.c
#define BLUEZ_MEDIA_PLAYER_INTERFACE "org.bluez.MediaPlayer1"
#define BLUEZ_MEDIA_FOLDER_INTERFACE "org.bluez.MediaFolder1"
+#define BLUEZ_MEDIA_ITEM_INTERFACE "org.bluez.MediaItem1"
static GMainLoop *main_loop;
static DBusConnection *dbus_conn;
static GDBusProxy *default_player;
static GSList *players = NULL;
static GSList *folders = NULL;
+static GSList *items = NULL;
static void connect_handler(DBusConnection *connection, void *user_data)
{
print_folder(proxy, COLORED_NEW);
}
+static void print_item(GDBusProxy *proxy, const char *description)
+{
+ const char *path, *name;
+ DBusMessageIter iter;
+
+ path = g_dbus_proxy_get_path(proxy);
+
+ if (g_dbus_proxy_get_property(proxy, "Name", &iter))
+ dbus_message_iter_get_basic(&iter, &name);
+ else
+ name = "<unknown>";
+
+ rl_printf("%s%s%sItem %s %s\n", description ? "[" : "",
+ description ? : "",
+ description ? "] " : "",
+ path, name);
+}
+
+static void item_added(GDBusProxy *proxy)
+{
+ items = g_slist_append(items, proxy);
+
+ print_item(proxy, COLORED_NEW);
+}
+
static void proxy_added(GDBusProxy *proxy, void *user_data)
{
const char *interface;
player_added(proxy);
else if (!strcmp(interface, BLUEZ_MEDIA_FOLDER_INTERFACE))
folder_added(proxy);
+ else if (!strcmp(interface, BLUEZ_MEDIA_ITEM_INTERFACE))
+ item_added(proxy);
}
static void player_removed(GDBusProxy *proxy)
print_folder(proxy, COLORED_DEL);
}
+static void item_removed(GDBusProxy *proxy)
+{
+ items = g_slist_remove(items, proxy);
+
+ print_item(proxy, COLORED_DEL);
+}
+
static void proxy_removed(GDBusProxy *proxy, void *user_data)
{
const char *interface;
player_removed(proxy);
if (!strcmp(interface, BLUEZ_MEDIA_FOLDER_INTERFACE))
folder_removed(proxy);
+ if (!strcmp(interface, BLUEZ_MEDIA_ITEM_INTERFACE))
+ item_removed(proxy);
}
static void player_property_changed(GDBusProxy *proxy, const char *name,
g_free(str);
}
+static void item_property_changed(GDBusProxy *proxy, const char *name,
+ DBusMessageIter *iter)
+{
+ char *str;
+
+ str = proxy_description(proxy, "Item", COLORED_CHG);
+ print_iter(str, name, iter);
+ g_free(str);
+}
+
static void property_changed(GDBusProxy *proxy, const char *name,
DBusMessageIter *iter, void *user_data)
{
player_property_changed(proxy, name, iter);
else if (!strcmp(interface, BLUEZ_MEDIA_FOLDER_INTERFACE))
folder_property_changed(proxy, name, iter);
+ else if (!strcmp(interface, BLUEZ_MEDIA_ITEM_INTERFACE))
+ item_property_changed(proxy, name, iter);
}
int main(int argc, char *argv[])