diff options
author | Philip Withnall <philip@tecnocode.co.uk> | 2015-04-19 18:29:29 +0100 |
---|---|---|
committer | Philip Withnall <philip@tecnocode.co.uk> | 2015-04-20 00:13:34 +0100 |
commit | de74263ff38a9d3e9672b833e5883393b3a9854c (patch) | |
tree | aba8ac481c426e992739daa71a66298142475c8e /gdata/media | |
parent | 9dc3981167a70c404a236aeb368dc441e9f9714c (diff) | |
download | libgdata-de74263ff38a9d3e9672b833e5883393b3a9854c.tar.gz |
media: Add JSON support to GDataMediaThumbnail
This will be used in the upcoming port to v3 of the YouTube API.
https://bugzilla.gnome.org/show_bug.cgi?id=687597
Diffstat (limited to 'gdata/media')
-rw-r--r-- | gdata/media/gdata-media-thumbnail.c | 29 |
1 files changed, 29 insertions, 0 deletions
diff --git a/gdata/media/gdata-media-thumbnail.c b/gdata/media/gdata-media-thumbnail.c index 413e0e91..be55c127 100644 --- a/gdata/media/gdata-media-thumbnail.c +++ b/gdata/media/gdata-media-thumbnail.c @@ -43,6 +43,9 @@ static void gdata_media_thumbnail_finalize (GObject *object); static void gdata_media_thumbnail_get_property (GObject *object, guint property_id, GValue *value, GParamSpec *pspec); static gboolean pre_parse_xml (GDataParsable *parsable, xmlDoc *doc, xmlNode *root_node, gpointer user_data, GError **error); static void get_namespaces (GDataParsable *parsable, GHashTable *namespaces); +static gboolean +parse_json (GDataParsable *parsable, JsonReader *reader, gpointer user_data, + GError **error); struct _GDataMediaThumbnailPrivate { gchar *uri; @@ -73,6 +76,7 @@ gdata_media_thumbnail_class_init (GDataMediaThumbnailClass *klass) parsable_class->pre_parse_xml = pre_parse_xml; parsable_class->get_namespaces = get_namespaces; + parsable_class->parse_json = parse_json; parsable_class->element_name = "thumbnail"; parsable_class->element_namespace = "media"; @@ -293,6 +297,31 @@ get_namespaces (GDataParsable *parsable, GHashTable *namespaces) g_hash_table_insert (namespaces, (gchar*) "media", (gchar*) "http://search.yahoo.com/mrss/"); } +/* Reference: + * https://developers.google.com/youtube/v3/docs/videos#snippet.thumbnails */ +static gboolean +parse_json (GDataParsable *parsable, JsonReader *reader, gpointer user_data, + GError **error) +{ + gboolean success; + GDataMediaThumbnail *self = GDATA_MEDIA_THUMBNAIL (parsable); + GDataMediaThumbnailPrivate *priv = self->priv; + + if (gdata_parser_string_from_json_member (reader, "url", P_DEFAULT, + &priv->uri, &success, + error) || + gdata_parser_int_from_json_member (reader, "width", P_DEFAULT, + (gint64 *) &priv->width, + &success, error) || + gdata_parser_int_from_json_member (reader, "height", P_DEFAULT, + (gint64 *) &priv->height, + &success, error)) { + return success; + } else { + return GDATA_PARSABLE_CLASS (gdata_media_thumbnail_parent_class)->parse_json (parsable, reader, user_data, error); + } +} + /** * gdata_media_thumbnail_get_uri: * @self: a #GDataMediaThumbnail |