Blame libgupnp-av/gupnp-didl-lite-contributor.c

Packit 712bc5
/*
Packit 712bc5
 * Copyright (C) 2009 Nokia Corporation.
Packit 712bc5
 *
Packit 712bc5
 * Authors: Zeeshan Ali (Khattak) <zeeshan.ali@nokia.com>
Packit 712bc5
 *                                <zeeshanak@gnome.org>
Packit 712bc5
 *
Packit 712bc5
 * This library is free software; you can redistribute it and/or
Packit 712bc5
 * modify it under the terms of the GNU Library General Public
Packit 712bc5
 * License as published by the Free Software Foundation; either
Packit 712bc5
 * version 2 of the License, or (at your option) any later version.
Packit 712bc5
 *
Packit 712bc5
 * This library is distributed in the hope that it will be useful,
Packit 712bc5
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
Packit 712bc5
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
Packit 712bc5
 * Library General Public License for more details.
Packit 712bc5
 *
Packit 712bc5
 * You should have received a copy of the GNU Library General Public
Packit 712bc5
 * License along with this library; if not, write to the
Packit 712bc5
 * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
Packit 712bc5
 * Boston, MA 02110-1301, USA.
Packit 712bc5
 */
Packit 712bc5
Packit 712bc5
/**
Packit 712bc5
 * SECTION:gupnp-didl-lite-contributor
Packit 712bc5
 * @short_description: DIDL-Lite Contributor
Packit 712bc5
 *
Packit 712bc5
 * #GUPnPDIDLLiteContributor respresents a contributor (artist, author, actor,
Packit 712bc5
 * producer, director, producer and contributor) property in a DIDL-Lite object.
Packit 712bc5
 */
Packit 712bc5
Packit 712bc5
#include "gupnp-didl-lite-contributor.h"
Packit 712bc5
#include "gupnp-didl-lite-contributor-private.h"
Packit 712bc5
#include "xml-util.h"
Packit 712bc5
Packit 712bc5
G_DEFINE_TYPE (GUPnPDIDLLiteContributor,
Packit 712bc5
               gupnp_didl_lite_contributor,
Packit 712bc5
               G_TYPE_OBJECT);
Packit 712bc5
Packit 712bc5
struct _GUPnPDIDLLiteContributorPrivate {
Packit 712bc5
        xmlNode     *xml_node;
Packit 712bc5
        GUPnPAVXMLDoc *xml_doc;
Packit 712bc5
};
Packit 712bc5
Packit 712bc5
enum {
Packit 712bc5
        PROP_0,
Packit 712bc5
        PROP_XML_NODE,
Packit 712bc5
        PROP_XML_DOC,
Packit 712bc5
        PROP_ROLE,
Packit 712bc5
        PROP_NAME
Packit 712bc5
};
Packit 712bc5
Packit 712bc5
static void
Packit 712bc5
gupnp_didl_lite_contributor_init (GUPnPDIDLLiteContributor *contributor)
Packit 712bc5
{
Packit 712bc5
        contributor->priv = G_TYPE_INSTANCE_GET_PRIVATE
Packit 712bc5
                                        (contributor,
Packit 712bc5
                                         GUPNP_TYPE_DIDL_LITE_CONTRIBUTOR,
Packit 712bc5
                                         GUPnPDIDLLiteContributorPrivate);
Packit 712bc5
}
Packit 712bc5
Packit 712bc5
static void
Packit 712bc5
gupnp_didl_lite_contributor_get_property (GObject    *object,
Packit 712bc5
                                          guint       property_id,
Packit 712bc5
                                          GValue     *value,
Packit 712bc5
                                          GParamSpec *pspec)
Packit 712bc5
{
Packit 712bc5
        GUPnPDIDLLiteContributor *contributor;
Packit 712bc5
Packit 712bc5
        contributor = GUPNP_DIDL_LITE_CONTRIBUTOR (object);
Packit 712bc5
Packit 712bc5
        switch (property_id) {
Packit 712bc5
        case PROP_XML_NODE:
Packit 712bc5
                g_value_set_pointer
Packit 712bc5
                        (value,
Packit 712bc5
                         gupnp_didl_lite_contributor_get_xml_node
Packit 712bc5
                                        (contributor));
Packit 712bc5
                break;
Packit 712bc5
        case PROP_ROLE:
Packit 712bc5
                g_value_set_string
Packit 712bc5
                        (value,
Packit 712bc5
                         gupnp_didl_lite_contributor_get_role (contributor));
Packit 712bc5
                break;
Packit 712bc5
        case PROP_NAME:
Packit 712bc5
                g_value_set_string
Packit 712bc5
                        (value,
Packit 712bc5
                         gupnp_didl_lite_contributor_get_name (contributor));
Packit 712bc5
                break;
Packit 712bc5
        default:
Packit 712bc5
                G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
Packit 712bc5
                break;
Packit 712bc5
        }
Packit 712bc5
}
Packit 712bc5
Packit 712bc5
static void
Packit 712bc5
gupnp_didl_lite_contributor_set_property (GObject      *object,
Packit 712bc5
                                          guint         property_id,
Packit 712bc5
                                          const GValue *value,
Packit 712bc5
                                          GParamSpec   *pspec)
Packit 712bc5
Packit 712bc5
{
Packit 712bc5
        GUPnPDIDLLiteContributor *contributor;
Packit 712bc5
Packit 712bc5
        contributor = GUPNP_DIDL_LITE_CONTRIBUTOR (object);
Packit 712bc5
Packit 712bc5
        switch (property_id) {
Packit 712bc5
        case PROP_XML_NODE:
Packit 712bc5
                contributor->priv->xml_node = g_value_get_pointer (value);
Packit 712bc5
                break;
Packit 712bc5
        case PROP_XML_DOC:
Packit 712bc5
                contributor->priv->xml_doc = g_value_dup_boxed (value);
Packit 712bc5
                break;
Packit 712bc5
        case PROP_ROLE:
Packit 712bc5
                gupnp_didl_lite_contributor_set_role
Packit 712bc5
                        (contributor,
Packit 712bc5
                         g_value_get_string (value));
Packit 712bc5
                break;
Packit 712bc5
        case PROP_NAME:
Packit 712bc5
                gupnp_didl_lite_contributor_set_name
Packit 712bc5
                        (contributor,
Packit 712bc5
                         g_value_get_string (value));
Packit 712bc5
                break;
Packit 712bc5
        default:
Packit 712bc5
                G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
Packit 712bc5
                break;
Packit 712bc5
        }
Packit 712bc5
}
Packit 712bc5
Packit 712bc5
static void
Packit 712bc5
gupnp_didl_lite_contributor_dispose (GObject *object)
Packit 712bc5
{
Packit 712bc5
        GObjectClass                    *object_class;
Packit 712bc5
        GUPnPDIDLLiteContributorPrivate *priv;
Packit 712bc5
Packit 712bc5
        priv = GUPNP_DIDL_LITE_CONTRIBUTOR (object)->priv;
Packit 712bc5
Packit 712bc5
        g_clear_pointer (&priv->xml_doc, xml_doc_unref);
Packit 712bc5
Packit 712bc5
        object_class = G_OBJECT_CLASS
Packit 712bc5
                        (gupnp_didl_lite_contributor_parent_class);
Packit 712bc5
        object_class->dispose (object);
Packit 712bc5
}
Packit 712bc5
Packit 712bc5
static void
Packit 712bc5
gupnp_didl_lite_contributor_class_init (GUPnPDIDLLiteContributorClass *klass)
Packit 712bc5
{
Packit 712bc5
        GObjectClass *object_class;
Packit 712bc5
Packit 712bc5
        object_class = G_OBJECT_CLASS (klass);
Packit 712bc5
Packit 712bc5
        object_class->get_property = gupnp_didl_lite_contributor_get_property;
Packit 712bc5
        object_class->set_property = gupnp_didl_lite_contributor_set_property;
Packit 712bc5
        object_class->dispose = gupnp_didl_lite_contributor_dispose;
Packit 712bc5
Packit 712bc5
        g_type_class_add_private (klass,
Packit 712bc5
                                  sizeof (GUPnPDIDLLiteContributorPrivate));
Packit 712bc5
Packit 712bc5
        /**
Packit 712bc5
         * GUPnPDIDLLiteContributor:xml-node:
Packit 712bc5
         *
Packit 712bc5
         * The pointer to object node in XML document.
Packit 712bc5
         **/
Packit 712bc5
        g_object_class_install_property
Packit 712bc5
                (object_class,
Packit 712bc5
                 PROP_XML_NODE,
Packit 712bc5
                 g_param_spec_pointer ("xml-node",
Packit 712bc5
                                       "XMLNode",
Packit 712bc5
                                       "The pointer to contributor node in XML"
Packit 712bc5
                                       " document.",
Packit 712bc5
                                       G_PARAM_READWRITE |
Packit 712bc5
                                       G_PARAM_CONSTRUCT_ONLY |
Packit 712bc5
                                       G_PARAM_STATIC_NAME |
Packit 712bc5
                                       G_PARAM_STATIC_NICK |
Packit 712bc5
                                       G_PARAM_STATIC_BLURB));
Packit 712bc5
Packit 712bc5
        /**
Packit 712bc5
         * GUPnPDIDLLiteContributor:xml-doc:
Packit 712bc5
         *
Packit 712bc5
         * The reference to XML document containing this object.
Packit 712bc5
         *
Packit 712bc5
         * Internal property.
Packit 712bc5
         *
Packit 712bc5
         * Stability: Private
Packit 712bc5
         **/
Packit 712bc5
        g_object_class_install_property
Packit 712bc5
                (object_class,
Packit 712bc5
                 PROP_XML_DOC,
Packit 712bc5
                 g_param_spec_boxed ("xml-doc",
Packit 712bc5
                                      "XMLDoc",
Packit 712bc5
                                      "The reference to XML document"
Packit 712bc5
                                      " containing this contributor.",
Packit 712bc5
                                      xml_doc_get_type (),
Packit 712bc5
                                      G_PARAM_WRITABLE |
Packit 712bc5
                                      G_PARAM_CONSTRUCT_ONLY |
Packit 712bc5
                                      G_PARAM_STATIC_NAME |
Packit 712bc5
                                      G_PARAM_STATIC_NICK |
Packit 712bc5
                                      G_PARAM_STATIC_BLURB));
Packit 712bc5
Packit 712bc5
        /**
Packit 712bc5
         * GUPnPDIDLLiteContributor:role:
Packit 712bc5
         *
Packit 712bc5
         * The role of this contributor.
Packit 712bc5
         **/
Packit 712bc5
        g_object_class_install_property
Packit 712bc5
                (object_class,
Packit 712bc5
                 PROP_ROLE,
Packit 712bc5
                 g_param_spec_string ("role",
Packit 712bc5
                                      "Role",
Packit 712bc5
                                      "The role of this contributor.",
Packit 712bc5
                                      NULL,
Packit 712bc5
                                      G_PARAM_READWRITE |
Packit 712bc5
                                      G_PARAM_STATIC_NAME |
Packit 712bc5
                                      G_PARAM_STATIC_NICK |
Packit 712bc5
                                      G_PARAM_STATIC_BLURB));
Packit 712bc5
Packit 712bc5
        /**
Packit 712bc5
         * GUPnPDIDLLiteContributor:name:
Packit 712bc5
         *
Packit 712bc5
         * The name of this contributor.
Packit 712bc5
         **/
Packit 712bc5
        g_object_class_install_property
Packit 712bc5
                (object_class,
Packit 712bc5
                 PROP_NAME,
Packit 712bc5
                 g_param_spec_string ("name",
Packit 712bc5
                                      "Name",
Packit 712bc5
                                      "The name of this contributor.",
Packit 712bc5
                                      NULL,
Packit 712bc5
                                      G_PARAM_READWRITE |
Packit 712bc5
                                      G_PARAM_STATIC_NAME |
Packit 712bc5
                                      G_PARAM_STATIC_NICK |
Packit 712bc5
                                      G_PARAM_STATIC_BLURB));
Packit 712bc5
}
Packit 712bc5
Packit 712bc5
/**
Packit 712bc5
 * gupnp_didl_lite_contributor_get_role:
Packit 712bc5
 * @contributor: #GUPnPDIDLLiteContributor
Packit 712bc5
 *
Packit 712bc5
 * Get the role of the @contributor.
Packit 712bc5
 *
Packit 712bc5
 * Return value: The role of the @contributor, or %NULL.
Packit 712bc5
 **/
Packit 712bc5
const char *
Packit 712bc5
gupnp_didl_lite_contributor_get_role (GUPnPDIDLLiteContributor *contributor)
Packit 712bc5
{
Packit 712bc5
        g_return_val_if_fail (contributor != NULL, NULL);
Packit 712bc5
        g_return_val_if_fail (GUPNP_IS_DIDL_LITE_CONTRIBUTOR (contributor),
Packit 712bc5
                              NULL);
Packit 712bc5
Packit 712bc5
        return xml_util_get_attribute_content (contributor->priv->xml_node,
Packit 712bc5
                                               "role");
Packit 712bc5
}
Packit 712bc5
Packit 712bc5
/**
Packit 712bc5
 * gupnp_didl_lite_contributor_get_name:
Packit 712bc5
 * @contributor: A #GUPnPDIDLLiteContributor
Packit 712bc5
 *
Packit 712bc5
 * Get the name of the @contributor.
Packit 712bc5
 *
Packit 712bc5
 * Return value: The name of the @contributor or %NULL.
Packit 712bc5
 **/
Packit 712bc5
const char *
Packit 712bc5
gupnp_didl_lite_contributor_get_name (GUPnPDIDLLiteContributor *contributor)
Packit 712bc5
{
Packit 712bc5
        g_return_val_if_fail (GUPNP_IS_DIDL_LITE_CONTRIBUTOR (contributor),
Packit 712bc5
                              NULL);
Packit 712bc5
Packit 712bc5
        return (const char *) contributor->priv->xml_node->children->content;
Packit 712bc5
}
Packit 712bc5
Packit 712bc5
/**
Packit 712bc5
 * gupnp_didl_lite_contributor_set_role:
Packit 712bc5
 * @contributor: #GUPnPDIDLLiteContributor
Packit 712bc5
 * @role: The role of the @contributor
Packit 712bc5
 *
Packit 712bc5
 * Set the role of the @contributor to @role.
Packit 712bc5
 **/
Packit 712bc5
void
Packit 712bc5
gupnp_didl_lite_contributor_set_role (GUPnPDIDLLiteContributor *contributor,
Packit 712bc5
                                      const char               *role)
Packit 712bc5
{
Packit 712bc5
        g_return_if_fail (contributor != NULL);
Packit 712bc5
        g_return_if_fail (GUPNP_IS_DIDL_LITE_CONTRIBUTOR (contributor));
Packit 712bc5
Packit 712bc5
        xmlSetProp (contributor->priv->xml_node,
Packit 712bc5
                    (unsigned char *) "role",
Packit 712bc5
                    (unsigned char *) role);
Packit 712bc5
Packit 712bc5
        g_object_notify (G_OBJECT (contributor), "role");
Packit 712bc5
}
Packit 712bc5
Packit 712bc5
/**
Packit 712bc5
 * gupnp_didl_lite_contributor_set_name:
Packit 712bc5
 * @contributor: A #GUPnPDIDLLiteContributor
Packit 712bc5
 * @name: The name of the contributor
Packit 712bc5
 *
Packit 712bc5
 * Set the name of the @contributor to @name.
Packit 712bc5
 **/
Packit 712bc5
void
Packit 712bc5
gupnp_didl_lite_contributor_set_name (GUPnPDIDLLiteContributor *contributor,
Packit 712bc5
                                      const char               *name)
Packit 712bc5
{
Packit 712bc5
        xmlChar *escaped;
Packit 712bc5
Packit 712bc5
        g_return_if_fail (GUPNP_IS_DIDL_LITE_CONTRIBUTOR (contributor));
Packit 712bc5
        g_return_if_fail (name != NULL);
Packit 712bc5
Packit 712bc5
        escaped = xmlEncodeSpecialChars (contributor->priv->xml_doc->doc,
Packit 712bc5
                                         (const unsigned char *) name);
Packit 712bc5
        xmlNodeSetContent (contributor->priv->xml_node, escaped);
Packit 712bc5
        xmlFree (escaped);
Packit 712bc5
Packit 712bc5
        g_object_notify (G_OBJECT (contributor), "name");
Packit 712bc5
}
Packit 712bc5
Packit 712bc5
/**
Packit 712bc5
 * gupnp_didl_lite_contributor_new_from_xml:
Packit 712bc5
 * @xml_node: The pointer to relevant node in XML document
Packit 712bc5
 * @xml_doc: The reference to containing XML document
Packit 712bc5
 *
Packit 712bc5
 * Creates a new #GUPnPDIDLLiteContributor for the @xml_node.
Packit 712bc5
 *
Packit 712bc5
 * Return value: A new #GUPnPDIDLLiteContributor object. Unref after usage.
Packit 712bc5
 **/
Packit 712bc5
GUPnPDIDLLiteContributor *
Packit 712bc5
gupnp_didl_lite_contributor_new_from_xml (xmlNode       *xml_node,
Packit 712bc5
                                          GUPnPAVXMLDoc *xml_doc)
Packit 712bc5
{
Packit 712bc5
        return g_object_new (GUPNP_TYPE_DIDL_LITE_CONTRIBUTOR,
Packit 712bc5
                             "xml-node", xml_node,
Packit 712bc5
                             "xml-doc", xml_doc,
Packit 712bc5
                             NULL);
Packit 712bc5
}
Packit 712bc5
Packit 712bc5
/**
Packit 712bc5
 * gupnp_didl_lite_contributor_get_xml_node:
Packit 712bc5
 * @contributor: The #GUPnPDIDLLiteContributor
Packit 712bc5
 *
Packit 712bc5
 * Get the pointer to relevant node in XML document.
Packit 712bc5
 *
Packit 712bc5
 * Returns: (transfer none): The pointer to relevant node in XML document.
Packit 712bc5
 **/
Packit 712bc5
xmlNode *
Packit 712bc5
gupnp_didl_lite_contributor_get_xml_node (GUPnPDIDLLiteContributor *contributor)
Packit 712bc5
{
Packit 712bc5
        g_return_val_if_fail (GUPNP_IS_DIDL_LITE_CONTRIBUTOR (contributor),
Packit 712bc5
                              NULL);
Packit 712bc5
Packit 712bc5
        return contributor->priv->xml_node;
Packit 712bc5
}