/** * gdata_youtube_comment_set_parent_comment_uri: * @self: a #GDataYouTubeComment * @parent_comment_uri: a new parent comment URI, or %NULL * * Sets the #GDataYouTubeComment:parent-comment-uri property to @parent_comment_uri. * * Set @parent_comment_uri to %NULL to unset the #GDataYouTubeComment:parent-comment-uri property in the comment (i.e. make the comment a top-level * comment). * * See the <ulink type="http" url="http://code.google.com/apis/youtube/2.0/developers_guide_protocol_comments.html#Retrieve_comments">online * documentation</ulink> for more information. * * Since: 0.10.0 */ void gdata_youtube_comment_set_parent_comment_uri (GDataYouTubeComment *self, const gchar *parent_comment_uri) { GDataLink *link_; g_return_if_fail (GDATA_IS_YOUTUBE_COMMENT (self)); g_return_if_fail (parent_comment_uri == NULL || *parent_comment_uri != '\0'); link_ = gdata_entry_look_up_link (GDATA_ENTRY (self), GDATA_LINK_PARENT_COMMENT_URI); if ((link_ == NULL && parent_comment_uri == NULL) || (link_ != NULL && parent_comment_uri != NULL && g_strcmp0 (gdata_link_get_uri (link_), parent_comment_uri) == 0)) { /* Nothing to do. */ return; } else if (link_ == NULL && parent_comment_uri != NULL) { /* Add the new link. */ link_ = gdata_link_new (parent_comment_uri, GDATA_LINK_PARENT_COMMENT_URI); gdata_entry_add_link (GDATA_ENTRY (self), link_); g_object_unref (link_); } else if (link_ != NULL && parent_comment_uri == NULL) { /* Remove the old link. */ gdata_entry_remove_link (GDATA_ENTRY (self), link_); } else if (link_ != NULL && parent_comment_uri != NULL) { /* Update the existing link. */ gdata_link_set_uri (link_, parent_comment_uri); } g_object_notify (G_OBJECT (self), "parent-comment-uri"); }
static gboolean parse_json (GDataParsable *parsable, JsonReader *reader, gpointer user_data, GError **error) { gboolean success = TRUE; gchar *next_uri = NULL; /* JSON format: https://developers.google.com/drive/v2/reference/files/list */ if (gdata_parser_string_from_json_member (reader, "nextLink", P_DEFAULT, &next_uri, &success, error) == TRUE) { if (success && next_uri != NULL && next_uri[0] != '\0') { GDataLink *_link; _link = gdata_link_new (next_uri, "http://www.iana.org/assignments/relation/next"); _gdata_feed_add_link (GDATA_FEED (parsable), _link); g_object_unref (_link); } g_free (next_uri); return success; } else if (g_strcmp0 (json_reader_get_member_name (reader), "items") == 0) { guint i, elements; if (json_reader_is_array (reader) == FALSE) { g_set_error (error, GDATA_SERVICE_ERROR, GDATA_SERVICE_ERROR_PROTOCOL_ERROR, /* Translators: the parameter is an error message */ _("Error parsing JSON: %s"), "JSON node ‘items’ is not an array."); return FALSE; } /* Loop through the elements array. */ for (i = 0, elements = (guint) json_reader_count_elements (reader); success && i < elements; i++) { GDataEntry *entry = NULL; GError *child_error = NULL; GType entry_type = G_TYPE_INVALID; gchar *kind = NULL; gchar *mime_type = NULL; json_reader_read_element (reader, i); if (json_reader_is_object (reader) == FALSE) { g_set_error (error, GDATA_SERVICE_ERROR, GDATA_SERVICE_ERROR_PROTOCOL_ERROR, /* Translators: the parameter is an error message */ _("Error parsing JSON: %s"), "JSON node inside ‘items’ is not an object"); success = FALSE; goto continuation; } get_kind_and_mime_type (reader, &kind, &mime_type, &child_error); if (child_error != NULL) { g_propagate_error (error, child_error); success = FALSE; goto continuation; } if (g_strcmp0 (kind, "drive#file") == 0) { entry_type = gdata_documents_utils_get_type_from_content_type (mime_type); } else { g_warning ("%s files are not handled yet", kind); } if (entry_type == G_TYPE_INVALID) goto continuation; entry = GDATA_ENTRY (_gdata_parsable_new_from_json_node (entry_type, reader, NULL, error)); /* Call the progress callback in the main thread */ _gdata_feed_call_progress_callback (GDATA_FEED (parsable), user_data, entry); _gdata_feed_add_entry (GDATA_FEED (parsable), entry); continuation: g_clear_object (&entry); g_free (kind); g_free (mime_type); json_reader_end_element (reader); } return success; } return GDATA_PARSABLE_CLASS (gdata_documents_feed_parent_class)->parse_json (parsable, reader, user_data, error); }