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); }
gchar * mex_program_get_id (MexProgram *program) { MexProgramClass *klass; g_return_val_if_fail (MEX_IS_PROGRAM (program), NULL); klass = MEX_PROGRAM_GET_CLASS (program); if (klass->get_id) return klass->get_id (program); return NULL; }
/** * mex_program_get_actors: * @program: A #MexProgram * * Retrieves the #GPtrArray containing the actor names as strings. Call * g_ptr_array_unref on the returned value once finished with. * * Return value: A #GPtrArray or NULL if there are no actors defined. */ GPtrArray * mex_program_get_actors (MexProgram *program) { MexProgramPrivate *priv; g_return_val_if_fail (MEX_IS_PROGRAM (program), NULL); priv = program->priv; if (priv->actors) { return g_ptr_array_ref (priv->actors); } else { return NULL; } }
void mex_program_add_actor (MexProgram *program, const char *actor) { MexProgramPrivate *priv; g_return_if_fail (MEX_IS_PROGRAM (program)); priv = program->priv; if (priv->actors == NULL) { priv->actors = g_ptr_array_new_with_free_func (g_free); } g_ptr_array_add (priv->actors, g_strdup (actor)); }
static char * _mex_program_get_index_str (MexProgram *program) { GString *str; char *index_str; g_return_val_if_fail (MEX_IS_PROGRAM (program), NULL); str = g_string_new (""); mex_content_foreach_metadata (MEX_CONTENT (program), make_metadata_string, str); index_str = str->str; g_string_free (str, FALSE); return index_str; }
void mex_program_get_thumbnail (MexProgram *program, MexGetThumbnailReply reply, gpointer userdata) { MexProgramClass *klass; MexProgramPrivate *priv; const char *still; g_return_if_fail (MEX_IS_PROGRAM (program)); priv = program->priv; /* Some backends (eg. Apple trailers) may be able to cache the stream so we can just use the standard metadata method to obtain it */ still = mex_content_get_metadata (MEX_CONTENT (program), MEX_PROGRAM_METADATA_STILL); if (stream != NULL) { struct _GetStreamPayload *payload = g_slice_new (struct _GetStreamPayload); payload->program = g_object_ref (program); payload->reply = reply; payload->userdata = userdata; /* Technically the stream could be freed before the idle is called Great, now I want refcounted strings */ payload->stream = g_strdup (stream); g_idle_add (emit_get_stream_reply, payload); return; } /* Other backends require custom methods to get the stream url */ klass = MEX_PROGRAM_GET_CLASS (program); if (klass->get_stream) { klass->get_stream (program, reply, userdata); } else { struct _GetStreamPayload *payload = g_slice_new (struct _GetStreamPayload); payload->program = g_object_ref (program); payload->reply = reply; payload->userdata = userdata; payload->stream = NULL; g_idle_add (emit_get_stream_reply, payload); } }
/* 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; } } }
MexFeed * mex_program_get_feed (MexProgram *program) { g_return_val_if_fail (MEX_IS_PROGRAM (program), NULL); return program->priv->feed; }