Blame gdata/media/gdata-media-content.c

Packit 4b6dd7
/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */
Packit 4b6dd7
/*
Packit 4b6dd7
 * GData Client
Packit 4b6dd7
 * Copyright (C) Philip Withnall 2009–2010 <philip@tecnocode.co.uk>
Packit 4b6dd7
 *
Packit 4b6dd7
 * GData Client is free software; you can redistribute it and/or
Packit 4b6dd7
 * modify it under the terms of the GNU Lesser General Public
Packit 4b6dd7
 * License as published by the Free Software Foundation; either
Packit 4b6dd7
 * version 2.1 of the License, or (at your option) any later version.
Packit 4b6dd7
 *
Packit 4b6dd7
 * GData Client is distributed in the hope that it will be useful,
Packit 4b6dd7
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
Packit 4b6dd7
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
Packit 4b6dd7
 * Lesser General Public License for more details.
Packit 4b6dd7
 *
Packit 4b6dd7
 * You should have received a copy of the GNU Lesser General Public
Packit 4b6dd7
 * License along with GData Client.  If not, see <http://www.gnu.org/licenses/>.
Packit 4b6dd7
 */
Packit 4b6dd7
Packit 4b6dd7
/**
Packit 4b6dd7
 * SECTION:gdata-media-content
Packit 4b6dd7
 * @short_description: Media RSS content element
Packit 4b6dd7
 * @stability: Stable
Packit 4b6dd7
 * @include: gdata/media/gdata-media-content.h
Packit 4b6dd7
 *
Packit 4b6dd7
 * #GDataMediaContent represents a "content" element from the
Packit 4b6dd7
 * <ulink type="http" url="http://video.search.yahoo.com/mrss">Media RSS specification</ulink>.
Packit 4b6dd7
 *
Packit 4b6dd7
 * The class only implements parsing, not XML output, at the moment.
Packit 4b6dd7
 *
Packit 4b6dd7
 * Since: 0.4.0
Packit 4b6dd7
 */
Packit 4b6dd7
Packit 4b6dd7
#include <glib.h>
Packit 4b6dd7
#include <libxml/parser.h>
Packit 4b6dd7
Packit 4b6dd7
#include "gdata-media-content.h"
Packit 4b6dd7
#include "gdata-download-stream.h"
Packit 4b6dd7
#include "gdata-parsable.h"
Packit 4b6dd7
#include "gdata-parser.h"
Packit 4b6dd7
#include "gdata-media-enums.h"
Packit 4b6dd7
#include "gdata-private.h"
Packit 4b6dd7
Packit 4b6dd7
static void gdata_media_content_finalize (GObject *object);
Packit 4b6dd7
static void gdata_media_content_get_property (GObject *object, guint property_id, GValue *value, GParamSpec *pspec);
Packit 4b6dd7
static gboolean pre_parse_xml (GDataParsable *parsable, xmlDoc *doc, xmlNode *root_node, gpointer user_data, GError **error);
Packit 4b6dd7
static void get_namespaces (GDataParsable *parsable, GHashTable *namespaces);
Packit 4b6dd7
Packit 4b6dd7
struct _GDataMediaContentPrivate {
Packit 4b6dd7
	gchar *uri;
Packit 4b6dd7
	gsize filesize;
Packit 4b6dd7
	gchar *content_type;
Packit 4b6dd7
	GDataMediaMedium medium;
Packit 4b6dd7
	gboolean is_default;
Packit 4b6dd7
	GDataMediaExpression expression;
Packit 4b6dd7
	gint64 duration;
Packit 4b6dd7
	guint height;
Packit 4b6dd7
	guint width;
Packit 4b6dd7
	/* TODO: implement other properties from the Media RSS standard */
Packit 4b6dd7
};
Packit 4b6dd7
Packit 4b6dd7
enum {
Packit 4b6dd7
	PROP_URI = 1,
Packit 4b6dd7
	PROP_FILESIZE,
Packit 4b6dd7
	PROP_CONTENT_TYPE,
Packit 4b6dd7
	PROP_MEDIUM,
Packit 4b6dd7
	PROP_IS_DEFAULT,
Packit 4b6dd7
	PROP_EXPRESSION,
Packit 4b6dd7
	PROP_DURATION,
Packit 4b6dd7
	PROP_HEIGHT,
Packit 4b6dd7
	PROP_WIDTH
Packit 4b6dd7
};
Packit 4b6dd7
Packit 4b6dd7
G_DEFINE_TYPE (GDataMediaContent, gdata_media_content, GDATA_TYPE_PARSABLE)
Packit 4b6dd7
Packit 4b6dd7
static void
Packit 4b6dd7
gdata_media_content_class_init (GDataMediaContentClass *klass)
Packit 4b6dd7
{
Packit 4b6dd7
	GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
Packit 4b6dd7
	GDataParsableClass *parsable_class = GDATA_PARSABLE_CLASS (klass);
Packit 4b6dd7
Packit 4b6dd7
	g_type_class_add_private (klass, sizeof (GDataMediaContentPrivate));
Packit 4b6dd7
Packit 4b6dd7
	gobject_class->get_property = gdata_media_content_get_property;
Packit 4b6dd7
	gobject_class->finalize = gdata_media_content_finalize;
Packit 4b6dd7
Packit 4b6dd7
	parsable_class->pre_parse_xml = pre_parse_xml;
Packit 4b6dd7
	parsable_class->get_namespaces = get_namespaces;
Packit 4b6dd7
	parsable_class->element_name = "content";
Packit 4b6dd7
	parsable_class->element_namespace = "media";
Packit 4b6dd7
Packit 4b6dd7
	/**
Packit 4b6dd7
	 * GDataMediaContent:uri:
Packit 4b6dd7
	 *
Packit 4b6dd7
	 * The direct URI to the media object.
Packit 4b6dd7
	 *
Packit 4b6dd7
	 * For more information, see the <ulink type="http" url="http://video.search.yahoo.com/mrss">Media RSS specification</ulink>.
Packit 4b6dd7
	 *
Packit 4b6dd7
	 * Since: 0.4.0
Packit 4b6dd7
	 */
Packit 4b6dd7
	g_object_class_install_property (gobject_class, PROP_URI,
Packit 4b6dd7
	                                 g_param_spec_string ("uri",
Packit 4b6dd7
	                                                      "URI", "The direct URI to the media object.",
Packit 4b6dd7
	                                                      NULL,
Packit 4b6dd7
	                                                      G_PARAM_READABLE | G_PARAM_STATIC_STRINGS));
Packit 4b6dd7
Packit 4b6dd7
	/**
Packit 4b6dd7
	 * GDataMediaContent:filesize:
Packit 4b6dd7
	 *
Packit 4b6dd7
	 * The number of bytes of the media object.
Packit 4b6dd7
	 *
Packit 4b6dd7
	 * For more information, see the <ulink type="http" url="http://video.search.yahoo.com/mrss">Media RSS specification</ulink>.
Packit 4b6dd7
	 *
Packit 4b6dd7
	 * Since: 0.4.0
Packit 4b6dd7
	 */
Packit 4b6dd7
	g_object_class_install_property (gobject_class, PROP_FILESIZE,
Packit 4b6dd7
	                                 g_param_spec_ulong ("filesize",
Packit 4b6dd7
	                                                     "Filesize", "The number of bytes of the media object.",
Packit 4b6dd7
	                                                     0, G_MAXULONG, 0,
Packit 4b6dd7
	                                                     G_PARAM_READABLE | G_PARAM_STATIC_STRINGS));
Packit 4b6dd7
Packit 4b6dd7
	/**
Packit 4b6dd7
	 * GDataMediaContent:content-type:
Packit 4b6dd7
	 *
Packit 4b6dd7
	 * The standard MIME type of the object.
Packit 4b6dd7
	 *
Packit 4b6dd7
	 * For more information, see the <ulink type="http" url="http://video.search.yahoo.com/mrss">Media RSS specification</ulink>.
Packit 4b6dd7
	 *
Packit 4b6dd7
	 * Since: 0.4.0
Packit 4b6dd7
	 */
Packit 4b6dd7
	g_object_class_install_property (gobject_class, PROP_CONTENT_TYPE,
Packit 4b6dd7
	                                 g_param_spec_string ("content-type",
Packit 4b6dd7
	                                                      "Content type", "The standard MIME type of the object.",
Packit 4b6dd7
	                                                      NULL,
Packit 4b6dd7
	                                                      G_PARAM_READABLE | G_PARAM_STATIC_STRINGS));
Packit 4b6dd7
Packit 4b6dd7
	/**
Packit 4b6dd7
	 * GDataMediaContent:medium:
Packit 4b6dd7
	 *
Packit 4b6dd7
	 * The type of object, complementing #GDataMediaContent:content-type. It allows the consuming application to make simpler decisions between
Packit 4b6dd7
	 * different content objects, based on whether they're a video or audio stream, for example.
Packit 4b6dd7
	 *
Packit 4b6dd7
	 * For more information, see the <ulink type="http" url="http://video.search.yahoo.com/mrss">Media RSS specification</ulink>.
Packit 4b6dd7
	 *
Packit 4b6dd7
	 * Since: 0.4.0
Packit 4b6dd7
	 */
Packit 4b6dd7
	g_object_class_install_property (gobject_class, PROP_MEDIUM,
Packit 4b6dd7
	                                 g_param_spec_enum ("medium",
Packit 4b6dd7
	                                                    "Medium", "The type of object.",
Packit 4b6dd7
	                                                    GDATA_TYPE_MEDIA_MEDIUM, GDATA_MEDIA_UNKNOWN,
Packit 4b6dd7
	                                                    G_PARAM_READABLE | G_PARAM_STATIC_STRINGS));
Packit 4b6dd7
Packit 4b6dd7
	/**
Packit 4b6dd7
	 * GDataMediaContent:is-default:
Packit 4b6dd7
	 *
Packit 4b6dd7
	 * Determines if this is the default content for the media group. There should only be one default object per media group.
Packit 4b6dd7
	 *
Packit 4b6dd7
	 * For more information, see the <ulink type="http" url="http://video.search.yahoo.com/mrss">Media RSS specification</ulink>.
Packit 4b6dd7
	 *
Packit 4b6dd7
	 * Since: 0.4.0
Packit 4b6dd7
	 */
Packit 4b6dd7
	g_object_class_install_property (gobject_class, PROP_IS_DEFAULT,
Packit 4b6dd7
	                                 g_param_spec_boolean ("is-default",
Packit 4b6dd7
	                                                       "Default?", "Determines if this is the default content for the media group.",
Packit 4b6dd7
	                                                       FALSE,
Packit 4b6dd7
	                                                       G_PARAM_READABLE | G_PARAM_STATIC_STRINGS));
Packit 4b6dd7
Packit 4b6dd7
	/**
Packit 4b6dd7
	 * GDataMediaContent:expression:
Packit 4b6dd7
	 *
Packit 4b6dd7
	 * Determines if the object is a sample or the full version of the object, or even if it is a continuous stream.
Packit 4b6dd7
	 *
Packit 4b6dd7
	 * For more information, see the <ulink type="http" url="http://video.search.yahoo.com/mrss">Media RSS specification</ulink>.
Packit 4b6dd7
	 *
Packit 4b6dd7
	 * Since: 0.4.0
Packit 4b6dd7
	 */
Packit 4b6dd7
	g_object_class_install_property (gobject_class, PROP_EXPRESSION,
Packit 4b6dd7
	                                 g_param_spec_enum ("expression",
Packit 4b6dd7
	                                                    "Expression", "Determines if the object is a sample or the full version of the object.",
Packit 4b6dd7
	                                                    GDATA_TYPE_MEDIA_EXPRESSION, GDATA_MEDIA_EXPRESSION_FULL,
Packit 4b6dd7
	                                                    G_PARAM_READABLE | G_PARAM_STATIC_STRINGS));
Packit 4b6dd7
Packit 4b6dd7
	/**
Packit 4b6dd7
	 * GDataMediaContent:duration:
Packit 4b6dd7
	 *
Packit 4b6dd7
	 * The number of seconds for which the media object plays.
Packit 4b6dd7
	 *
Packit 4b6dd7
	 * For more information, see the <ulink type="http" url="http://video.search.yahoo.com/mrss">Media RSS specification</ulink>.
Packit 4b6dd7
	 *
Packit 4b6dd7
	 * Since: 0.4.0
Packit 4b6dd7
	 */
Packit 4b6dd7
	g_object_class_install_property (gobject_class, PROP_DURATION,
Packit 4b6dd7
	                                 g_param_spec_int64 ("duration",
Packit 4b6dd7
	                                                     "Duration", "The number of seconds for which the media object plays.",
Packit 4b6dd7
	                                                     0, G_MAXINT64, 0,
Packit 4b6dd7
	                                                     G_PARAM_READABLE | G_PARAM_STATIC_STRINGS));
Packit 4b6dd7
Packit 4b6dd7
	/**
Packit 4b6dd7
	 * GDataMediaContent:height:
Packit 4b6dd7
	 *
Packit 4b6dd7
	 * The height of the media object.
Packit 4b6dd7
	 *
Packit 4b6dd7
	 * For more information, see the <ulink type="http" url="http://video.search.yahoo.com/mrss">Media RSS specification</ulink>.
Packit 4b6dd7
	 *
Packit 4b6dd7
	 * Since: 0.4.0
Packit 4b6dd7
	 */
Packit 4b6dd7
	g_object_class_install_property (gobject_class, PROP_HEIGHT,
Packit 4b6dd7
	                                 g_param_spec_uint ("height",
Packit 4b6dd7
	                                                    "Height", "The height of the media object.",
Packit 4b6dd7
	                                                    0, G_MAXUINT, 0,
Packit 4b6dd7
	                                                    G_PARAM_READABLE | G_PARAM_STATIC_STRINGS));
Packit 4b6dd7
Packit 4b6dd7
	/**
Packit 4b6dd7
	 * GDataMediaContent:width:
Packit 4b6dd7
	 *
Packit 4b6dd7
	 * The width of the media object.
Packit 4b6dd7
	 *
Packit 4b6dd7
	 * For more information, see the <ulink type="http" url="http://video.search.yahoo.com/mrss">Media RSS specification</ulink>.
Packit 4b6dd7
	 *
Packit 4b6dd7
	 * Since: 0.4.0
Packit 4b6dd7
	 */
Packit 4b6dd7
	g_object_class_install_property (gobject_class, PROP_WIDTH,
Packit 4b6dd7
	                                 g_param_spec_uint ("width",
Packit 4b6dd7
	                                                    "Width", "The width of the media object.",
Packit 4b6dd7
	                                                    0, G_MAXUINT, 0,
Packit 4b6dd7
	                                                    G_PARAM_READABLE | G_PARAM_STATIC_STRINGS));
Packit 4b6dd7
}
Packit 4b6dd7
Packit 4b6dd7
static void
Packit 4b6dd7
gdata_media_content_init (GDataMediaContent *self)
Packit 4b6dd7
{
Packit 4b6dd7
	self->priv = G_TYPE_INSTANCE_GET_PRIVATE (self, GDATA_TYPE_MEDIA_CONTENT, GDataMediaContentPrivate);
Packit 4b6dd7
}
Packit 4b6dd7
Packit 4b6dd7
static void
Packit 4b6dd7
gdata_media_content_finalize (GObject *object)
Packit 4b6dd7
{
Packit 4b6dd7
	GDataMediaContentPrivate *priv = GDATA_MEDIA_CONTENT (object)->priv;
Packit 4b6dd7
Packit 4b6dd7
	g_free (priv->uri);
Packit 4b6dd7
	g_free (priv->content_type);
Packit 4b6dd7
Packit 4b6dd7
	/* Chain up to the parent class */
Packit 4b6dd7
	G_OBJECT_CLASS (gdata_media_content_parent_class)->finalize (object);
Packit 4b6dd7
}
Packit 4b6dd7
Packit 4b6dd7
static void
Packit 4b6dd7
gdata_media_content_get_property (GObject *object, guint property_id, GValue *value, GParamSpec *pspec)
Packit 4b6dd7
{
Packit 4b6dd7
	GDataMediaContentPrivate *priv = GDATA_MEDIA_CONTENT (object)->priv;
Packit 4b6dd7
Packit 4b6dd7
	switch (property_id) {
Packit 4b6dd7
		case PROP_URI:
Packit 4b6dd7
			g_value_set_string (value, priv->uri);
Packit 4b6dd7
			break;
Packit 4b6dd7
		case PROP_FILESIZE:
Packit 4b6dd7
			g_value_set_ulong (value, priv->filesize);
Packit 4b6dd7
			break;
Packit 4b6dd7
		case PROP_CONTENT_TYPE:
Packit 4b6dd7
			g_value_set_string (value, priv->content_type);
Packit 4b6dd7
			break;
Packit 4b6dd7
		case PROP_MEDIUM:
Packit 4b6dd7
			g_value_set_enum (value, priv->medium);
Packit 4b6dd7
			break;
Packit 4b6dd7
		case PROP_IS_DEFAULT:
Packit 4b6dd7
			g_value_set_boolean (value, priv->is_default);
Packit 4b6dd7
			break;
Packit 4b6dd7
		case PROP_EXPRESSION:
Packit 4b6dd7
			g_value_set_enum (value, priv->expression);
Packit 4b6dd7
			break;
Packit 4b6dd7
		case PROP_DURATION:
Packit 4b6dd7
			g_value_set_int64 (value, priv->duration);
Packit 4b6dd7
			break;
Packit 4b6dd7
		case PROP_HEIGHT:
Packit 4b6dd7
			g_value_set_uint (value, priv->height);
Packit 4b6dd7
			break;
Packit 4b6dd7
		case PROP_WIDTH:
Packit 4b6dd7
			g_value_set_uint (value, priv->width);
Packit 4b6dd7
			break;
Packit 4b6dd7
		default:
Packit 4b6dd7
			/* We don't have any other property... */
Packit 4b6dd7
			G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
Packit 4b6dd7
			break;
Packit 4b6dd7
	}
Packit 4b6dd7
}
Packit 4b6dd7
Packit 4b6dd7
static gboolean
Packit 4b6dd7
pre_parse_xml (GDataParsable *parsable, xmlDoc *doc, xmlNode *root_node, gpointer user_data, GError **error)
Packit 4b6dd7
{
Packit 4b6dd7
	GDataMediaContentPrivate *priv = GDATA_MEDIA_CONTENT (parsable)->priv;
Packit 4b6dd7
	xmlChar *uri, *expression, *medium, *duration, *filesize, *height, *width;
Packit 4b6dd7
	gboolean is_default_bool;
Packit 4b6dd7
	GDataMediaExpression expression_enum;
Packit 4b6dd7
	GDataMediaMedium medium_enum;
Packit 4b6dd7
	guint height_uint, width_uint;
Packit 4b6dd7
	gint64 duration_int64;
Packit 4b6dd7
	gulong filesize_ulong;
Packit 4b6dd7
Packit 4b6dd7
	/* Parse isDefault */
Packit 4b6dd7
	if (gdata_parser_boolean_from_property (root_node, "isDefault", &is_default_bool, 0, error) == FALSE)
Packit 4b6dd7
		return FALSE;
Packit 4b6dd7
Packit 4b6dd7
	/* Parse expression */
Packit 4b6dd7
	expression = xmlGetProp (root_node, (xmlChar*) "expression");
Packit 4b6dd7
	if (expression == NULL || xmlStrcmp (expression, (xmlChar*) "full") == 0) {
Packit 4b6dd7
		expression_enum = GDATA_MEDIA_EXPRESSION_FULL;
Packit 4b6dd7
	} else if (xmlStrcmp (expression, (xmlChar*) "sample") == 0) {
Packit 4b6dd7
		expression_enum = GDATA_MEDIA_EXPRESSION_SAMPLE;
Packit 4b6dd7
	} else if (xmlStrcmp (expression, (xmlChar*) "nonstop") == 0) {
Packit 4b6dd7
		expression_enum = GDATA_MEDIA_EXPRESSION_NONSTOP;
Packit 4b6dd7
	} else {
Packit 4b6dd7
		gdata_parser_error_unknown_property_value (root_node, "expression", (gchar*) expression, error);
Packit 4b6dd7
		xmlFree (expression);
Packit 4b6dd7
		return FALSE;
Packit 4b6dd7
	}
Packit 4b6dd7
	xmlFree (expression);
Packit 4b6dd7
Packit 4b6dd7
	/* Parse medium */
Packit 4b6dd7
	medium = xmlGetProp (root_node, (xmlChar*) "medium");
Packit 4b6dd7
	if (medium == NULL) {
Packit 4b6dd7
		medium_enum = GDATA_MEDIA_UNKNOWN;
Packit 4b6dd7
	} else if (xmlStrcmp (medium, (xmlChar*) "image") == 0) {
Packit 4b6dd7
		medium_enum = GDATA_MEDIA_IMAGE;
Packit 4b6dd7
	} else if (xmlStrcmp (medium, (xmlChar*) "audio") == 0) {
Packit 4b6dd7
		medium_enum = GDATA_MEDIA_AUDIO;
Packit 4b6dd7
	} else if (xmlStrcmp (medium, (xmlChar*) "video") == 0) {
Packit 4b6dd7
		medium_enum = GDATA_MEDIA_VIDEO;
Packit 4b6dd7
	} else if (xmlStrcmp (medium, (xmlChar*) "document") == 0) {
Packit 4b6dd7
		medium_enum = GDATA_MEDIA_DOCUMENT;
Packit 4b6dd7
	} else if (xmlStrcmp (medium, (xmlChar*) "executable") == 0) {
Packit 4b6dd7
		medium_enum = GDATA_MEDIA_EXECUTABLE;
Packit 4b6dd7
	} else {
Packit 4b6dd7
		gdata_parser_error_unknown_property_value (root_node, "medium", (gchar*) medium, error);
Packit 4b6dd7
		xmlFree (medium);
Packit 4b6dd7
		return FALSE;
Packit 4b6dd7
	}
Packit 4b6dd7
	xmlFree (medium);
Packit 4b6dd7
Packit 4b6dd7
	/* Parse duration */
Packit 4b6dd7
	duration = xmlGetProp (root_node, (xmlChar*) "duration");
Packit 4b6dd7
	duration_int64 = (duration == NULL) ? 0 : g_ascii_strtoll ((gchar*) duration, NULL, 10);
Packit 4b6dd7
	xmlFree (duration);
Packit 4b6dd7
Packit 4b6dd7
	/* Parse filesize */
Packit 4b6dd7
	filesize = xmlGetProp (root_node, (xmlChar*) "fileSize");
Packit 4b6dd7
	filesize_ulong = (filesize == NULL) ? 0 : g_ascii_strtoull ((gchar*) filesize, NULL, 10);
Packit 4b6dd7
	xmlFree (filesize);
Packit 4b6dd7
Packit 4b6dd7
	/* Parse height and width */
Packit 4b6dd7
	height = xmlGetProp (root_node, (xmlChar*) "height");
Packit 4b6dd7
	height_uint = (height == NULL) ? 0 : g_ascii_strtoull ((gchar*) height, NULL, 10);
Packit 4b6dd7
	xmlFree (height);
Packit 4b6dd7
Packit 4b6dd7
	width = xmlGetProp (root_node, (xmlChar*) "width");
Packit 4b6dd7
	width_uint = (width == NULL) ? 0 : g_ascii_strtoull ((gchar*) width, NULL, 10);
Packit 4b6dd7
	xmlFree (width);
Packit 4b6dd7
Packit 4b6dd7
	/* Other properties */
Packit 4b6dd7
	uri = xmlGetProp (root_node, (xmlChar*) "url");
Packit 4b6dd7
	if (uri != NULL && *uri == '\0') {
Packit 4b6dd7
		xmlFree (uri);
Packit 4b6dd7
		return gdata_parser_error_required_property_missing (root_node, "url", error);
Packit 4b6dd7
	}
Packit 4b6dd7
Packit 4b6dd7
	priv->uri = (gchar*) uri;
Packit 4b6dd7
	priv->filesize = filesize_ulong;
Packit 4b6dd7
	priv->content_type = (gchar*) xmlGetProp (root_node, (xmlChar*) "type");
Packit 4b6dd7
	priv->medium = medium_enum;
Packit 4b6dd7
	priv->is_default = is_default_bool;
Packit 4b6dd7
	priv->expression = expression_enum;
Packit 4b6dd7
	priv->duration = duration_int64;
Packit 4b6dd7
	priv->height = height_uint;
Packit 4b6dd7
	priv->width = width_uint;
Packit 4b6dd7
Packit 4b6dd7
	return TRUE;
Packit 4b6dd7
}
Packit 4b6dd7
Packit 4b6dd7
static void
Packit 4b6dd7
get_namespaces (GDataParsable *parsable, GHashTable *namespaces)
Packit 4b6dd7
{
Packit 4b6dd7
	g_hash_table_insert (namespaces, (gchar*) "media", (gchar*) "http://search.yahoo.com/mrss/");
Packit 4b6dd7
}
Packit 4b6dd7
Packit 4b6dd7
/**
Packit 4b6dd7
 * gdata_media_content_get_uri:
Packit 4b6dd7
 * @self: a #GDataMediaContent
Packit 4b6dd7
 *
Packit 4b6dd7
 * Gets the #GDataMediaContent:uri property.
Packit 4b6dd7
 *
Packit 4b6dd7
 * Return value: the content's URI
Packit 4b6dd7
 *
Packit 4b6dd7
 * Since: 0.4.0
Packit 4b6dd7
 */
Packit 4b6dd7
const gchar *
Packit 4b6dd7
gdata_media_content_get_uri (GDataMediaContent *self)
Packit 4b6dd7
{
Packit 4b6dd7
	g_return_val_if_fail (GDATA_IS_MEDIA_CONTENT (self), NULL);
Packit 4b6dd7
	return self->priv->uri;
Packit 4b6dd7
}
Packit 4b6dd7
Packit 4b6dd7
/**
Packit 4b6dd7
 * gdata_media_content_get_filesize:
Packit 4b6dd7
 * @self: a #GDataMediaContent
Packit 4b6dd7
 *
Packit 4b6dd7
 * Gets the #GDataMediaContent:filesize property.
Packit 4b6dd7
 *
Packit 4b6dd7
 * Return value: the number of bytes in the content, or 0
Packit 4b6dd7
 *
Packit 4b6dd7
 * Since: 0.4.0
Packit 4b6dd7
 */
Packit 4b6dd7
gsize
Packit 4b6dd7
gdata_media_content_get_filesize (GDataMediaContent *self)
Packit 4b6dd7
{
Packit 4b6dd7
	g_return_val_if_fail (GDATA_IS_MEDIA_CONTENT (self), 0);
Packit 4b6dd7
	return self->priv->filesize;
Packit 4b6dd7
}
Packit 4b6dd7
Packit 4b6dd7
/**
Packit 4b6dd7
 * gdata_media_content_get_content_type:
Packit 4b6dd7
 * @self: a #GDataMediaContent
Packit 4b6dd7
 *
Packit 4b6dd7
 * Gets the #GDataMediaContent:content-type property.
Packit 4b6dd7
 *
Packit 4b6dd7
 * Return value: the content's content (MIME) type, or %NULL
Packit 4b6dd7
 *
Packit 4b6dd7
 * Since: 0.4.0
Packit 4b6dd7
 */
Packit 4b6dd7
const gchar *
Packit 4b6dd7
gdata_media_content_get_content_type (GDataMediaContent *self)
Packit 4b6dd7
{
Packit 4b6dd7
	g_return_val_if_fail (GDATA_IS_MEDIA_CONTENT (self), NULL);
Packit 4b6dd7
	return self->priv->content_type;
Packit 4b6dd7
}
Packit 4b6dd7
Packit 4b6dd7
/**
Packit 4b6dd7
 * gdata_media_content_get_medium:
Packit 4b6dd7
 * @self: a #GDataMediaContent
Packit 4b6dd7
 *
Packit 4b6dd7
 * Gets the #GDataMediaContent:medium property.
Packit 4b6dd7
 *
Packit 4b6dd7
 * Return value: the type of the content, or %GDATA_MEDIA_UNKNOWN
Packit 4b6dd7
 *
Packit 4b6dd7
 * Since: 0.4.0
Packit 4b6dd7
 */
Packit 4b6dd7
GDataMediaMedium
Packit 4b6dd7
gdata_media_content_get_medium (GDataMediaContent *self)
Packit 4b6dd7
{
Packit 4b6dd7
	g_return_val_if_fail (GDATA_IS_MEDIA_CONTENT (self), GDATA_MEDIA_UNKNOWN);
Packit 4b6dd7
	return self->priv->medium;
Packit 4b6dd7
}
Packit 4b6dd7
Packit 4b6dd7
/**
Packit 4b6dd7
 * gdata_media_content_is_default:
Packit 4b6dd7
 * @self: a #GDataMediaContent
Packit 4b6dd7
 *
Packit 4b6dd7
 * Gets the #GDataMediaContent:is-default property.
Packit 4b6dd7
 *
Packit 4b6dd7
 * Return value: %TRUE if the #GDataMediaContent is the default content for the media group, %FALSE otherwise
Packit 4b6dd7
 *
Packit 4b6dd7
 * Since: 0.4.0
Packit 4b6dd7
 */
Packit 4b6dd7
gboolean
Packit 4b6dd7
gdata_media_content_is_default (GDataMediaContent *self)
Packit 4b6dd7
{
Packit 4b6dd7
	g_return_val_if_fail (GDATA_IS_MEDIA_CONTENT (self), FALSE);
Packit 4b6dd7
	return self->priv->is_default;
Packit 4b6dd7
}
Packit 4b6dd7
Packit 4b6dd7
/**
Packit 4b6dd7
 * gdata_media_content_get_expression:
Packit 4b6dd7
 * @self: a #GDataMediaContent
Packit 4b6dd7
 *
Packit 4b6dd7
 * Gets the #GDataMediaContent:expression property.
Packit 4b6dd7
 *
Packit 4b6dd7
 * Return value: the content's expression, or %GDATA_MEDIA_EXPRESSION_FULL
Packit 4b6dd7
 *
Packit 4b6dd7
 * Since: 0.4.0
Packit 4b6dd7
 */
Packit 4b6dd7
GDataMediaExpression
Packit 4b6dd7
gdata_media_content_get_expression (GDataMediaContent *self)
Packit 4b6dd7
{
Packit 4b6dd7
	g_return_val_if_fail (GDATA_IS_MEDIA_CONTENT (self), GDATA_MEDIA_EXPRESSION_FULL);
Packit 4b6dd7
	return self->priv->expression;
Packit 4b6dd7
}
Packit 4b6dd7
Packit 4b6dd7
/**
Packit 4b6dd7
 * gdata_media_content_get_duration:
Packit 4b6dd7
 * @self: a #GDataMediaContent
Packit 4b6dd7
 *
Packit 4b6dd7
 * Gets the #GDataMediaContent:duration property.
Packit 4b6dd7
 *
Packit 4b6dd7
 * Return value: the content's duration in seconds, or 0
Packit 4b6dd7
 *
Packit 4b6dd7
 * Since: 0.4.0
Packit 4b6dd7
 */
Packit 4b6dd7
gint64
Packit 4b6dd7
gdata_media_content_get_duration (GDataMediaContent *self)
Packit 4b6dd7
{
Packit 4b6dd7
	g_return_val_if_fail (GDATA_IS_MEDIA_CONTENT (self), 0);
Packit 4b6dd7
	return self->priv->duration;
Packit 4b6dd7
}
Packit 4b6dd7
Packit 4b6dd7
/**
Packit 4b6dd7
 * gdata_media_content_get_height:
Packit 4b6dd7
 * @self: a #GDataMediaContent
Packit 4b6dd7
 *
Packit 4b6dd7
 * Gets the #GDataMediaContent:height property.
Packit 4b6dd7
 *
Packit 4b6dd7
 * Return value: the content's height in pixels, or 0
Packit 4b6dd7
 *
Packit 4b6dd7
 * Since: 0.4.0
Packit 4b6dd7
 */
Packit 4b6dd7
guint
Packit 4b6dd7
gdata_media_content_get_height (GDataMediaContent *self)
Packit 4b6dd7
{
Packit 4b6dd7
	g_return_val_if_fail (GDATA_IS_MEDIA_CONTENT (self), 0);
Packit 4b6dd7
	return self->priv->height;
Packit 4b6dd7
}
Packit 4b6dd7
Packit 4b6dd7
/**
Packit 4b6dd7
 * gdata_media_content_get_width:
Packit 4b6dd7
 * @self: a #GDataMediaContent
Packit 4b6dd7
 *
Packit 4b6dd7
 * Gets the #GDataMediaContent:width property.
Packit 4b6dd7
 *
Packit 4b6dd7
 * Return value: the content's width in pixels, or 0
Packit 4b6dd7
 *
Packit 4b6dd7
 * Since: 0.4.0
Packit 4b6dd7
 */
Packit 4b6dd7
guint
Packit 4b6dd7
gdata_media_content_get_width (GDataMediaContent *self)
Packit 4b6dd7
{
Packit 4b6dd7
	g_return_val_if_fail (GDATA_IS_MEDIA_CONTENT (self), 0);
Packit 4b6dd7
	return self->priv->width;
Packit 4b6dd7
}
Packit 4b6dd7
Packit 4b6dd7
/**
Packit 4b6dd7
 * gdata_media_content_download:
Packit 4b6dd7
 * @self: a #GDataMediaContent
Packit 4b6dd7
 * @service: the #GDataService
Packit 4b6dd7
 * @cancellable: (allow-none): a #GCancellable for the entire download stream, or %NULL
Packit 4b6dd7
 * @error: a #GError, or %NULL
Packit 4b6dd7
 *
Packit 4b6dd7
 * Downloads and returns a #GDataDownloadStream allowing the content represented by @self to be read.
Packit 4b6dd7
 *
Packit 4b6dd7
 * To get the content type of the downloaded data, gdata_download_stream_get_content_type() can be called on the returned #GDataDownloadStream.
Packit 4b6dd7
 * Calling gdata_download_stream_get_content_length() on the stream will not return a meaningful result, however, as the stream is encoded in chunks,
Packit 4b6dd7
 * rather than by content length.
Packit 4b6dd7
 *
Packit 4b6dd7
 * In order to cancel the download, a #GCancellable passed in to @cancellable must be cancelled using g_cancellable_cancel(). Cancelling the individual
Packit 4b6dd7
 * #GInputStream operations on the #GDataDownloadStream will not cancel the entire download; merely the read or close operation in question. See the
Packit 4b6dd7
 * #GDataDownloadStream:cancellable for more details.
Packit 4b6dd7
 *
Packit 4b6dd7
 * Return value: (transfer full): a #GDataDownloadStream to download the content with, or %NULL; unref with g_object_unref()
Packit 4b6dd7
 *
Packit 4b6dd7
 * Since: 0.8.0
Packit 4b6dd7
 */
Packit 4b6dd7
GDataDownloadStream *
Packit 4b6dd7
gdata_media_content_download (GDataMediaContent *self, GDataService *service, GCancellable *cancellable, GError **error)
Packit 4b6dd7
{
Packit 4b6dd7
	const gchar *src_uri;
Packit 4b6dd7
Packit 4b6dd7
	g_return_val_if_fail (GDATA_IS_MEDIA_CONTENT (self), NULL);
Packit 4b6dd7
	g_return_val_if_fail (GDATA_IS_SERVICE (service), NULL);
Packit 4b6dd7
	g_return_val_if_fail (cancellable == NULL || G_IS_CANCELLABLE (cancellable), NULL);
Packit 4b6dd7
	g_return_val_if_fail (error == NULL || *error == NULL, NULL);
Packit 4b6dd7
Packit 4b6dd7
	/* We keep a GError in the argument list so that we can add authentication errors, etc., in future if necessary */
Packit 4b6dd7
Packit 4b6dd7
	/* Get the download URI and create a stream for it */
Packit 4b6dd7
	src_uri = gdata_media_content_get_uri (self);
Packit 4b6dd7
	return GDATA_DOWNLOAD_STREAM (gdata_download_stream_new (service, NULL, src_uri, cancellable));
Packit 4b6dd7
}