static void process_token_result (const gchar *xml_result, gpointer user_data) { xmlDocPtr doc; xmlNodePtr node; GFlickrData *data = (GFlickrData *) user_data; GHashTable *token; doc = xmlReadMemory (xml_result, xmlStrlen ((xmlChar*) xml_result), NULL, NULL, XML_PARSE_RECOVER | XML_PARSE_NOBLANKS); node = xmlDocGetRootElement (doc); /* Check if result is OK */ if (!node || !result_is_correct (node)) { data->hashtable_cb (data->flickr, NULL, data->user_data); } else { node = node->xmlChildrenNode; token = get_token_info (node); data->hashtable_cb (data->flickr, token, data->user_data); g_hash_table_unref (token); } g_object_unref (data->flickr); g_slice_free (GFlickrData, data); xmlFreeDoc (doc); }
static void process_photosetsphotos_result (const gchar *xml_result, gpointer user_data) { GFlickrData *data = (GFlickrData *) user_data; GList *list = NULL; xmlDocPtr doc; xmlNodePtr node; doc = xmlReadMemory (xml_result, xmlStrlen ((xmlChar*) xml_result), NULL, NULL, XML_PARSE_RECOVER | XML_PARSE_NOBLANKS); node = xmlDocGetRootElement (doc); /* Check result is ok */ if (!node || !result_is_correct (node)) { data->list_cb (data->flickr, NULL, data->user_data); } else { node = node->xmlChildrenNode; /* Now we're at "photoset page" node */ node = node->xmlChildrenNode; while (node) { list = g_list_prepend (list, get_photo (node)); node = node->next; } data->list_cb (data->flickr, g_list_reverse (list), data->user_data); g_list_free_full (list, (GDestroyNotify) g_hash_table_unref); } g_object_unref (data->flickr); g_slice_free (GFlickrData, data); xmlFreeDoc (doc); }
static void process_video_search_result (const gchar *xml_result, gpointer user_data) { xmlDocPtr doc; xmlNodePtr node; GList *video_list = NULL; GVimeoVideoSearchData *data = (GVimeoVideoSearchData *) user_data; doc = xmlReadMemory (xml_result, xmlStrlen ((xmlChar *) xml_result), NULL, NULL, XML_PARSE_RECOVER | XML_PARSE_NOBLANKS); node = xmlDocGetRootElement (doc); /* Check result is ok */ if (!node || !result_is_correct (node)) { data->search_cb (data->vimeo, NULL, data->user_data); } else { node = node->xmlChildrenNode; /* Now we're at "video pages" node */ node = node->xmlChildrenNode; while (node) { video_list = g_list_prepend (video_list, get_video (node)); node = node->next; } video_list = g_list_reverse (video_list); data->search_cb (data->vimeo, video_list, data->user_data); g_list_free_full (video_list, (GDestroyNotify) g_hash_table_unref); } g_slice_free (GVimeoVideoSearchData, data); xmlFreeDoc (doc); }