summaryrefslogtreecommitdiff
path: root/src/av-cp
diff options
context:
space:
mode:
Diffstat (limited to 'src/av-cp')
-rw-r--r--src/av-cp/playlist-treeview.c1
-rw-r--r--src/av-cp/renderer-combo.c34
-rw-r--r--src/av-cp/server-device.c26
3 files changed, 46 insertions, 15 deletions
diff --git a/src/av-cp/playlist-treeview.c b/src/av-cp/playlist-treeview.c
index 9c3f525..bda5d09 100644
--- a/src/av-cp/playlist-treeview.c
+++ b/src/av-cp/playlist-treeview.c
@@ -1024,7 +1024,6 @@ remove_media_server (GUPnPDeviceProxy *proxy)
compare_media_server,
(gpointer) udn,
FALSE)) {
- unschedule_icon_update (info);
gtk_tree_store_remove (GTK_TREE_STORE (model), &iter);
}
}
diff --git a/src/av-cp/renderer-combo.c b/src/av-cp/renderer-combo.c
index 962e5b0..95d3c2b 100644
--- a/src/av-cp/renderer-combo.c
+++ b/src/av-cp/renderer-combo.c
@@ -340,12 +340,20 @@ set_duration (const gchar *udn,
}
static void
-on_device_icon_available (GUPnPDeviceInfo *info,
- GdkPixbuf *icon)
+on_device_icon_available (GObject *source,
+ GAsyncResult *res,
+ gpointer user_data)
{
GtkTreeModel *model;
GtkTreeIter iter;
const char *udn;
+ g_autoptr (GdkPixbuf) icon;
+ g_autoptr (GError) error = NULL;
+
+ icon = update_icon_finish (GUPNP_DEVICE_INFO (source), res, &error);
+ if (error != NULL) {
+ g_debug ("Failed to download icon: %s", error->message);
+ }
if (icon == NULL)
return;
@@ -353,7 +361,7 @@ on_device_icon_available (GUPnPDeviceInfo *info,
model = gtk_combo_box_get_model (GTK_COMBO_BOX (renderer_combo));
g_assert (model != NULL);
- udn = gupnp_device_info_get_udn (info);
+ udn = gupnp_device_info_get_udn (GUPNP_DEVICE_INFO (source));
if (find_renderer (model, udn, &iter)) {
gtk_list_store_set (GTK_LIST_STORE (model),
@@ -362,7 +370,7 @@ on_device_icon_available (GUPnPDeviceInfo *info,
-1);
}
- g_object_unref (icon);
+ g_object_set_data (source, "icon-download-cancellable", NULL);
}
static void
@@ -516,7 +524,12 @@ append_media_renderer_to_tree (GUPnPDeviceProxy *proxy,
gupnp_service_proxy_set_subscribed (av_transport, TRUE);
gupnp_service_proxy_set_subscribed (rendering_control, TRUE);
- schedule_icon_update (info, on_device_icon_available);
+ GCancellable *cancellable = g_cancellable_new ();
+ g_object_set_data_full (G_OBJECT (info),
+ "icon-download-cancellable",
+ cancellable,
+ g_object_unref);
+ update_icon_async (info, cancellable, on_device_icon_available, NULL);
if (was_empty)
gtk_combo_box_set_active_iter (combo, &iter);
@@ -846,7 +859,16 @@ remove_media_renderer (GUPnPDeviceProxy *proxy)
model = gtk_combo_box_get_model (combo);
if (find_renderer (model, udn, &iter)) {
- unschedule_icon_update (info);
+ GCancellable *cancellable =
+ g_object_get_data (G_OBJECT (info),
+ "icon-download-cancellable");
+ if (cancellable != NULL) {
+ g_cancellable_cancel (cancellable);
+
+ g_object_set_data (G_OBJECT (info),
+ "icon-download-cancellable",
+ NULL);
+ }
gtk_list_store_remove (GTK_LIST_STORE (model), &iter);
gtk_combo_box_set_active (combo, 0);
}
diff --git a/src/av-cp/server-device.c b/src/av-cp/server-device.c
index dd312ef..e767447 100644
--- a/src/av-cp/server-device.c
+++ b/src/av-cp/server-device.c
@@ -150,8 +150,9 @@ av_cp_media_server_get_property (GObject *obj,
}
static void
-av_cp_media_server_on_icon_updated (GUPnPDeviceInfo *info,
- GdkPixbuf *icon);
+av_cp_media_server_on_icon_updated (GObject *source,
+ GAsyncResult *res,
+ gpointer user_data);
static void
av_cp_media_server_on_get_sort_caps (GObject *object,
@@ -308,13 +309,20 @@ av_cp_media_server_init (AVCPMediaServer *self)
}
static void
-av_cp_media_server_on_icon_updated (GUPnPDeviceInfo *info,
- GdkPixbuf *icon)
+av_cp_media_server_on_icon_updated (GObject *source,
+ GAsyncResult *res,
+ gpointer user_data)
{
- AVCPMediaServer *self = AV_CP_MEDIA_SERVER (info);
+ AVCPMediaServer *self = AV_CP_MEDIA_SERVER (source);
AVCPMediaServerPrivate *priv = av_cp_media_server_get_instance_private (self);
+ g_autoptr (GError) error = NULL;
+
+ priv->icon =
+ update_icon_finish (GUPNP_DEVICE_INFO (source), res, &error);
+ if (error != NULL) {
+ g_debug ("Failed to download device icon: %s", error->message);
+ }
- priv->icon = icon;
av_cp_media_server_get_content_directory (self);
if (priv->content_directory != NULL) {
@@ -401,8 +409,10 @@ av_cp_media_server_init_finish (GAsyncInitable *initable,
static void
av_cp_media_server_introspect (AVCPMediaServer *self)
{
- schedule_icon_update (GUPNP_DEVICE_INFO (self),
- av_cp_media_server_on_icon_updated);
+ update_icon_async (GUPNP_DEVICE_INFO (self),
+ NULL,
+ av_cp_media_server_on_icon_updated,
+ NULL);
}
static void