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);
}
Beispiel #3
0
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;
}
Beispiel #4
0
/**
 * 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;
  }
}
Beispiel #5
0
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));
}
Beispiel #6
0
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;
}
Beispiel #7
0
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);
  }
}
Beispiel #8
0
/* 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;
    }
  }
}
Beispiel #9
0
MexFeed *
mex_program_get_feed (MexProgram *program)
{
  g_return_val_if_fail (MEX_IS_PROGRAM (program), NULL);
  return program->priv->feed;
}