From 9845c45c64c054edf9550a16ae563fc20ba3a107 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Jos=C3=A9=20Dapena=20Paz?= Date: Wed, 7 Apr 2010 17:43:42 +0200 Subject: [PATCH] Don't fetch url. Only fetch just when we need it (to play the files). Now we don't fetch the url, as this may be a very slow operation, specially for youtube. We also show now a warning about restricted contents when a media does not provide a url. --- src/cgp-library-group.c | 72 +++++++++++++++++++++++++++++++++++++++++++++++++ src/cgp-plugins-model.c | 22 +++++++-------- 2 files changed, 81 insertions(+), 13 deletions(-) diff --git a/src/cgp-library-group.c b/src/cgp-library-group.c index 13c31a0..a3a6bb9 100644 --- a/src/cgp-library-group.c +++ b/src/cgp-library-group.c @@ -16,6 +16,8 @@ enum static guint library_group_signals[LAST_SIGNAL] = { 0, }; static void cgp_library_group_dispose (GObject *self); +static void on_error_banner_clicked (MxButton *button, + CgpLibraryGroup *self); static void on_list_view_activated (CgpPluginsListView *list_view, const gchar *id, CgpLibraryGroup *self); @@ -38,6 +40,8 @@ struct _CgpLibraryGroupPrivate { ClutterActor *path_bar; ClutterActor *plugins_list_view; ClutterActor *notebook; + ClutterActor *banner; + GrlMedia *last_media; gint page_count; }; @@ -69,6 +73,11 @@ cgp_library_group_class_init (CgpLibraryGroupClass *klass) static void cgp_library_group_dispose (GObject *self) { + CgpLibraryGroupPrivate *priv; + + priv = CGP_LIBRARY_GROUP_GET_PRIVATE (self); + priv->last_media = NULL; + G_OBJECT_CLASS (cgp_library_group_parent_class)->dispose (G_OBJECT (self)); } @@ -83,6 +92,8 @@ cgp_library_group_init (CgpLibraryGroup *self) priv = CGP_LIBRARY_GROUP_GET_PRIVATE (self); + priv->last_media = NULL; + priv->top_box = mx_table_new (); clutter_actor_show (priv->top_box); clutter_container_add_actor (CLUTTER_CONTAINER (self), priv->top_box); @@ -130,6 +141,18 @@ cgp_library_group_init (CgpLibraryGroup *self) g_object_unref (plugins_model); clutter_container_add_actor (CLUTTER_CONTAINER (scroll_view), priv->plugins_list_view); + priv->banner = mx_button_new (); + clutter_actor_hide (priv->banner); + clutter_actor_set_name (priv->banner, "cgp-error-button"); + g_signal_connect (priv->banner, "clicked", G_CALLBACK (on_error_banner_clicked), self); + mx_table_add_actor_with_properties (MX_TABLE (priv->top_box), priv->banner, + 2, 0, + "x-expand", TRUE, "y-expand", FALSE, + "x-fill", TRUE, "y-fill", FALSE, + "row-span", 1, "column-span", 2, + NULL); + + clutter_actor_show (priv->plugins_list_view); clutter_actor_show (scroll_view); clutter_actor_show (priv->notebook); @@ -143,6 +166,42 @@ cgp_library_group_new (void) } static void +on_source_metadata_cb (GrlMediaSource *source, + GrlMedia *media, + gpointer user_data, + const GError *error) +{ + CgpPluginsListView *list_view = (CgpPluginsListView *) user_data; + CgpLibraryGroupPrivate *priv; + + priv = CGP_LIBRARY_GROUP_GET_PRIVATE (list_view); + + if (media == priv->last_media) { + const gchar *url; + url = grl_media_get_url (GRL_MEDIA (media)); + if (url) { + g_signal_emit (G_OBJECT (list_view), + library_group_signals[ACTIVATE_MEDIA], + 0, + media); + } else { + mx_button_set_label (MX_BUTTON (priv->banner), + "Contents restricted"); + clutter_actor_show (priv->banner); + } + } + + g_object_unref (list_view); +} + +static void +on_error_banner_clicked (MxButton *button, + CgpLibraryGroup *self) +{ + clutter_actor_hide (CLUTTER_ACTOR (button)); +} + +static void on_list_view_activated (CgpPluginsListView *list_view, const gchar *id, CgpLibraryGroup *self) @@ -154,6 +213,8 @@ on_list_view_activated (CgpPluginsListView *list_view, priv = CGP_LIBRARY_GROUP_GET_PRIVATE (self); + clutter_actor_hide (priv->banner); + instance = cgp_plugins_model_get_item (CGP_PLUGINS_MODEL (mx_list_view_get_model (MX_LIST_VIEW (list_view))), id); if (!instance) return; @@ -162,11 +223,22 @@ on_list_view_activated (CgpPluginsListView *list_view, if (GRL_IS_MEDIA (instance) && !GRL_IS_MEDIA_BOX (instance)) { const gchar *url; url = grl_media_get_url (GRL_MEDIA (instance)); + priv->last_media = (GrlMedia *) instance; if (url) { g_signal_emit (G_OBJECT (self), library_group_signals[ACTIVATE_MEDIA], 0, instance); + } else { + ClutterModel *model; + GObject *source; + + model = mx_list_view_get_model (MX_LIST_VIEW (list_view)); + g_object_get (model, "source", &source, NULL); + + grl_media_source_metadata (GRL_MEDIA_SOURCE (source), GRL_MEDIA (instance), + grl_metadata_key_list_new (GRL_METADATA_KEY_URL, NULL), + GRL_RESOLVE_FULL, on_source_metadata_cb, g_object_ref (self)); } } else { priv->page_count++; diff --git a/src/cgp-plugins-model.c b/src/cgp-plugins-model.c index bfa82d6..550a7e6 100644 --- a/src/cgp-plugins-model.c +++ b/src/cgp-plugins-model.c @@ -239,18 +239,16 @@ set_container (CgpPluginsModel *self, GObject *container) priv->op_id = grl_media_source_search (GRL_MEDIA_SOURCE (container), priv->search_string, grl_metadata_key_list_new (GRL_METADATA_KEY_ID, GRL_METADATA_KEY_TITLE, - GRL_METADATA_KEY_URL, NULL), - 0, 100, GRL_RESOLVE_IDLE_RELAY, + 0, 100, GRL_RESOLVE_FAST_ONLY, (GrlMediaSourceResultCb) on_media_source_browse, self); } else { priv->op_id = grl_media_source_browse (GRL_MEDIA_SOURCE (container), NULL, grl_metadata_key_list_new (GRL_METADATA_KEY_ID, GRL_METADATA_KEY_TITLE, - GRL_METADATA_KEY_URL, NULL), - 0, 100, GRL_RESOLVE_IDLE_RELAY, + 0, 100, GRL_RESOLVE_FAST_ONLY, (GrlMediaSourceResultCb) on_media_source_browse, self); } @@ -258,7 +256,6 @@ set_container (CgpPluginsModel *self, GObject *container) priv->op_id = grl_media_source_browse (GRL_MEDIA_SOURCE (priv->source), GRL_MEDIA (container), grl_metadata_key_list_new (GRL_METADATA_KEY_ID, GRL_METADATA_KEY_TITLE, - GRL_METADATA_KEY_URL, NULL), 0, 100, GRL_RESOLVE_IDLE_RELAY, (GrlMediaSourceResultCb) on_media_source_browse, @@ -357,14 +354,13 @@ on_media_source_browse (GrlMediaSource *source, return; } - if (GRL_IS_MEDIA_BOX (media) || grl_media_get_url (media)) { - clutter_model_append (CLUTTER_MODEL (self), - CGP_PLUGINS_MODEL_COLUMN_ID, grl_media_get_id (media), - CGP_PLUGINS_MODEL_COLUMN_NAME, grl_media_get_title (media), - CGP_PLUGINS_MODEL_COLUMN_TYPE, GRL_IS_MEDIA_BOX (media)?CGP_PLUGINS_MODEL_TYPE_MEDIA_BOX:CGP_PLUGINS_MODEL_TYPE_MEDIA, - CGP_PLUGINS_MODEL_COLUMN_INSTANCE, media, - -1); - } + clutter_model_append (CLUTTER_MODEL (self), + CGP_PLUGINS_MODEL_COLUMN_ID, grl_media_get_id (media), + CGP_PLUGINS_MODEL_COLUMN_NAME, grl_media_get_title (media), + CGP_PLUGINS_MODEL_COLUMN_TYPE, GRL_IS_MEDIA_BOX (media)?CGP_PLUGINS_MODEL_TYPE_MEDIA_BOX:CGP_PLUGINS_MODEL_TYPE_MEDIA, + CGP_PLUGINS_MODEL_COLUMN_INSTANCE, media, + -1); + if (remaining == 0) { priv->op_id = 0; } -- 2.1.4