static void _mex_grilo_program_save_metadata (MexContent *content) { MexGriloProgram *program = MEX_GRILO_PROGRAM (content); MexGriloProgramPrivate *priv = program->priv; GrlMediaSource *source; const GList *ckeys; GList *keys; g_object_get (G_OBJECT (mex_program_get_feed (MEX_PROGRAM (program))), "grilo-source", &source, NULL); if (!(grl_metadata_source_supported_operations (GRL_METADATA_SOURCE (source)) & GRL_OP_SET_METADATA)) goto goout; ckeys = grl_metadata_source_writable_keys (GRL_METADATA_SOURCE (source)); keys = g_list_copy ((GList *) ckeys); grl_metadata_source_set_metadata (GRL_METADATA_SOURCE (source), priv->media, keys, GRL_WRITE_NORMAL, NULL, NULL); g_list_free (keys); goout: g_object_unref (source); }
static void mex_content_box_paint (ClutterActor *actor) { MexContentBoxPrivate *priv = MEX_CONTENT_BOX (actor)->priv; if (MEX_IS_PROGRAM (priv->content)) _mex_program_complete (MEX_PROGRAM (priv->content)); CLUTTER_ACTOR_CLASS (mex_content_box_parent_class)->paint (actor); }
static void mex_content_tile_paint (ClutterActor *actor) { MexContentTilePrivate *priv = MEX_CONTENT_TILE (actor)->priv; if (priv->content && MEX_IS_PROGRAM (priv->content)) _mex_program_complete (MEX_PROGRAM (priv->content)); if (!priv->thumbnail_loaded && !priv->download_id) _update_thumbnail (MEX_CONTENT_TILE (actor)); CLUTTER_ACTOR_CLASS (mex_content_tile_parent_class)->paint (actor); }
static gboolean mex_grilo_program_no_get_stream_cb (gpointer userdata) { MexGriloProgramClosure *closure = userdata; MexProgram *program = MEX_PROGRAM (closure->self); closure->reply (program, NULL, NULL, closure->userdata); g_slice_free (MexGriloProgramClosure, closure); g_object_unref (program); return FALSE; }
static void mex_program_get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec) { MexProgram *self = MEX_PROGRAM (object); MexProgramPrivate *priv = self->priv; switch (prop_id) { case PROP_FEED: g_value_set_object (value, priv->feed); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); break; } }
static void mex_grilo_program_get_stream_cb (GrlMediaSource *source, guint operation_id, GrlMedia *media, gpointer userdata, const GError *error) { MexGriloProgramClosure *closure = userdata; MexContent *content = MEX_CONTENT (closure->self); const gchar *url = grl_media_get_url (media); MEX_CONTENT_IFACE (mex_grilo_program_parent_class)->set_metadata (content, MEX_CONTENT_METADATA_STREAM, url); closure->reply (MEX_PROGRAM (content), url, error, closure->userdata); g_object_unref (content); g_object_unref (source); g_slice_free (MexGriloProgramClosure, closure); }
static void mex_program_set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec) { MexProgram *self = MEX_PROGRAM (object); MexProgramPrivate *priv = self->priv; switch (prop_id) { case PROP_FEED: priv->feed = g_value_get_object (value); if (priv->feed) g_object_add_weak_pointer (G_OBJECT (priv->feed), (gpointer *) &priv->feed); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); break; } }
/* MexContentView implementation */ static void mex_player_set_content (MexContentView *view, MexContent *content) { MexPlayerPrivate *priv = MEX_PLAYER (view)->priv; if (priv->model) mex_media_controls_set_content (MEX_MEDIA_CONTROLS (priv->controls), content, priv->model); if (priv->related_tile) { g_object_unref (priv->related_tile); priv->related_tile = NULL; } if (content) { const gchar *sposition, *sduration; if (priv->content) { save_old_content (MEX_PLAYER (view)); g_object_unref (priv->content); priv->content = NULL; } priv->content = g_object_ref_sink (content); sposition = mex_content_get_metadata (content, MEX_CONTENT_METADATA_LAST_POSITION); sduration = mex_content_get_metadata (content, MEX_CONTENT_METADATA_DURATION); if (sduration && !mex_media_controls_get_playing_queue (MEX_MEDIA_CONTROLS (priv->controls))) priv->duration = atoi (sduration); else priv->duration = 0; if (priv->duration > 0) { if (sposition) { int position = atoi (sposition); priv->position = (gdouble) position / (gdouble) priv->duration; } else { priv->position = 0.0; } } if (MEX_IS_PROGRAM (content)) { mex_program_get_stream (MEX_PROGRAM (content), mex_get_stream_cb, view); } else { const gchar *uri; uri = mex_content_get_metadata (content, MEX_CONTENT_METADATA_STREAM); mex_get_stream_cb (NULL, uri, NULL, view); } if (priv->info_visible) { clutter_actor_animate (priv->info_panel, CLUTTER_EASE_IN_SINE, 250, "opacity", 0x00, NULL); mx_widget_set_disabled (MX_WIDGET (priv->info_panel), TRUE); priv->info_visible = FALSE; } mex_player_set_controls_visible (MEX_PLAYER (view), TRUE); } else { if (priv->content) { g_object_unref (priv->content); priv->content = NULL; } } }