Esempio n. 1
0
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);
}
Esempio n. 2
0
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);
}
Esempio n. 3
0
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);
}
Esempio n. 4
0
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;
}
Esempio n. 5
0
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;
  }
}
Esempio n. 6
0
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);
}
Esempio n. 7
0
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;
  }
}
Esempio n. 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;
    }
  }
}