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; } }
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); }
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); }