void g_vimeo_videos_search (GVimeo *vimeo, const gchar *text, gint page, GVimeoVideoSearchCb callback, gpointer user_data) { GVimeoVideoSearchData *search_data; gchar *request; g_return_if_fail (G_IS_VIMEO (vimeo)); request = build_request (vimeo, text, page); search_data = g_slice_new (GVimeoVideoSearchData); search_data->vimeo = vimeo; search_data->search_cb = callback; search_data->user_data = user_data; grl_net_wc_request_async (vimeo->priv->wc, request, NULL, search_videos_complete_cb, search_data); g_free (request); }
static void produce_from_recent_theme (RaitvOperation *op) { guint category_index; gchar *start = NULL; gchar *url = NULL; GrlRaitvSource *source = GRL_RAITV_SOURCE (op->source); category_index = get_theme_index_from_id (op->container_id); GRL_DEBUG ("produce_from_recent_theme (container_id=%s, category_index=%d",op->container_id,category_index); start = g_strdup_printf ("%u", op->offset+op->length); op->category_info = &themes_dir[category_index]; url = g_strdup_printf (RAITV_VIDEO_RECENT, start, op->category_info->tags, op->category_info->excludeTags); GRL_DEBUG ("Starting browse request for recent theme (%s)", url); grl_net_wc_request_async (source->priv->wc, url, op->cancellable, proxy_call_browse_grlnet_async_cb, op); g_free (url); }
static void read_url_async (GFlickr *f, const gchar *url, gpointer user_data) { GRL_DEBUG ("Opening '%s'", url); grl_net_wc_request_async (get_wc (f), url, NULL, read_done_cb, user_data); }
static void magnatune_get_db_async(OperationSpec *os) { GrlNetWc *wc = NULL; GRL_DEBUG("magnatune_get_db_async"); wc = grl_net_wc_new(); grl_net_wc_request_async(wc, URL_GET_DB, NULL, magnatune_get_db_done, os); }
static void magnatune_get_crc_async(void) { GrlNetWc *wc = NULL; GRL_DEBUG("magnatune_get_crc_async"); wc = grl_net_wc_new(); grl_net_wc_request_async(wc, URL_GET_CRC, NULL, magnatune_get_crc_done, NULL); }
static void magnatune_check_update(void) { gchar *db_path = NULL; gchar *new_db_path = NULL; gchar *new_crc_path = NULL; static gboolean already_checked = FALSE; struct stat file_st; GTimeVal tv; GrlNetWc *wc = NULL; GRL_DEBUG("magnatune_check_update"); if (already_checked == TRUE) return; already_checked = TRUE; g_get_current_time(&tv); new_db_path = g_build_filename(g_get_user_data_dir(), "grilo-plugins", GRL_SQL_NEW_DB, NULL); if (g_file_test(new_db_path, G_FILE_TEST_EXISTS) == FALSE) { db_path = g_build_filename(g_get_user_data_dir(), "grilo-plugins", GRL_SQL_DB, NULL); g_stat(db_path, &file_st); if (tv.tv_sec - file_st.st_mtime > DB_UPDATE_TIME_INTERVAL) { new_crc_path = g_build_filename(g_get_user_data_dir(), "grilo-plugins", GRL_SQL_NEW_CRC, NULL); g_stat(new_crc_path, &file_st); if ((g_file_test(new_crc_path, G_FILE_TEST_EXISTS) == FALSE) || (tv.tv_sec - file_st.st_mtime > CRC_UPDATE_TIME_INTERVAL)) { wc = grl_net_wc_new(); grl_net_wc_request_async(wc, URL_GET_CRC, NULL, magnatune_check_update_done, NULL); } g_free(new_crc_path); } g_free(db_path); } g_free(new_db_path); }
static void grl_bliptv_source_search (GrlSource *source, GrlSourceSearchSpec *ss) { BliptvOperation *op = g_slice_new0 (BliptvOperation); gchar *url; gint count = grl_operation_options_get_count (ss->options); guint page_number; guint page_offset; grl_paging_translate (grl_operation_options_get_skip (ss->options), count, MAX_ELEMENTS, NULL, &page_number, &page_offset); op->source = g_object_ref (source); op->cancellable = g_cancellable_new (); op->count = count; op->skip = page_offset; op->page = page_number; op->url = g_strdup_printf (BLIPTV_SEARCH, ss->text); op->operation_id = ss->operation_id; op->callback = ss->callback; op->user_data = ss->user_data; grl_operation_set_data_full (ss->operation_id, op, (GDestroyNotify) bliptv_operation_free); url = g_strdup_printf (op->url, page_number); GRL_DEBUG ("Starting search request for id=%u : '%s'", ss->operation_id, ss->text); grl_net_wc_request_async (GRL_BLIPTV_SOURCE (source)->priv->wc, url, op->cancellable, call_raw_async_cb, op); g_free (url); }
static void g_raitv_videos_search(RaitvOperation *op) { gchar *start; gchar *url = NULL; GrlRaitvSource *source = GRL_RAITV_SOURCE (op->source); start = g_strdup_printf ("%u", op->offset); url = g_strdup_printf (RAITV_VIDEO_SEARCH, op->text, start); GRL_DEBUG ("Starting search request (%s)", url); grl_net_wc_request_async (source->priv->wc, url, op->cancellable, proxy_call_search_grlnet_async_cb, op); g_free (start); g_free (url); }
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_full (rs->operation_id, op, (GDestroyNotify) raitv_operation_free); 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_full (rs->operation_id, op, (GDestroyNotify) raitv_operation_free); 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); }
static void call_raw_async_cb (GObject * source_object, GAsyncResult *res, gpointer data) { BliptvOperation *op = (BliptvOperation *) data; xmlDocPtr doc = NULL; xmlXPathContextPtr xpath = NULL; xmlXPathObjectPtr obj = NULL; gint i, nb_items = 0; gchar *content = NULL; gchar *url; gsize length; GRL_DEBUG ("Response id=%u", op->operation_id); if (g_cancellable_is_cancelled (op->cancellable)) { goto finalize_send_last; } if (!grl_net_wc_request_finish (GRL_NET_WC (source_object), res, &content, &length, NULL)) { goto finalize_send_last; } doc = xmlParseMemory (content, (gint) length); if (!doc) goto finalize_send_last; xpath = xmlXPathNewContext (doc); if (!xpath) goto finalize_send_last; xmlXPathRegisterNs (xpath, (xmlChar *) "blip", (xmlChar *) BLIPTV_BACKEND "/dtd/blip/1.0"); xmlXPathRegisterNs (xpath, (xmlChar *) "media", (xmlChar *) "http://search.yahoo.com/mrss/"); obj = xmlXPathEvalExpression ((xmlChar *) "/rss/channel/item", xpath); if (obj) { nb_items = xmlXPathNodeSetGetLength (obj->nodesetval); xmlXPathFreeObject (obj); } if (nb_items == 0) { goto finalize_send_last; } /* Special case: when there are no results in a search, Blip.tv returns an element telling precisely that, no results found; so we need to report no results too */ if (nb_items == 1) { obj = xmlXPathEvalExpression ((xmlChar *) "string(/rss/channel/item[0]/blip:item_id)", xpath); if (!obj || !obj->stringval || obj->stringval[0] == '\0') { g_clear_pointer (&obj, (GDestroyNotify) xmlXPathFreeObject); nb_items = 0; goto finalize_send_last; } else { xmlXPathFreeObject (obj); } } for (i = op->skip; i < nb_items; i++) { GList *mapping = bliptv_mappings; GrlMedia *media = grl_media_video_new (); while (mapping) { BliptvAssoc *assoc = (BliptvAssoc *) mapping->data; gchar *str; str = g_strdup_printf ("string(/rss/channel/item[%i]/%s)", i + 1, assoc->exp); obj = xmlXPathEvalExpression ((xmlChar *) str, xpath); if (obj) { if (obj->stringval && obj->stringval[0] != '\0') { GType _type; GRL_DEBUG ("\t%s -> %s", str, obj->stringval); _type = grl_metadata_key_get_type (assoc->grl_key); switch (_type) { case G_TYPE_STRING: grl_data_set_string (GRL_DATA (media), assoc->grl_key, (gchar *) obj->stringval); break; case G_TYPE_INT: grl_data_set_int (GRL_DATA (media), assoc->grl_key, (gint) atoi ((gchar *) obj->stringval)); break; case G_TYPE_FLOAT: grl_data_set_float (GRL_DATA (media), assoc->grl_key, (gfloat) atof ((gchar *) obj->stringval)); break; default: /* G_TYPE_DATE_TIME is not a constant, so this has to be * in "default:" */ if (_type == G_TYPE_DATE_TIME) { GDateTime *date = grl_date_time_from_iso8601 ((gchar *) obj->stringval); GRL_DEBUG ("Setting %s to %s", grl_metadata_key_get_name (assoc->grl_key), g_date_time_format (date, "%F %H:%M:%S")); grl_data_set_boxed (GRL_DATA (media), assoc->grl_key, date); g_date_time_unref (date); } else { GRL_DEBUG ("\tUnexpected data type: %s", g_type_name (_type)); } break; } } xmlXPathFreeObject (obj); } g_free (str); mapping = mapping->next; } op->callback (op->source, op->operation_id, media, --op->count, op->user_data, NULL); if (op->count == 0) break; } if (op->count > 0) { /* Request next page */ op->skip = 0; url = g_strdup_printf (op->url, ++op->page); GRL_DEBUG ("Operation %d: requesting page %d", op->operation_id, op->page); grl_net_wc_request_async (GRL_BLIPTV_SOURCE (op->source)->priv->wc, url, op->cancellable, call_raw_async_cb, op); g_free (url); goto finalize_free; } finalize_send_last: /* Signal the last element if it was not already signaled */ if (nb_items == 0) { op->callback (op->source, op->operation_id, NULL, 0, op->user_data, NULL); } finalize_free: g_clear_pointer (&xpath, (GDestroyNotify) xmlXPathFreeContext); g_clear_pointer (&doc, (GDestroyNotify) xmlFreeDoc); }