Example #1
0
static void
grl_raitv_source_browse (GrlSource *source,
                         GrlSourceBrowseSpec *bs)
{
    RaitvOperation *op = g_slice_new0 (RaitvOperation);

    const gchar *container_id;
    GRL_DEBUG ("%s: %s", __FUNCTION__, grl_media_get_id (bs->container));
    container_id = grl_media_get_id (bs->container);

    op->source       = g_object_ref (source);
    op->cancellable  = g_cancellable_new ();
    op->length        = grl_operation_options_get_count (bs->options);
    op->operation_id = bs->operation_id;
    op->container_id = container_id;
    op->callback     = bs->callback;
    op->user_data    = bs->user_data;
    op->skip	   = grl_operation_options_get_skip (bs->options);
    op->count	   = op->length;
    op->offset       = 0;

    grl_operation_set_data (bs->operation_id, op);

    RaitvMediaType type = classify_media_id (container_id);
    switch (type)
    {
    case RAITV_MEDIA_TYPE_ROOT:
        produce_from_directory (root_dir, root_dir_size, op, type);
        break;
    case RAITV_MEDIA_TYPE_POPULARS:
        produce_from_directory (themes_dir,
                                root_dir[ROOT_DIR_POPULARS_INDEX].count, op, RAITV_MEDIA_TYPE_POPULAR_THEME);
        break;
    case RAITV_MEDIA_TYPE_RECENTS:
        produce_from_directory (themes_dir,
                                root_dir[ROOT_DIR_RECENTS_INDEX].count, op, RAITV_MEDIA_TYPE_RECENT_THEME);
        break;
    case RAITV_MEDIA_TYPE_POPULAR_THEME:
        produce_from_popular_theme (op);
        break;
    case RAITV_MEDIA_TYPE_RECENT_THEME:
        produce_from_recent_theme (op);
        break;
    case RAITV_MEDIA_TYPE_VIDEO:
    default:
        g_assert_not_reached ();
        break;
    }

}
Example #2
0
static void
grl_raitv_source_search (GrlSource *source,
                         GrlSourceSearchSpec *ss)
{
    RaitvOperation *op = g_slice_new0 (RaitvOperation);

    op->source       = g_object_ref (source);
    op->cancellable  = g_cancellable_new ();
    op->length        = grl_operation_options_get_count (ss->options);
    op->operation_id = ss->operation_id;
    op->callback     = ss->callback;
    op->user_data    = ss->user_data;
    op->skip	   = grl_operation_options_get_skip (ss->options);
    op->count	   = op->length;
    op->offset       = 0;
    op->text	   = ss->text;

    grl_operation_set_data (ss->operation_id, op);

    g_raitv_videos_search(op);
}
static void
grl_optical_media_source_browse (GrlSource *source,
                                 GrlSourceBrowseSpec *bs)
{
  GList *drives;
  GList *volumes;
  GList *l;
  GrlOpticalMediaSourcePrivate *priv = GRL_OPTICAL_MEDIA_SOURCE (source)->priv;
  BrowseData *data;
  GList *media_list;

  GRL_DEBUG ("%s", __FUNCTION__);

  media_list = NULL;

  /* Get the drives */
  drives = g_volume_monitor_get_connected_drives (priv->monitor);
  for (l = drives; l != NULL; l = l->next) {
    GDrive *drive = l->data;

    media_list = add_drive (media_list, drive, GRL_OPTICAL_MEDIA_SOURCE (source));
    g_object_unref (drive);
  }
  g_list_free (drives);

  /* Look for mounted ISO images */
  volumes = g_volume_monitor_get_volumes (priv->monitor);
  for (l = volumes; l != NULL; l = l->next) {
    GVolume *volume = l->data;
    char *path;

    path = g_volume_get_identifier (volume, G_VOLUME_IDENTIFIER_KIND_UNIX_DEVICE);

    if (path != NULL && g_str_has_prefix (path, "/dev/loop"))
      media_list = add_volume (media_list, volume, NULL, GRL_OPTICAL_MEDIA_SOURCE (source));

    g_free (path);
    g_object_unref (volume);
  }
  g_list_free (volumes);

  /* Got nothing? */
  if (media_list == NULL) {
    /* Tell the caller we're done */
    bs->callback (bs->source,
                  bs->operation_id,
                  NULL,
                  0,
                  bs->user_data,
                  NULL);
    return;
  }

  media_list = g_list_reverse (media_list);

  /* And go to resolve all those devices */
  data = g_new0 (BrowseData, 1);
  data->source = source;
  data->bs = bs;
  data->media_list = media_list;
  data->cancellable = g_cancellable_new ();

  grl_operation_set_data (bs->operation_id, data->cancellable);

  data->parser = totem_pl_parser_new ();
  g_object_set (data->parser, "recurse", FALSE, NULL);
  g_signal_connect (G_OBJECT (data->parser), "entry-parsed",
                    G_CALLBACK (entry_parsed_cb), data);

  resolve_disc_urls (data);
}
static void
grl_optical_media_source_browse (GrlSource *source,
                                 GrlSourceBrowseSpec *bs)
{
  GList *mounts, *l;
  GrlOpticalMediaSourcePrivate *priv = GRL_OPTICAL_MEDIA_SOURCE (source)->priv;
  BrowseData *data;
  GList *media_list;

  GRL_DEBUG ("%s", __FUNCTION__);

  g_list_free_full (priv->list, g_object_unref);

  media_list = NULL;

  /* Look for loopback-mounted ISO images and discs */
  mounts = g_volume_monitor_get_mounts (priv->monitor);
  for (l = mounts; l != NULL; l = l->next) {
    GMount *mount = l->data;

    if (!ignore_mount (mount)) {
      GrlMedia *media;
      media = create_media_from_mount (mount);
      if (media)
        media_list = g_list_prepend (media_list, media);
    }

    g_object_unref (mount);
  }
  g_list_free (mounts);

  /* Got nothing? */
  if (media_list == NULL) {
    /* Tell the caller we're done */
    bs->callback (bs->source,
                  bs->operation_id,
                  NULL,
                  0,
                  bs->user_data,
                  NULL);
    return;
  }

  media_list = g_list_reverse (media_list);

  /* And go to resolve all those devices */
  data = g_new0 (BrowseData, 1);
  data->source = source;
  data->bs = bs;
  data->media_list = media_list;
  data->cancellable = g_cancellable_new ();

  grl_operation_set_data (bs->operation_id, data->cancellable);

  data->parser = totem_pl_parser_new ();
  g_object_set (data->parser, "recurse", FALSE, NULL);
  g_signal_connect (G_OBJECT (data->parser), "entry-parsed",
                    G_CALLBACK (entry_parsed_cb), &data->media);

  resolve_disc_urls (data);
}
Example #5
0
static void
grl_raitv_source_resolve (GrlSource *source,
                          GrlSourceResolveSpec *rs)
{
    gchar *urltarget;
    GrlRaitvSource *self = GRL_RAITV_SOURCE (source);
    RaitvOperation *op;
    RaitvMediaType mediatype;

    GRL_DEBUG ("Starting resolve source: url=%s",grl_media_get_url (rs->media));

    if (!GRL_IS_MEDIA_VIDEO (rs->media) && !GRL_IS_MEDIA_BOX (rs->media)) {
        rs->callback (rs->source, rs->operation_id, rs->media, rs->user_data, NULL);
        return;
    }

    mediatype = classify_media_id (grl_media_get_id (rs->media));
    switch (mediatype) {
    case RAITV_MEDIA_TYPE_ROOT:
        rs->media = produce_container_from_directory (rs->media, NULL, 0, mediatype);
        break;
    case RAITV_MEDIA_TYPE_POPULARS:
        rs->media = produce_container_from_directory (rs->media, root_dir, ROOT_DIR_POPULARS_INDEX, mediatype);
        break;
    case RAITV_MEDIA_TYPE_RECENTS:
        rs->media = produce_container_from_directory (rs->media, root_dir, ROOT_DIR_RECENTS_INDEX, mediatype);
        break;
    case RAITV_MEDIA_TYPE_POPULAR_THEME:
    case RAITV_MEDIA_TYPE_RECENT_THEME:
        rs->media = produce_container_from_directory (rs->media,
                    themes_dir,
                    get_theme_index_from_id (grl_media_get_id (rs->media)),
                    mediatype);
        break;
    case RAITV_MEDIA_TYPE_VIDEO:
        op = g_slice_new0 (RaitvOperation);
        op->source       = g_object_ref (source);
        op->cancellable  = g_cancellable_new ();
        op->operation_id = rs->operation_id;
        op->resolveCb    = rs->callback;
        op->user_data    = rs->user_data;
        op->media	      = rs->media;

        grl_operation_set_data (rs->operation_id, op);

        urltarget = g_strdup_printf ("http://www.rai.tv/dl/RaiTV/programmi/media/%s.html",
                                     grl_media_get_id(rs->media));

        GRL_DEBUG ("Opening '%s'", urltarget);

        grl_net_wc_request_async (self->priv->wc,
                                  urltarget,
                                  op->cancellable,
                                  proxy_call_resolve_grlnet_async_cb,
                                  op);

        g_free(urltarget);
        return;
    }
    rs->callback (rs->source, rs->operation_id, rs->media, rs->user_data, NULL);
    return;

    if ( grl_media_get_url (rs->media) != NULL) {
        rs->callback (rs->source, rs->operation_id, rs->media, rs->user_data, NULL);
        return;
    }

    op = g_slice_new0 (RaitvOperation);
    op->source       = g_object_ref (source);
    op->cancellable  = g_cancellable_new ();
    op->operation_id = rs->operation_id;
    op->resolveCb     = rs->callback;
    op->user_data    = rs->user_data;
    op->media	   = rs->media;

    grl_operation_set_data (rs->operation_id, op);

    urltarget = g_strdup_printf("%s/%s.html","http://www.rai.tv/dl/RaiTV/programmi/media",grl_media_get_id(rs->media));

    GRL_DEBUG ("Opening '%s'", urltarget);

    grl_net_wc_request_async (self->priv->wc,
                              urltarget,
                              op->cancellable,
                              proxy_call_resolve_grlnet_async_cb,
                              op);

    g_free(urltarget);
}