|
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-group
|
|
Packit |
4b6dd7 |
* @short_description: Media RSS group element
|
|
Packit |
4b6dd7 |
* @stability: Stable
|
|
Packit |
4b6dd7 |
* @include: gdata/media/gdata-media-group.h
|
|
Packit |
4b6dd7 |
*
|
|
Packit |
4b6dd7 |
* #GDataMediaGroup represents a "group" element from the
|
|
Packit |
4b6dd7 |
* <ulink type="http" url="http://video.search.yahoo.com/mrss">Media RSS specification</ulink>.
|
|
Packit |
4b6dd7 |
*
|
|
Packit |
4b6dd7 |
* It is private API, since implementing classes are likely to proxy the properties and functions
|
|
Packit |
4b6dd7 |
* of #GDataMediaGroup as appropriate; most entry types which implement #GDataMediaGroup have no use
|
|
Packit |
4b6dd7 |
* for most of its properties, and it would be unnecessary and confusing to expose #GDataMediaGroup itself.
|
|
Packit |
4b6dd7 |
*
|
|
Packit |
4b6dd7 |
* For this reason, properties have not been implemented on #GDataMediaGroup (yet).
|
|
Packit |
4b6dd7 |
*/
|
|
Packit |
4b6dd7 |
|
|
Packit |
4b6dd7 |
#include <glib.h>
|
|
Packit |
4b6dd7 |
#include <libxml/parser.h>
|
|
Packit |
4b6dd7 |
#include <string.h>
|
|
Packit |
4b6dd7 |
|
|
Packit |
4b6dd7 |
#include "gdata-media-group.h"
|
|
Packit |
4b6dd7 |
#include "gdata-parsable.h"
|
|
Packit |
4b6dd7 |
#include "gdata-parser.h"
|
|
Packit |
4b6dd7 |
#include "gdata-private.h"
|
|
Packit |
4b6dd7 |
#include "media/gdata-media-category.h"
|
|
Packit |
4b6dd7 |
#include "media/gdata-media-credit.h"
|
|
Packit |
4b6dd7 |
#include "media/gdata-media-thumbnail.h"
|
|
Packit |
4b6dd7 |
|
|
Packit |
4b6dd7 |
static void gdata_media_group_dispose (GObject *object);
|
|
Packit |
4b6dd7 |
static void gdata_media_group_finalize (GObject *object);
|
|
Packit |
4b6dd7 |
static gboolean parse_xml (GDataParsable *parsable, xmlDoc *doc, xmlNode *node, gpointer user_data, GError **error);
|
|
Packit |
4b6dd7 |
static void get_xml (GDataParsable *parsable, GString *xml_string);
|
|
Packit |
4b6dd7 |
static void get_namespaces (GDataParsable *parsable, GHashTable *namespaces);
|
|
Packit |
4b6dd7 |
|
|
Packit |
4b6dd7 |
struct _GDataMediaGroupPrivate {
|
|
Packit |
4b6dd7 |
gchar **keywords;
|
|
Packit |
4b6dd7 |
gchar *player_uri;
|
|
Packit |
4b6dd7 |
GHashTable *restricted_countries;
|
|
Packit |
4b6dd7 |
gchar *simple_rating;
|
|
Packit |
4b6dd7 |
gchar *mpaa_rating;
|
|
Packit |
4b6dd7 |
gchar *v_chip_rating;
|
|
Packit |
4b6dd7 |
GList *thumbnails; /* GDataMediaThumbnail */
|
|
Packit |
4b6dd7 |
gchar *title;
|
|
Packit |
4b6dd7 |
GDataMediaCategory *category;
|
|
Packit |
4b6dd7 |
GList *contents; /* GDataMediaContent */
|
|
Packit |
4b6dd7 |
GDataMediaCredit *credit;
|
|
Packit |
4b6dd7 |
gchar *description;
|
|
Packit |
4b6dd7 |
};
|
|
Packit |
4b6dd7 |
|
|
Packit |
4b6dd7 |
G_DEFINE_TYPE (GDataMediaGroup, gdata_media_group, GDATA_TYPE_PARSABLE)
|
|
Packit |
4b6dd7 |
|
|
Packit |
4b6dd7 |
static void
|
|
Packit |
4b6dd7 |
gdata_media_group_class_init (GDataMediaGroupClass *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 (GDataMediaGroupPrivate));
|
|
Packit |
4b6dd7 |
|
|
Packit |
4b6dd7 |
gobject_class->dispose = gdata_media_group_dispose;
|
|
Packit |
4b6dd7 |
gobject_class->finalize = gdata_media_group_finalize;
|
|
Packit |
4b6dd7 |
|
|
Packit |
4b6dd7 |
parsable_class->parse_xml = parse_xml;
|
|
Packit |
4b6dd7 |
parsable_class->get_xml = get_xml;
|
|
Packit |
4b6dd7 |
parsable_class->get_namespaces = get_namespaces;
|
|
Packit |
4b6dd7 |
parsable_class->element_name = "group";
|
|
Packit |
4b6dd7 |
parsable_class->element_namespace = "media";
|
|
Packit |
4b6dd7 |
}
|
|
Packit |
4b6dd7 |
|
|
Packit |
4b6dd7 |
static void
|
|
Packit |
4b6dd7 |
gdata_media_group_init (GDataMediaGroup *self)
|
|
Packit |
4b6dd7 |
{
|
|
Packit |
4b6dd7 |
self->priv = G_TYPE_INSTANCE_GET_PRIVATE (self, GDATA_TYPE_MEDIA_GROUP, GDataMediaGroupPrivate);
|
|
Packit |
4b6dd7 |
self->priv->restricted_countries = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, NULL);
|
|
Packit |
4b6dd7 |
}
|
|
Packit |
4b6dd7 |
|
|
Packit |
4b6dd7 |
static void
|
|
Packit |
4b6dd7 |
gdata_media_group_dispose (GObject *object)
|
|
Packit |
4b6dd7 |
{
|
|
Packit |
4b6dd7 |
GDataMediaGroupPrivate *priv = GDATA_MEDIA_GROUP (object)->priv;
|
|
Packit |
4b6dd7 |
|
|
Packit |
4b6dd7 |
if (priv->category != NULL)
|
|
Packit |
4b6dd7 |
g_object_unref (priv->category);
|
|
Packit |
4b6dd7 |
priv->category = NULL;
|
|
Packit |
4b6dd7 |
|
|
Packit |
4b6dd7 |
if (priv->credit != NULL)
|
|
Packit |
4b6dd7 |
g_object_unref (priv->credit);
|
|
Packit |
4b6dd7 |
priv->credit = NULL;
|
|
Packit |
4b6dd7 |
|
|
Packit |
4b6dd7 |
if (priv->contents != NULL) {
|
|
Packit |
4b6dd7 |
g_list_foreach (priv->contents, (GFunc) g_object_unref, NULL);
|
|
Packit |
4b6dd7 |
g_list_free (priv->contents);
|
|
Packit |
4b6dd7 |
}
|
|
Packit |
4b6dd7 |
priv->contents = NULL;
|
|
Packit |
4b6dd7 |
|
|
Packit |
4b6dd7 |
if (priv->thumbnails != NULL) {
|
|
Packit |
4b6dd7 |
g_list_foreach (priv->thumbnails, (GFunc) g_object_unref, NULL);
|
|
Packit |
4b6dd7 |
g_list_free (priv->thumbnails);
|
|
Packit |
4b6dd7 |
}
|
|
Packit |
4b6dd7 |
priv->thumbnails = NULL;
|
|
Packit |
4b6dd7 |
|
|
Packit |
4b6dd7 |
/* Chain up to the parent class */
|
|
Packit |
4b6dd7 |
G_OBJECT_CLASS (gdata_media_group_parent_class)->dispose (object);
|
|
Packit |
4b6dd7 |
}
|
|
Packit |
4b6dd7 |
|
|
Packit |
4b6dd7 |
static void
|
|
Packit |
4b6dd7 |
gdata_media_group_finalize (GObject *object)
|
|
Packit |
4b6dd7 |
{
|
|
Packit |
4b6dd7 |
GDataMediaGroupPrivate *priv = GDATA_MEDIA_GROUP (object)->priv;
|
|
Packit |
4b6dd7 |
|
|
Packit |
4b6dd7 |
g_strfreev (priv->keywords);
|
|
Packit |
4b6dd7 |
g_free (priv->player_uri);
|
|
Packit |
4b6dd7 |
g_free (priv->v_chip_rating);
|
|
Packit |
4b6dd7 |
g_free (priv->mpaa_rating);
|
|
Packit |
4b6dd7 |
g_free (priv->simple_rating);
|
|
Packit |
4b6dd7 |
g_hash_table_destroy (priv->restricted_countries);
|
|
Packit |
4b6dd7 |
g_free (priv->title);
|
|
Packit |
4b6dd7 |
g_free (priv->description);
|
|
Packit |
4b6dd7 |
|
|
Packit |
4b6dd7 |
/* Chain up to the parent class */
|
|
Packit |
4b6dd7 |
G_OBJECT_CLASS (gdata_media_group_parent_class)->finalize (object);
|
|
Packit |
4b6dd7 |
}
|
|
Packit |
4b6dd7 |
|
|
Packit |
4b6dd7 |
static gboolean
|
|
Packit |
4b6dd7 |
parse_xml (GDataParsable *parsable, xmlDoc *doc, xmlNode *node, gpointer user_data, GError **error)
|
|
Packit |
4b6dd7 |
{
|
|
Packit |
4b6dd7 |
gboolean success;
|
|
Packit |
4b6dd7 |
GDataMediaGroup *self = GDATA_MEDIA_GROUP (parsable);
|
|
Packit |
4b6dd7 |
|
|
Packit |
4b6dd7 |
if (gdata_parser_is_namespace (node, "http://search.yahoo.com/mrss/") == TRUE) {
|
|
Packit |
4b6dd7 |
if (gdata_parser_string_from_element (node, "title", P_NONE, &(self->priv->title), &success, error) == TRUE ||
|
|
Packit |
4b6dd7 |
gdata_parser_string_from_element (node, "description", P_NONE, &(self->priv->description), &success, error) == TRUE ||
|
|
Packit |
4b6dd7 |
gdata_parser_object_from_element_setter (node, "category", P_REQUIRED, GDATA_TYPE_MEDIA_CATEGORY,
|
|
Packit |
4b6dd7 |
gdata_media_group_set_category, self, &success, error) == TRUE ||
|
|
Packit |
4b6dd7 |
gdata_parser_object_from_element_setter (node, "content", P_REQUIRED, GDATA_TYPE_MEDIA_CONTENT,
|
|
Packit |
4b6dd7 |
_gdata_media_group_add_content, self, &success, error) == TRUE ||
|
|
Packit |
4b6dd7 |
gdata_parser_object_from_element_setter (node, "thumbnail", P_REQUIRED, GDATA_TYPE_MEDIA_THUMBNAIL,
|
|
Packit |
4b6dd7 |
_gdata_media_group_add_thumbnail, self, &success, error) == TRUE ||
|
|
Packit |
4b6dd7 |
gdata_parser_object_from_element (node, "credit", P_REQUIRED | P_NO_DUPES, GDATA_TYPE_MEDIA_CREDIT,
|
|
Packit |
4b6dd7 |
&(self->priv->credit), &success, error) == TRUE) {
|
|
Packit |
4b6dd7 |
return success;
|
|
Packit |
4b6dd7 |
} else if (xmlStrcmp (node->name, (xmlChar*) "keywords") == 0) {
|
|
Packit |
4b6dd7 |
/* media:keywords */
|
|
Packit |
4b6dd7 |
guint i;
|
|
Packit |
4b6dd7 |
xmlChar *text = xmlNodeListGetString (node->doc, node->children, TRUE);
|
|
Packit |
4b6dd7 |
|
|
Packit |
4b6dd7 |
g_strfreev (self->priv->keywords);
|
|
Packit |
4b6dd7 |
if (text == NULL) {
|
|
Packit |
4b6dd7 |
self->priv->keywords = NULL;
|
|
Packit |
4b6dd7 |
return TRUE;
|
|
Packit |
4b6dd7 |
}
|
|
Packit |
4b6dd7 |
|
|
Packit |
4b6dd7 |
self->priv->keywords = g_strsplit ((gchar*) text, ",", -1);
|
|
Packit |
4b6dd7 |
xmlFree (text);
|
|
Packit |
4b6dd7 |
|
|
Packit |
4b6dd7 |
for (i = 0; self->priv->keywords[i] != NULL; i++) {
|
|
Packit |
4b6dd7 |
gchar *comma, *start = self->priv->keywords[i];
|
|
Packit |
4b6dd7 |
gchar *end = start + strlen (start);
|
|
Packit |
4b6dd7 |
|
|
Packit |
4b6dd7 |
/* Strip any whitespace from the ends of the keyword */
|
|
Packit |
4b6dd7 |
g_strstrip (start);
|
|
Packit |
4b6dd7 |
|
|
Packit |
4b6dd7 |
/* Unescape any %2Cs in the keyword to commas in-place */
|
|
Packit |
4b6dd7 |
while ((comma = g_strstr_len (start, -1, "%2C")) != NULL) {
|
|
Packit |
4b6dd7 |
/* Unescape the comma */
|
|
Packit |
4b6dd7 |
*comma = ',';
|
|
Packit |
4b6dd7 |
|
|
Packit |
4b6dd7 |
/* Move forwards, skipping the comma */
|
|
Packit |
4b6dd7 |
comma++;
|
|
Packit |
4b6dd7 |
end -= 2;
|
|
Packit |
4b6dd7 |
|
|
Packit |
4b6dd7 |
/* Shift the remainder of the string downwards */
|
|
Packit |
4b6dd7 |
g_memmove (comma, comma + 2, end - comma);
|
|
Packit |
4b6dd7 |
*end = '\0';
|
|
Packit |
4b6dd7 |
}
|
|
Packit |
4b6dd7 |
}
|
|
Packit |
4b6dd7 |
} else if (xmlStrcmp (node->name, (xmlChar*) "player") == 0) {
|
|
Packit |
4b6dd7 |
/* media:player */
|
|
Packit |
4b6dd7 |
xmlChar *player_uri = xmlGetProp (node, (xmlChar*) "url");
|
|
Packit |
4b6dd7 |
g_free (self->priv->player_uri);
|
|
Packit |
4b6dd7 |
self->priv->player_uri = (gchar*) player_uri;
|
|
Packit |
4b6dd7 |
} else if (xmlStrcmp (node->name, (xmlChar*) "rating") == 0) {
|
|
Packit |
4b6dd7 |
/* media:rating */
|
|
Packit |
4b6dd7 |
xmlChar *scheme;
|
|
Packit |
4b6dd7 |
|
|
Packit |
4b6dd7 |
/* The possible schemes are defined here:
|
|
Packit |
4b6dd7 |
* • http://video.search.yahoo.com/mrss
|
|
Packit |
4b6dd7 |
* • http://code.google.com/apis/youtube/2.0/reference.html#youtube_data_api_tag_media:rating
|
|
Packit |
4b6dd7 |
*/
|
|
Packit |
4b6dd7 |
scheme = xmlGetProp (node, (xmlChar*) "scheme");
|
|
Packit |
4b6dd7 |
|
|
Packit |
4b6dd7 |
if (scheme == NULL || xmlStrcmp (scheme, (xmlChar*) "urn:simple") == 0) {
|
|
Packit |
4b6dd7 |
/* Options: adult, nonadult */
|
|
Packit |
4b6dd7 |
gdata_parser_string_from_element (node, "rating", P_REQUIRED | P_NON_EMPTY, &(self->priv->simple_rating),
|
|
Packit |
4b6dd7 |
&success, error);
|
|
Packit |
4b6dd7 |
} else if (xmlStrcmp (scheme, (xmlChar*) "urn:mpaa") == 0) {
|
|
Packit |
4b6dd7 |
/* Options: g, pg, pg-13, r, nc-17 */
|
|
Packit |
4b6dd7 |
gdata_parser_string_from_element (node, "rating", P_REQUIRED | P_NON_EMPTY, &(self->priv->mpaa_rating),
|
|
Packit |
4b6dd7 |
&success, error);
|
|
Packit |
4b6dd7 |
} else if (xmlStrcmp (scheme, (xmlChar*) "urn:v-chip") == 0) {
|
|
Packit |
4b6dd7 |
/* Options: tv-y, tv-y7, tv-y7-fv, tv-g, tv-pg, tv-14, tv-ma */
|
|
Packit |
4b6dd7 |
gdata_parser_string_from_element (node, "rating", P_REQUIRED | P_NON_EMPTY, &(self->priv->v_chip_rating),
|
|
Packit |
4b6dd7 |
&success, error);
|
|
Packit |
4b6dd7 |
} else if (xmlStrcmp (scheme, (xmlChar*) "http://gdata.youtube.com/schemas/2007#mediarating") == 0) {
|
|
Packit |
4b6dd7 |
/* No content, but we do get a list of countries. There's nothing like overloading the semantics of XML elements
|
|
Packit |
4b6dd7 |
* to brighten up one's day. */
|
|
Packit |
4b6dd7 |
xmlChar *countries;
|
|
Packit |
4b6dd7 |
|
|
Packit |
4b6dd7 |
countries = xmlGetProp (node, (xmlChar*) "country");
|
|
Packit |
4b6dd7 |
|
|
Packit |
4b6dd7 |
if (countries != NULL) {
|
|
Packit |
4b6dd7 |
gchar **country_list, **country;
|
|
Packit |
4b6dd7 |
|
|
Packit |
4b6dd7 |
/* It's either a comma-separated list of countries, or the value "all" */
|
|
Packit |
4b6dd7 |
country_list = g_strsplit ((const gchar*) countries, ",", -1);
|
|
Packit |
4b6dd7 |
xmlFree (countries);
|
|
Packit |
4b6dd7 |
|
|
Packit |
4b6dd7 |
/* Add all the listed countries to the restricted countries table */
|
|
Packit |
4b6dd7 |
for (country = country_list; *country != NULL; country++) {
|
|
Packit |
4b6dd7 |
g_hash_table_insert (self->priv->restricted_countries, *country, GUINT_TO_POINTER (TRUE));
|
|
Packit |
4b6dd7 |
}
|
|
Packit |
4b6dd7 |
|
|
Packit |
4b6dd7 |
g_free (country_list);
|
|
Packit |
4b6dd7 |
} else {
|
|
Packit |
4b6dd7 |
/* Assume it's restricted in all countries */
|
|
Packit |
4b6dd7 |
g_hash_table_insert (self->priv->restricted_countries, g_strdup ("all"), GUINT_TO_POINTER (TRUE));
|
|
Packit |
4b6dd7 |
}
|
|
Packit |
4b6dd7 |
|
|
Packit |
4b6dd7 |
success = TRUE;
|
|
Packit |
4b6dd7 |
} else {
|
|
Packit |
4b6dd7 |
/* Error */
|
|
Packit |
4b6dd7 |
gdata_parser_error_unknown_property_value (node, "scheme", (gchar*) scheme, error);
|
|
Packit |
4b6dd7 |
success = FALSE;
|
|
Packit |
4b6dd7 |
}
|
|
Packit |
4b6dd7 |
|
|
Packit |
4b6dd7 |
xmlFree (scheme);
|
|
Packit |
4b6dd7 |
|
|
Packit |
4b6dd7 |
return success;
|
|
Packit |
4b6dd7 |
} else if (xmlStrcmp (node->name, (xmlChar*) "restriction") == 0) {
|
|
Packit |
4b6dd7 |
/* media:restriction */
|
|
Packit |
4b6dd7 |
xmlChar *type, *countries, *relationship;
|
|
Packit |
4b6dd7 |
gchar **country_list, **country;
|
|
Packit |
4b6dd7 |
gboolean relationship_bool;
|
|
Packit |
4b6dd7 |
|
|
Packit |
4b6dd7 |
/* Check the type property is "country" */
|
|
Packit |
4b6dd7 |
type = xmlGetProp (node, (xmlChar*) "type");
|
|
Packit |
4b6dd7 |
if (xmlStrcmp (type, (xmlChar*) "country") != 0) {
|
|
Packit |
4b6dd7 |
gdata_parser_error_unknown_property_value (node, "type", (gchar*) type, error);
|
|
Packit |
4b6dd7 |
xmlFree (type);
|
|
Packit |
4b6dd7 |
return FALSE;
|
|
Packit |
4b6dd7 |
}
|
|
Packit |
4b6dd7 |
xmlFree (type);
|
|
Packit |
4b6dd7 |
|
|
Packit |
4b6dd7 |
relationship = xmlGetProp (node, (xmlChar*) "relationship");
|
|
Packit |
4b6dd7 |
if (xmlStrcmp (relationship, (xmlChar*) "allow") == 0) {
|
|
Packit |
4b6dd7 |
relationship_bool = FALSE; /* it's *not* a restricted country */
|
|
Packit |
4b6dd7 |
} else if (xmlStrcmp (relationship, (xmlChar*) "deny") == 0) {
|
|
Packit |
4b6dd7 |
relationship_bool = TRUE; /* it *is* a restricted country */
|
|
Packit |
4b6dd7 |
} else {
|
|
Packit |
4b6dd7 |
gdata_parser_error_unknown_property_value (node, "relationship", (gchar*) relationship, error);
|
|
Packit |
4b6dd7 |
xmlFree (relationship);
|
|
Packit |
4b6dd7 |
return FALSE;
|
|
Packit |
4b6dd7 |
}
|
|
Packit |
4b6dd7 |
xmlFree (relationship);
|
|
Packit |
4b6dd7 |
|
|
Packit |
4b6dd7 |
countries = xmlNodeListGetString (doc, node->children, TRUE);
|
|
Packit |
4b6dd7 |
country_list = g_strsplit ((const gchar*) countries, " ", -1);
|
|
Packit |
4b6dd7 |
xmlFree (countries);
|
|
Packit |
4b6dd7 |
|
|
Packit |
4b6dd7 |
/* Add "all" to the table, since it's an exception table */
|
|
Packit |
4b6dd7 |
g_hash_table_insert (self->priv->restricted_countries, g_strdup ("all"), GUINT_TO_POINTER (!relationship_bool));
|
|
Packit |
4b6dd7 |
|
|
Packit |
4b6dd7 |
/* Add all the listed countries to the restricted countries table */
|
|
Packit |
4b6dd7 |
for (country = country_list; *country != NULL; country++)
|
|
Packit |
4b6dd7 |
g_hash_table_insert (self->priv->restricted_countries, *country, GUINT_TO_POINTER (relationship_bool));
|
|
Packit |
4b6dd7 |
g_free (country_list);
|
|
Packit |
4b6dd7 |
} else {
|
|
Packit |
4b6dd7 |
return GDATA_PARSABLE_CLASS (gdata_media_group_parent_class)->parse_xml (parsable, doc, node, user_data, error);
|
|
Packit |
4b6dd7 |
}
|
|
Packit |
4b6dd7 |
} else {
|
|
Packit |
4b6dd7 |
return GDATA_PARSABLE_CLASS (gdata_media_group_parent_class)->parse_xml (parsable, doc, node, user_data, error);
|
|
Packit |
4b6dd7 |
}
|
|
Packit |
4b6dd7 |
|
|
Packit |
4b6dd7 |
return TRUE;
|
|
Packit |
4b6dd7 |
}
|
|
Packit |
4b6dd7 |
|
|
Packit |
4b6dd7 |
static void
|
|
Packit |
4b6dd7 |
get_xml (GDataParsable *parsable, GString *xml_string)
|
|
Packit |
4b6dd7 |
{
|
|
Packit |
4b6dd7 |
GDataMediaGroupPrivate *priv = GDATA_MEDIA_GROUP (parsable)->priv;
|
|
Packit |
4b6dd7 |
|
|
Packit |
4b6dd7 |
/* Media category */
|
|
Packit |
4b6dd7 |
if (priv->category != NULL)
|
|
Packit |
4b6dd7 |
_gdata_parsable_get_xml (GDATA_PARSABLE (priv->category), xml_string, FALSE);
|
|
Packit |
4b6dd7 |
|
|
Packit |
4b6dd7 |
if (priv->title != NULL)
|
|
Packit |
4b6dd7 |
gdata_parser_string_append_escaped (xml_string, "<media:title type='plain'>", priv->title, "</media:title>");
|
|
Packit |
4b6dd7 |
|
|
Packit |
4b6dd7 |
if (priv->description != NULL)
|
|
Packit |
4b6dd7 |
gdata_parser_string_append_escaped (xml_string, "<media:description type='plain'>", priv->description, "</media:description>");
|
|
Packit |
4b6dd7 |
|
|
Packit |
4b6dd7 |
if (priv->keywords != NULL) {
|
|
Packit |
4b6dd7 |
guint i;
|
|
Packit |
4b6dd7 |
|
|
Packit |
4b6dd7 |
g_string_append (xml_string, "<media:keywords>");
|
|
Packit |
4b6dd7 |
|
|
Packit |
4b6dd7 |
/* Add each keyword to the text content, comma-separated from the previous one */
|
|
Packit |
4b6dd7 |
for (i = 0; priv->keywords[i] != NULL; i++) {
|
|
Packit |
4b6dd7 |
const gchar *comma, *start = priv->keywords[i];
|
|
Packit |
4b6dd7 |
|
|
Packit |
4b6dd7 |
/* Delimit the previous keyword */
|
|
Packit |
4b6dd7 |
if (i != 0)
|
|
Packit |
4b6dd7 |
g_string_append_c (xml_string, ',');
|
|
Packit |
4b6dd7 |
|
|
Packit |
4b6dd7 |
/* Escape any commas in the keyword to %2C */
|
|
Packit |
4b6dd7 |
while ((comma = g_utf8_strchr (start, -1, ',')) != NULL) {
|
|
Packit |
4b6dd7 |
/* Copy the span */
|
|
Packit |
4b6dd7 |
gchar *span = g_strndup (start, comma - start);
|
|
Packit |
4b6dd7 |
gdata_parser_string_append_escaped (xml_string, NULL, span, NULL);
|
|
Packit |
4b6dd7 |
g_free (span);
|
|
Packit |
4b6dd7 |
|
|
Packit |
4b6dd7 |
/* Add an escaped comma */
|
|
Packit |
4b6dd7 |
g_string_append (xml_string, "%2C");
|
|
Packit |
4b6dd7 |
|
|
Packit |
4b6dd7 |
/* Move forwards, skipping the comma */
|
|
Packit |
4b6dd7 |
start = comma + 1;
|
|
Packit |
4b6dd7 |
}
|
|
Packit |
4b6dd7 |
|
|
Packit |
4b6dd7 |
/* Append the rest of the string (the entire string if there were no commas) */
|
|
Packit |
4b6dd7 |
gdata_parser_string_append_escaped (xml_string, NULL, start, NULL);
|
|
Packit |
4b6dd7 |
}
|
|
Packit |
4b6dd7 |
|
|
Packit |
4b6dd7 |
g_string_append (xml_string, "</media:keywords>");
|
|
Packit |
4b6dd7 |
}
|
|
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_group_get_title:
|
|
Packit |
4b6dd7 |
* @self: a #GDataMediaGroup
|
|
Packit |
4b6dd7 |
*
|
|
Packit |
4b6dd7 |
* Gets the #GDataMediaGroup:title property.
|
|
Packit |
4b6dd7 |
*
|
|
Packit |
4b6dd7 |
* Return value: the group's title, or %NULL
|
|
Packit |
4b6dd7 |
*
|
|
Packit |
4b6dd7 |
* Since: 0.4.0
|
|
Packit |
4b6dd7 |
*/
|
|
Packit |
4b6dd7 |
const gchar *
|
|
Packit |
4b6dd7 |
gdata_media_group_get_title (GDataMediaGroup *self)
|
|
Packit |
4b6dd7 |
{
|
|
Packit |
4b6dd7 |
g_return_val_if_fail (GDATA_IS_MEDIA_GROUP (self), NULL);
|
|
Packit |
4b6dd7 |
return self->priv->title;
|
|
Packit |
4b6dd7 |
}
|
|
Packit |
4b6dd7 |
|
|
Packit |
4b6dd7 |
/**
|
|
Packit |
4b6dd7 |
* gdata_media_group_set_title:
|
|
Packit |
4b6dd7 |
* @self: a #GDataMediaGroup
|
|
Packit |
4b6dd7 |
* @title: (allow-none): the group's new title, or %NULL
|
|
Packit |
4b6dd7 |
*
|
|
Packit |
4b6dd7 |
* Sets the #GDataMediaGroup:title property to @title.
|
|
Packit |
4b6dd7 |
*
|
|
Packit |
4b6dd7 |
* Set @title to %NULL to unset the property.
|
|
Packit |
4b6dd7 |
*
|
|
Packit |
4b6dd7 |
* Since: 0.4.0
|
|
Packit |
4b6dd7 |
*/
|
|
Packit |
4b6dd7 |
void
|
|
Packit |
4b6dd7 |
gdata_media_group_set_title (GDataMediaGroup *self, const gchar *title)
|
|
Packit |
4b6dd7 |
{
|
|
Packit |
4b6dd7 |
g_return_if_fail (GDATA_IS_MEDIA_GROUP (self));
|
|
Packit |
4b6dd7 |
g_free (self->priv->title);
|
|
Packit |
4b6dd7 |
self->priv->title = g_strdup (title);
|
|
Packit |
4b6dd7 |
}
|
|
Packit |
4b6dd7 |
|
|
Packit |
4b6dd7 |
/**
|
|
Packit |
4b6dd7 |
* gdata_media_group_get_description:
|
|
Packit |
4b6dd7 |
* @self: a #GDataMediaGroup
|
|
Packit |
4b6dd7 |
*
|
|
Packit |
4b6dd7 |
* Gets the #GDataMediaGroup:description property.
|
|
Packit |
4b6dd7 |
*
|
|
Packit |
4b6dd7 |
* Return value: the group's description, or %NULL
|
|
Packit |
4b6dd7 |
*
|
|
Packit |
4b6dd7 |
* Since: 0.4.0
|
|
Packit |
4b6dd7 |
*/
|
|
Packit |
4b6dd7 |
const gchar *
|
|
Packit |
4b6dd7 |
gdata_media_group_get_description (GDataMediaGroup *self)
|
|
Packit |
4b6dd7 |
{
|
|
Packit |
4b6dd7 |
g_return_val_if_fail (GDATA_IS_MEDIA_GROUP (self), NULL);
|
|
Packit |
4b6dd7 |
return self->priv->description;
|
|
Packit |
4b6dd7 |
}
|
|
Packit |
4b6dd7 |
|
|
Packit |
4b6dd7 |
/**
|
|
Packit |
4b6dd7 |
* gdata_media_group_set_description:
|
|
Packit |
4b6dd7 |
* @self: a #GDataMediaGroup
|
|
Packit |
4b6dd7 |
* @description: (allow-none): the group's new description, or %NULL
|
|
Packit |
4b6dd7 |
*
|
|
Packit |
4b6dd7 |
* Sets the #GDataMediaGroup:description property to @description.
|
|
Packit |
4b6dd7 |
*
|
|
Packit |
4b6dd7 |
* Set @description to %NULL to unset the property.
|
|
Packit |
4b6dd7 |
*
|
|
Packit |
4b6dd7 |
* Since: 0.4.0
|
|
Packit |
4b6dd7 |
*/
|
|
Packit |
4b6dd7 |
void
|
|
Packit |
4b6dd7 |
gdata_media_group_set_description (GDataMediaGroup *self, const gchar *description)
|
|
Packit |
4b6dd7 |
{
|
|
Packit |
4b6dd7 |
g_return_if_fail (GDATA_IS_MEDIA_GROUP (self));
|
|
Packit |
4b6dd7 |
g_free (self->priv->description);
|
|
Packit |
4b6dd7 |
self->priv->description = g_strdup (description);
|
|
Packit |
4b6dd7 |
}
|
|
Packit |
4b6dd7 |
|
|
Packit |
4b6dd7 |
/**
|
|
Packit |
4b6dd7 |
* gdata_media_group_get_keywords:
|
|
Packit |
4b6dd7 |
* @self: a #GDataMediaGroup
|
|
Packit |
4b6dd7 |
*
|
|
Packit |
4b6dd7 |
* Gets the #GDataMediaGroup:keywords property.
|
|
Packit |
4b6dd7 |
*
|
|
Packit |
4b6dd7 |
* Return value: (array zero-terminated=1): a %NULL-terminated array of the group's keywords, or %NULL
|
|
Packit |
4b6dd7 |
*
|
|
Packit |
4b6dd7 |
* Since: 0.4.0
|
|
Packit |
4b6dd7 |
*/
|
|
Packit |
4b6dd7 |
const gchar * const *
|
|
Packit |
4b6dd7 |
gdata_media_group_get_keywords (GDataMediaGroup *self)
|
|
Packit |
4b6dd7 |
{
|
|
Packit |
4b6dd7 |
g_return_val_if_fail (GDATA_IS_MEDIA_GROUP (self), NULL);
|
|
Packit |
4b6dd7 |
return (const gchar * const *) self->priv->keywords;
|
|
Packit |
4b6dd7 |
}
|
|
Packit |
4b6dd7 |
|
|
Packit |
4b6dd7 |
/**
|
|
Packit |
4b6dd7 |
* gdata_media_group_set_keywords:
|
|
Packit |
4b6dd7 |
* @self: a #GDataMediaGroup
|
|
Packit |
4b6dd7 |
* @keywords: (array zero-terminated=1) (allow-none): a %NULL-terminated array of the group's new keywords, or %NULL
|
|
Packit |
4b6dd7 |
*
|
|
Packit |
4b6dd7 |
* Sets the #GDataMediaGroup:keywords property to @keywords.
|
|
Packit |
4b6dd7 |
*
|
|
Packit |
4b6dd7 |
* Set @keywords to %NULL to unset the property.
|
|
Packit |
4b6dd7 |
*
|
|
Packit |
4b6dd7 |
* Since: 0.4.0
|
|
Packit |
4b6dd7 |
*/
|
|
Packit |
4b6dd7 |
void
|
|
Packit |
4b6dd7 |
gdata_media_group_set_keywords (GDataMediaGroup *self, const gchar * const *keywords)
|
|
Packit |
4b6dd7 |
{
|
|
Packit |
4b6dd7 |
g_return_if_fail (GDATA_IS_MEDIA_GROUP (self));
|
|
Packit |
4b6dd7 |
g_strfreev (self->priv->keywords);
|
|
Packit |
4b6dd7 |
self->priv->keywords = g_strdupv ((gchar**) keywords);
|
|
Packit |
4b6dd7 |
}
|
|
Packit |
4b6dd7 |
|
|
Packit |
4b6dd7 |
/**
|
|
Packit |
4b6dd7 |
* gdata_media_group_get_category:
|
|
Packit |
4b6dd7 |
* @self: a #GDataMediaGroup
|
|
Packit |
4b6dd7 |
*
|
|
Packit |
4b6dd7 |
* Gets the #GDataMediaGroup:category property.
|
|
Packit |
4b6dd7 |
*
|
|
Packit |
4b6dd7 |
* Return value: a #GDataMediaCategory giving the group's category, or %NULL
|
|
Packit |
4b6dd7 |
*/
|
|
Packit |
4b6dd7 |
GDataMediaCategory *
|
|
Packit |
4b6dd7 |
gdata_media_group_get_category (GDataMediaGroup *self)
|
|
Packit |
4b6dd7 |
{
|
|
Packit |
4b6dd7 |
g_return_val_if_fail (GDATA_IS_MEDIA_GROUP (self), NULL);
|
|
Packit |
4b6dd7 |
return self->priv->category;
|
|
Packit |
4b6dd7 |
}
|
|
Packit |
4b6dd7 |
|
|
Packit |
4b6dd7 |
/**
|
|
Packit |
4b6dd7 |
* gdata_media_group_set_category:
|
|
Packit |
4b6dd7 |
* @self: a #GDataMediaGroup
|
|
Packit |
4b6dd7 |
* @category: (allow-none): a new #GDataMediaCategory, or %NULL
|
|
Packit |
4b6dd7 |
*
|
|
Packit |
4b6dd7 |
* Sets the #GDataMediaGroup:category property to @category, and increments its reference count.
|
|
Packit |
4b6dd7 |
*/
|
|
Packit |
4b6dd7 |
void
|
|
Packit |
4b6dd7 |
gdata_media_group_set_category (GDataMediaGroup *self, GDataMediaCategory *category)
|
|
Packit |
4b6dd7 |
{
|
|
Packit |
4b6dd7 |
g_return_if_fail (GDATA_IS_MEDIA_GROUP (self));
|
|
Packit |
4b6dd7 |
g_return_if_fail (category == NULL || GDATA_IS_MEDIA_CATEGORY (category));
|
|
Packit |
4b6dd7 |
|
|
Packit |
4b6dd7 |
if (self->priv->category != NULL)
|
|
Packit |
4b6dd7 |
g_object_unref (self->priv->category);
|
|
Packit |
4b6dd7 |
self->priv->category = (category == NULL) ? NULL : g_object_ref (category);
|
|
Packit |
4b6dd7 |
}
|
|
Packit |
4b6dd7 |
|
|
Packit |
4b6dd7 |
static gint
|
|
Packit |
4b6dd7 |
content_compare_cb (const GDataMediaContent *content, const gchar *type)
|
|
Packit |
4b6dd7 |
{
|
|
Packit |
4b6dd7 |
return strcmp (gdata_media_content_get_content_type ((GDataMediaContent*) content), type);
|
|
Packit |
4b6dd7 |
}
|
|
Packit |
4b6dd7 |
|
|
Packit |
4b6dd7 |
/**
|
|
Packit |
4b6dd7 |
* gdata_media_group_look_up_content:
|
|
Packit |
4b6dd7 |
* @self: a #GDataMediaGroup
|
|
Packit |
4b6dd7 |
* @type: the MIME type of the content desired
|
|
Packit |
4b6dd7 |
*
|
|
Packit |
4b6dd7 |
* Looks up a #GDataMediaContent from the group with the given MIME type. The group's list of contents is
|
|
Packit |
4b6dd7 |
* a list of URIs to various formats of the group content itself, such as the SWF URI or RTSP stream for a video.
|
|
Packit |
4b6dd7 |
*
|
|
Packit |
4b6dd7 |
* Return value: (transfer none): a #GDataMediaContent matching @type, or %NULL
|
|
Packit |
4b6dd7 |
*/
|
|
Packit |
4b6dd7 |
GDataMediaContent *
|
|
Packit |
4b6dd7 |
gdata_media_group_look_up_content (GDataMediaGroup *self, const gchar *type)
|
|
Packit |
4b6dd7 |
{
|
|
Packit |
4b6dd7 |
GList *element;
|
|
Packit |
4b6dd7 |
|
|
Packit |
4b6dd7 |
g_return_val_if_fail (GDATA_IS_MEDIA_GROUP (self), NULL);
|
|
Packit |
4b6dd7 |
g_return_val_if_fail (type != NULL, NULL);
|
|
Packit |
4b6dd7 |
|
|
Packit |
4b6dd7 |
/* TODO: If type is required, and is unique, the contents can be stored in a hash table rather than a linked list */
|
|
Packit |
4b6dd7 |
element = g_list_find_custom (self->priv->contents, type, (GCompareFunc) content_compare_cb);
|
|
Packit |
4b6dd7 |
if (element == NULL)
|
|
Packit |
4b6dd7 |
return NULL;
|
|
Packit |
4b6dd7 |
return GDATA_MEDIA_CONTENT (element->data);
|
|
Packit |
4b6dd7 |
}
|
|
Packit |
4b6dd7 |
|
|
Packit |
4b6dd7 |
/**
|
|
Packit |
4b6dd7 |
* gdata_media_group_get_contents:
|
|
Packit |
4b6dd7 |
* @self: a #GDataMediaGroup
|
|
Packit |
4b6dd7 |
*
|
|
Packit |
4b6dd7 |
* Returns a list of #GDataMediaContents, giving the content enclosed by the group.
|
|
Packit |
4b6dd7 |
*
|
|
Packit |
4b6dd7 |
* Return value: (element-type GData.MediaContent) (transfer none): a #GList of #GDataMediaContents, or %NULL
|
|
Packit |
4b6dd7 |
*/
|
|
Packit |
4b6dd7 |
GList *
|
|
Packit |
4b6dd7 |
gdata_media_group_get_contents (GDataMediaGroup *self)
|
|
Packit |
4b6dd7 |
{
|
|
Packit |
4b6dd7 |
g_return_val_if_fail (GDATA_IS_MEDIA_GROUP (self), NULL);
|
|
Packit |
4b6dd7 |
return self->priv->contents;
|
|
Packit |
4b6dd7 |
}
|
|
Packit |
4b6dd7 |
|
|
Packit |
4b6dd7 |
void
|
|
Packit |
4b6dd7 |
_gdata_media_group_add_content (GDataMediaGroup *self, GDataMediaContent *content)
|
|
Packit |
4b6dd7 |
{
|
|
Packit |
4b6dd7 |
g_return_if_fail (GDATA_IS_MEDIA_GROUP (self));
|
|
Packit |
4b6dd7 |
g_return_if_fail (GDATA_IS_MEDIA_CONTENT (content));
|
|
Packit |
4b6dd7 |
self->priv->contents = g_list_prepend (self->priv->contents, g_object_ref (content));
|
|
Packit |
4b6dd7 |
}
|
|
Packit |
4b6dd7 |
|
|
Packit |
4b6dd7 |
/**
|
|
Packit |
4b6dd7 |
* gdata_media_group_get_credit:
|
|
Packit |
4b6dd7 |
* @self: a #GDataMediaGroup
|
|
Packit |
4b6dd7 |
*
|
|
Packit |
4b6dd7 |
* Gets the #GDataMediaGroup:credit property.
|
|
Packit |
4b6dd7 |
*
|
|
Packit |
4b6dd7 |
* Return value: a #GDataMediaCredit giving information on whom to credit for the media group, or %NULL
|
|
Packit |
4b6dd7 |
*/
|
|
Packit |
4b6dd7 |
GDataMediaCredit *
|
|
Packit |
4b6dd7 |
gdata_media_group_get_credit (GDataMediaGroup *self)
|
|
Packit |
4b6dd7 |
{
|
|
Packit |
4b6dd7 |
g_return_val_if_fail (GDATA_IS_MEDIA_GROUP (self), NULL);
|
|
Packit |
4b6dd7 |
return self->priv->credit;
|
|
Packit |
4b6dd7 |
}
|
|
Packit |
4b6dd7 |
|
|
Packit |
4b6dd7 |
void
|
|
Packit |
4b6dd7 |
_gdata_media_group_set_credit (GDataMediaGroup *self, GDataMediaCredit *credit)
|
|
Packit |
4b6dd7 |
{
|
|
Packit |
4b6dd7 |
g_return_if_fail (GDATA_IS_MEDIA_GROUP (self));
|
|
Packit |
4b6dd7 |
g_return_if_fail (credit == NULL ||GDATA_IS_MEDIA_CREDIT (credit));
|
|
Packit |
4b6dd7 |
|
|
Packit |
4b6dd7 |
if (self->priv->credit != NULL)
|
|
Packit |
4b6dd7 |
g_object_unref (self->priv->credit);
|
|
Packit |
4b6dd7 |
self->priv->credit = g_object_ref (credit);
|
|
Packit |
4b6dd7 |
}
|
|
Packit |
4b6dd7 |
|
|
Packit |
4b6dd7 |
/**
|
|
Packit |
4b6dd7 |
* gdata_media_group_get_media_group:
|
|
Packit |
4b6dd7 |
* @self: a #GDataMediaGroup
|
|
Packit |
4b6dd7 |
*
|
|
Packit |
4b6dd7 |
* Gets the #GDataMediaGroup:player-uri property.
|
|
Packit |
4b6dd7 |
*
|
|
Packit |
4b6dd7 |
* Return value: a URI where the media group is playable in a web browser, or %NULL
|
|
Packit |
4b6dd7 |
*/
|
|
Packit |
4b6dd7 |
const gchar *
|
|
Packit |
4b6dd7 |
gdata_media_group_get_player_uri (GDataMediaGroup *self)
|
|
Packit |
4b6dd7 |
{
|
|
Packit |
4b6dd7 |
g_return_val_if_fail (GDATA_IS_MEDIA_GROUP (self), NULL);
|
|
Packit |
4b6dd7 |
return self->priv->player_uri;
|
|
Packit |
4b6dd7 |
}
|
|
Packit |
4b6dd7 |
|
|
Packit |
4b6dd7 |
/**
|
|
Packit |
4b6dd7 |
* gdata_media_group_is_restricted_in_country:
|
|
Packit |
4b6dd7 |
* @self: a #GDataMediaGroup
|
|
Packit |
4b6dd7 |
* @country: an ISO 3166 two-letter country code to check
|
|
Packit |
4b6dd7 |
*
|
|
Packit |
4b6dd7 |
* Checks whether viewing of the media is restricted in @country, either by its content rating, or by the request of the producer.
|
|
Packit |
4b6dd7 |
* The return value from this function is purely informational, and no obligation is assumed.
|
|
Packit |
4b6dd7 |
*
|
|
Packit |
4b6dd7 |
* Return value: %TRUE if the media is restricted in @country, %FALSE otherwise
|
|
Packit |
4b6dd7 |
*/
|
|
Packit |
4b6dd7 |
gboolean
|
|
Packit |
4b6dd7 |
gdata_media_group_is_restricted_in_country (GDataMediaGroup *self, const gchar *country)
|
|
Packit |
4b6dd7 |
{
|
|
Packit |
4b6dd7 |
g_return_val_if_fail (GDATA_IS_MEDIA_GROUP (self), FALSE);
|
|
Packit |
4b6dd7 |
g_return_val_if_fail (country != NULL && *country != '\0', FALSE);
|
|
Packit |
4b6dd7 |
|
|
Packit |
4b6dd7 |
if (GPOINTER_TO_UINT (g_hash_table_lookup (self->priv->restricted_countries, country)) == TRUE)
|
|
Packit |
4b6dd7 |
return TRUE;
|
|
Packit |
4b6dd7 |
|
|
Packit |
4b6dd7 |
return GPOINTER_TO_UINT (g_hash_table_lookup (self->priv->restricted_countries, "all"));
|
|
Packit |
4b6dd7 |
}
|
|
Packit |
4b6dd7 |
|
|
Packit |
4b6dd7 |
/**
|
|
Packit |
4b6dd7 |
* gdata_media_group_get_media_rating:
|
|
Packit |
4b6dd7 |
* @self: a #GDataMediaGroup
|
|
Packit |
4b6dd7 |
* @rating_type: the type of rating to retrieve
|
|
Packit |
4b6dd7 |
*
|
|
Packit |
4b6dd7 |
* Returns the rating of the given type for the media, if one exists. For example, this could be a film rating awarded by the MPAA.
|
|
Packit |
4b6dd7 |
* The valid values for @rating_type are: simple , mpaa and
|
|
Packit |
4b6dd7 |
* v-chip .
|
|
Packit |
4b6dd7 |
*
|
|
Packit |
4b6dd7 |
* The rating values returned for each of these rating types are string as defined in the
|
|
Packit |
4b6dd7 |
* <ulink type="http" url="http://code.google.com/apis/youtube/2.0/reference.html#youtube_data_api_tag_media:rating">YouTube documentation</ulink> and
|
|
Packit |
4b6dd7 |
* <ulink type="http" url="http://video.search.yahoo.com/mrss">MRSS specification</ulink>.
|
|
Packit |
4b6dd7 |
*
|
|
Packit |
4b6dd7 |
* Return value: rating for the given rating type, or %NULL if the media has no rating for that type (or the type is invalid)
|
|
Packit |
4b6dd7 |
*/
|
|
Packit |
4b6dd7 |
const gchar *
|
|
Packit |
4b6dd7 |
gdata_media_group_get_media_rating (GDataMediaGroup *self, const gchar *rating_type)
|
|
Packit |
4b6dd7 |
{
|
|
Packit |
4b6dd7 |
g_return_val_if_fail (GDATA_IS_MEDIA_GROUP (self), NULL);
|
|
Packit |
4b6dd7 |
g_return_val_if_fail (rating_type != NULL && *rating_type != '\0', NULL);
|
|
Packit |
4b6dd7 |
|
|
Packit |
4b6dd7 |
if (strcmp (rating_type, "simple") == 0) {
|
|
Packit |
4b6dd7 |
return self->priv->simple_rating;
|
|
Packit |
4b6dd7 |
} else if (strcmp (rating_type, "mpaa") == 0) {
|
|
Packit |
4b6dd7 |
return self->priv->mpaa_rating;
|
|
Packit |
4b6dd7 |
} else if (strcmp (rating_type, "v-chip") == 0) {
|
|
Packit |
4b6dd7 |
return self->priv->v_chip_rating;
|
|
Packit |
4b6dd7 |
}
|
|
Packit |
4b6dd7 |
|
|
Packit |
4b6dd7 |
return NULL;
|
|
Packit |
4b6dd7 |
}
|
|
Packit |
4b6dd7 |
|
|
Packit |
4b6dd7 |
/**
|
|
Packit |
4b6dd7 |
* gdata_media_group_get_thumbnails:
|
|
Packit |
4b6dd7 |
* @self: a #GDataMediaGroup
|
|
Packit |
4b6dd7 |
*
|
|
Packit |
4b6dd7 |
* Gets a list of the thumbnails available for the group.
|
|
Packit |
4b6dd7 |
*
|
|
Packit |
4b6dd7 |
* Return value: (element-type GData.MediaThumbnail) (transfer none): a #GList of #GDataMediaThumbnails, or %NULL
|
|
Packit |
4b6dd7 |
*/
|
|
Packit |
4b6dd7 |
GList *
|
|
Packit |
4b6dd7 |
gdata_media_group_get_thumbnails (GDataMediaGroup *self)
|
|
Packit |
4b6dd7 |
{
|
|
Packit |
4b6dd7 |
g_return_val_if_fail (GDATA_IS_MEDIA_GROUP (self), NULL);
|
|
Packit |
4b6dd7 |
return self->priv->thumbnails;
|
|
Packit |
4b6dd7 |
}
|
|
Packit |
4b6dd7 |
|
|
Packit |
4b6dd7 |
void
|
|
Packit |
4b6dd7 |
_gdata_media_group_add_thumbnail (GDataMediaGroup *self, GDataMediaThumbnail *thumbnail)
|
|
Packit |
4b6dd7 |
{
|
|
Packit |
4b6dd7 |
g_return_if_fail (GDATA_IS_MEDIA_GROUP (self));
|
|
Packit |
4b6dd7 |
g_return_if_fail (GDATA_IS_MEDIA_THUMBNAIL (thumbnail));
|
|
Packit |
4b6dd7 |
self->priv->thumbnails = g_list_prepend (self->priv->thumbnails, g_object_ref (thumbnail));
|
|
Packit |
4b6dd7 |
}
|