static void gth_search_read_from_doc (GthCatalog *base, DomElement *root) { GthSearch *self; DomElement *node; g_return_if_fail (DOM_IS_ELEMENT (root)); self = GTH_SEARCH (base); GTH_CATALOG_CLASS (parent_class)->read_from_doc (GTH_CATALOG (self), root); gth_search_set_test (self, NULL); for (node = root->first_child; node; node = node->next_sibling) { if (g_strcmp0 (node->tag_name, "folder") == 0) { GFile *folder; folder = g_file_new_for_uri (dom_element_get_attribute (node, "uri")); gth_search_set_folder (self, folder); g_object_unref (folder); gth_search_set_recursive (self, (g_strcmp0 (dom_element_get_attribute (node, "recursive"), "true") == 0)); } else if (g_strcmp0 (node->tag_name, "tests") == 0) { GthTest *test; test = gth_test_chain_new (GTH_MATCH_TYPE_NONE, NULL); dom_domizable_load_from_element (DOM_DOMIZABLE (test), node); gth_search_set_test (self, GTH_TEST_CHAIN (test)); } } }
static void get_albums_ready_cb (SoupSession *session, SoupMessage *msg, gpointer user_data) { FacebookService *self = user_data; GSimpleAsyncResult *result; SoupBuffer *body; DomDocument *doc = NULL; GError *error = NULL; result = facebook_connection_get_result (self->priv->conn); if (msg->status_code != 200) { g_simple_async_result_set_error (result, SOUP_HTTP_ERROR, msg->status_code, "%s", soup_status_get_phrase (msg->status_code)); g_simple_async_result_complete_in_idle (result); return; } body = soup_message_body_flatten (msg->response_body); if (facebook_utils_parse_response (body, &doc, &error)) { DomElement *node; GList *albums = NULL; for (node = DOM_ELEMENT (doc)->first_child; node; node = node->next_sibling) { if (g_strcmp0 (node->tag_name, "photos_getAlbums_response") == 0) { DomElement *child; for (child = node->first_child; child; child = child->next_sibling) { if (g_strcmp0 (child->tag_name, "album") == 0) { FacebookAlbum *album; album = facebook_album_new (); dom_domizable_load_from_element (DOM_DOMIZABLE (album), child); albums = g_list_prepend (albums, album); } } } } albums = g_list_reverse (albums); g_simple_async_result_set_op_res_gpointer (result, albums, (GDestroyNotify) _g_object_list_unref); g_object_unref (doc); } else g_simple_async_result_set_from_error (result, error); g_simple_async_result_complete_in_idle (result); soup_buffer_free (body); }
static void get_user_info_ready_cb (SoupSession *session, SoupMessage *msg, gpointer user_data) { FacebookService *self = user_data; GSimpleAsyncResult *result; SoupBuffer *body; DomDocument *doc = NULL; GError *error = NULL; result = facebook_connection_get_result (self->priv->conn); if (msg->status_code != 200) { g_simple_async_result_set_error (result, SOUP_HTTP_ERROR, msg->status_code, "%s", soup_status_get_phrase (msg->status_code)); g_simple_async_result_complete_in_idle (result); return; } body = soup_message_body_flatten (msg->response_body); if (facebook_utils_parse_response (body, &doc, &error)) { DomElement *node; FacebookUser *user = NULL; for (node = DOM_ELEMENT (doc)->first_child; node; node = node->next_sibling) { if (g_strcmp0 (node->tag_name, "users_getInfo_response") == 0) { DomElement *child; for (child = node->first_child; child; child = child->next_sibling) { if (g_strcmp0 (child->tag_name, "user") == 0) { user = facebook_user_new (); dom_domizable_load_from_element (DOM_DOMIZABLE (user), child); g_simple_async_result_set_op_res_gpointer (result, user, (GDestroyNotify) g_object_unref); } } } } if (user == NULL) { error = g_error_new_literal (FACEBOOK_CONNECTION_ERROR, 0, _("Unknown error")); g_simple_async_result_set_from_error (result, error); } g_object_unref (doc); } else g_simple_async_result_set_from_error (result, error); g_simple_async_result_complete_in_idle (result); soup_buffer_free (body); }
GList * facebook_accounts_load_from_file (void) { GList *accounts = NULL; char *filename; char *buffer; gsize len; DomDocument *doc; filename = gth_user_dir_get_file (GTH_DIR_CONFIG, GTHUMB_DIR, "accounts", "facebook.xml", NULL); if (! g_file_get_contents (filename, &buffer, &len, NULL)) { g_free (filename); return NULL; } doc = dom_document_new (); if (dom_document_load (doc, buffer, len, NULL)) { DomElement *node; node = DOM_ELEMENT (doc)->first_child; if ((node != NULL) && (g_strcmp0 (node->tag_name, "accounts") == 0)) { DomElement *child; for (child = node->first_child; child != NULL; child = child->next_sibling) { if (strcmp (child->tag_name, "account") == 0) { FacebookAccount *account; account = facebook_account_new (); dom_domizable_load_from_element (DOM_DOMIZABLE (account), child); accounts = g_list_prepend (accounts, account); } } accounts = g_list_reverse (accounts); } } g_object_unref (doc); g_free (buffer); g_free (filename); return accounts; }
static void create_album_ready_cb (SoupSession *session, SoupMessage *msg, gpointer user_data) { PicasaWebService *self = user_data; GSimpleAsyncResult *result; SoupBuffer *body; DomDocument *doc; GError *error = NULL; result = _web_service_get_result (WEB_SERVICE (self)); if (msg->status_code != 201) { g_simple_async_result_set_error (result, SOUP_HTTP_ERROR, msg->status_code, "%s", soup_status_get_phrase (msg->status_code)); g_simple_async_result_complete_in_idle (result); return; } body = soup_message_body_flatten (msg->response_body); doc = dom_document_new (); if (dom_document_load (doc, body->data, body->length, &error)) { PicasaWebAlbum *album; album = picasa_web_album_new (); dom_domizable_load_from_element (DOM_DOMIZABLE (album), DOM_ELEMENT (doc)->first_child); g_simple_async_result_set_op_res_gpointer (result, album, (GDestroyNotify) g_object_unref); } else { g_simple_async_result_set_from_error (result, error); g_error_free (error); } g_simple_async_result_complete_in_idle (result); g_object_unref (doc); soup_buffer_free (body); }
static void list_albums_ready_cb (SoupSession *session, SoupMessage *msg, gpointer user_data) { PicasaWebService *self = user_data; GSimpleAsyncResult *result; SoupBuffer *body; DomDocument *doc; GError *error = NULL; result = _web_service_get_result (WEB_SERVICE (self)); if (msg->status_code != 200) { g_simple_async_result_set_error (result, SOUP_HTTP_ERROR, msg->status_code, "%s", soup_status_get_phrase (msg->status_code)); g_simple_async_result_complete_in_idle (result); return; } body = soup_message_body_flatten (msg->response_body); doc = dom_document_new (); if (dom_document_load (doc, body->data, body->length, &error)) { DomElement *feed_node; GList *albums = NULL; feed_node = DOM_ELEMENT (doc)->first_child; while ((feed_node != NULL) && g_strcmp0 (feed_node->tag_name, "feed") != 0) feed_node = feed_node->next_sibling; if (feed_node != NULL) { DomElement *node; PicasaWebAlbum *album; album = NULL; for (node = feed_node->first_child; node != NULL; node = node->next_sibling) { if (g_strcmp0 (node->tag_name, "entry") == 0) { /* read the album data */ if (album != NULL) albums = g_list_prepend (albums, album); album = picasa_web_album_new (); dom_domizable_load_from_element (DOM_DOMIZABLE (album), node); } else if (g_strcmp0 (node->tag_name, "gphoto:quotalimit") == 0) { self->priv->quota_limit = g_ascii_strtoull (dom_element_get_inner_text (node), NULL, 10); } else if (g_strcmp0 (node->tag_name, "gphoto:quotacurrent") == 0) { self->priv->quota_used = g_ascii_strtoull (dom_element_get_inner_text (node), NULL, 10); } } if (album != NULL) albums = g_list_prepend (albums, album); } albums = g_list_reverse (albums); g_simple_async_result_set_op_res_gpointer (result, albums, (GDestroyNotify) _g_object_list_unref); } else { g_simple_async_result_set_from_error (result, error); g_error_free (error); } g_simple_async_result_complete_in_idle (result); g_object_unref (doc); soup_buffer_free (body); }
static void list_photos_ready_cb (SoupSession *session, SoupMessage *msg, gpointer user_data) { PicasaWebService *self = user_data; GSimpleAsyncResult *result; SoupBuffer *body; DomDocument *doc; GError *error = NULL; result = _web_service_get_result (WEB_SERVICE (self)); if (msg->status_code != 200) { g_simple_async_result_set_error (result, SOUP_HTTP_ERROR, msg->status_code, "%s", soup_status_get_phrase (msg->status_code)); g_simple_async_result_complete_in_idle (result); return; } body = soup_message_body_flatten (msg->response_body); doc = dom_document_new (); if (dom_document_load (doc, body->data, body->length, &error)) { DomElement *feed_node; GList *photos = NULL; feed_node = DOM_ELEMENT (doc)->first_child; while ((feed_node != NULL) && g_strcmp0 (feed_node->tag_name, "feed") != 0) feed_node = feed_node->next_sibling; if (feed_node != NULL) { DomElement *node; PicasaWebPhoto *photo; photo = NULL; for (node = feed_node->first_child; node != NULL; node = node->next_sibling) { if (g_strcmp0 (node->tag_name, "entry") == 0) { /* read the photo data */ if (photo != NULL) photos = g_list_prepend (photos, photo); photo = picasa_web_photo_new (); dom_domizable_load_from_element (DOM_DOMIZABLE (photo), node); } } if (photo != NULL) photos = g_list_prepend (photos, photo); } photos = g_list_reverse (photos); g_simple_async_result_set_op_res_gpointer (result, photos, (GDestroyNotify) _g_object_list_unref); } else { g_simple_async_result_set_from_error (result, error); g_error_free (error); } g_simple_async_result_complete_in_idle (result); g_object_unref (doc); soup_buffer_free (body); }