summaryrefslogtreecommitdiff
path: root/gdata/media
diff options
context:
space:
mode:
authorPhilip Withnall <philip@tecnocode.co.uk>2010-03-23 16:40:53 +0000
committerPhilip Withnall <philip@tecnocode.co.uk>2010-03-25 00:35:01 +0000
commitc18152c862c7311c21293a6840ef8e20a77daa6a (patch)
tree671a3752b77aafa38ef75f833523220735e22a0b /gdata/media
parent39c746ad78870a34dceec15a1775a6df3e3476d4 (diff)
downloadlibgdata-c18152c862c7311c21293a6840ef8e20a77daa6a.tar.gz
[core] Move all element object parsing into two functions
Diffstat (limited to 'gdata/media')
-rw-r--r--gdata/media/gdata-media-group.c53
-rw-r--r--gdata/media/gdata-media-group.h2
2 files changed, 18 insertions, 37 deletions
diff --git a/gdata/media/gdata-media-group.c b/gdata/media/gdata-media-group.c
index 346c996e..065154b2 100644
--- a/gdata/media/gdata-media-group.c
+++ b/gdata/media/gdata-media-group.c
@@ -143,35 +143,16 @@ parse_xml (GDataParsable *parsable, xmlDoc *doc, xmlNode *node, gpointer user_da
if (gdata_parser_string_from_element (node, "title", P_NONE, &(self->priv->title), &success, error) == TRUE ||
gdata_parser_string_from_element (node, "description", P_NONE, &(self->priv->description), &success, error) == TRUE ||
- gdata_parser_string_from_element (node, "keywords", P_NONE, &(self->priv->keywords), &success, error) == TRUE) {
+ gdata_parser_string_from_element (node, "keywords", P_NONE, &(self->priv->keywords), &success, error) == TRUE ||
+ gdata_parser_object_from_element_setter (node, "category", P_REQUIRED, GDATA_TYPE_MEDIA_CATEGORY,
+ gdata_media_group_set_category, self, &success, error) == TRUE ||
+ gdata_parser_object_from_element_setter (node, "content", P_REQUIRED, GDATA_TYPE_MEDIA_CONTENT,
+ _gdata_media_group_add_content, self, &success, error) == TRUE ||
+ gdata_parser_object_from_element_setter (node, "thumbnail", P_REQUIRED, GDATA_TYPE_MEDIA_THUMBNAIL,
+ _gdata_media_group_add_thumbnail, self, &success, error) == TRUE ||
+ gdata_parser_object_from_element (node, "credit", P_REQUIRED | P_NO_DUPES, GDATA_TYPE_MEDIA_CREDIT,
+ &(self->priv->credit), &success, error) == TRUE) {
return success;
- } else if (xmlStrcmp (node->name, (xmlChar*) "category") == 0) {
- /* media:category */
- GDataMediaCategory *category = GDATA_MEDIA_CATEGORY (_gdata_parsable_new_from_xml_node (GDATA_TYPE_MEDIA_CATEGORY, doc,
- node, NULL, error));
- if (category == NULL)
- return FALSE;
-
- gdata_media_group_set_category (self, category);
- } else if (xmlStrcmp (node->name, (xmlChar*) "content") == 0) {
- /* media:content */
- GDataMediaContent *content = GDATA_MEDIA_CONTENT (_gdata_parsable_new_from_xml_node (GDATA_TYPE_MEDIA_CONTENT, doc, node, NULL, error));
- if (content == NULL)
- return FALSE;
-
- _gdata_media_group_add_content (self, content);
- } else if (xmlStrcmp (node->name, (xmlChar*) "credit") == 0) {
- /* media:credit */
- GDataMediaCredit *credit = GDATA_MEDIA_CREDIT (_gdata_parsable_new_from_xml_node (GDATA_TYPE_MEDIA_CREDIT, doc, node, NULL, error));
- if (credit == NULL)
- return FALSE;
-
- if (self->priv->credit != NULL) {
- g_object_unref (credit);
- return gdata_parser_error_duplicate_element (node, error);
- }
-
- _gdata_media_group_set_credit (self, credit);
} else if (xmlStrcmp (node->name, (xmlChar*) "player") == 0) {
/* media:player */
xmlChar *player_uri = xmlGetProp (node, (xmlChar*) "url");
@@ -229,14 +210,6 @@ parse_xml (GDataParsable *parsable, xmlDoc *doc, xmlNode *node, gpointer user_da
for (country = country_list; *country != NULL; country++)
g_hash_table_insert (self->priv->restricted_countries, *country, GUINT_TO_POINTER (relationship_bool));
g_free (country_list);
- } else if (xmlStrcmp (node->name, (xmlChar*) "thumbnail") == 0) {
- /* media:thumbnail */
- GDataMediaThumbnail *thumb = GDATA_MEDIA_THUMBNAIL (_gdata_parsable_new_from_xml_node (GDATA_TYPE_MEDIA_THUMBNAIL, doc,
- node, NULL, error));
- if (thumb == NULL)
- return FALSE;
-
- self->priv->thumbnails = g_list_prepend (self->priv->thumbnails, thumb);
} else if (GDATA_PARSABLE_CLASS (gdata_media_group_parent_class)->parse_xml (parsable, doc, node, user_data, error) == FALSE) {
/* Error! */
return FALSE;
@@ -460,7 +433,7 @@ gdata_media_group_get_contents (GDataMediaGroup *self)
void
_gdata_media_group_add_content (GDataMediaGroup *self, GDataMediaContent *content)
{
- self->priv->contents = g_list_prepend (self->priv->contents, content);
+ self->priv->contents = g_list_prepend (self->priv->contents, g_object_ref (content));
}
/**
@@ -535,3 +508,9 @@ gdata_media_group_get_thumbnails (GDataMediaGroup *self)
g_return_val_if_fail (GDATA_IS_MEDIA_GROUP (self), NULL);
return self->priv->thumbnails;
}
+
+void
+_gdata_media_group_add_thumbnail (GDataMediaGroup *self, GDataMediaThumbnail *thumbnail)
+{
+ self->priv->thumbnails = g_list_prepend (self->priv->thumbnails, g_object_ref (thumbnail));
+}
diff --git a/gdata/media/gdata-media-group.h b/gdata/media/gdata-media-group.h
index ab549708..c6e69bcc 100644
--- a/gdata/media/gdata-media-group.h
+++ b/gdata/media/gdata-media-group.h
@@ -27,6 +27,7 @@
#include <gdata/media/gdata-media-category.h>
#include <gdata/media/gdata-media-content.h>
#include <gdata/media/gdata-media-credit.h>
+#include <gdata/media/gdata-media-thumbnail.h>
G_BEGIN_DECLS
@@ -79,6 +80,7 @@ void _gdata_media_group_set_credit (GDataMediaGroup *self, GDataMediaCredit *cre
const gchar *gdata_media_group_get_player_uri (GDataMediaGroup *self);
gboolean gdata_media_group_is_restricted_in_country (GDataMediaGroup *self, const gchar *country);
GList *gdata_media_group_get_thumbnails (GDataMediaGroup *self);
+void _gdata_media_group_add_thumbnail (GDataMediaGroup *self, GDataMediaThumbnail *thumbnail);
G_END_DECLS