summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPhilip Withnall <philip@tecnocode.co.uk>2015-04-19 18:29:29 +0100
committerPhilip Withnall <philip@tecnocode.co.uk>2015-04-20 00:13:34 +0100
commitde74263ff38a9d3e9672b833e5883393b3a9854c (patch)
treeaba8ac481c426e992739daa71a66298142475c8e
parent9dc3981167a70c404a236aeb368dc441e9f9714c (diff)
downloadlibgdata-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
-rw-r--r--gdata/media/gdata-media-thumbnail.c29
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