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

Packit 712bc5
/*
Packit 712bc5
 * Copyright (C) 2012 Intel Corporation.
Packit 712bc5
 * Copyright (C) 2009 Nokia Corporation.
Packit 712bc5
 *
Packit 712bc5
 * Author: Christophe Guiraud <christophe.guiraud@intel.com>
Packit 712bc5
 * Author: Zeeshan Ali (Khattak) <zeeshanak@gnome.org>
Packit 712bc5
 *                               <zeeshan.ali@nokia.com>
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-create-class
Packit 712bc5
 * @short_description: DIDL-Lite CreateClass
Packit 712bc5
 *
Packit 712bc5
 * #GUPnPDIDLLiteCreateClass respresents a DIDL-Lite create class element.
Packit 712bc5
 */
Packit 712bc5
Packit 712bc5
#include <string.h>
Packit 712bc5
Packit 712bc5
#include "gupnp-didl-lite-createclass.h"
Packit 712bc5
#include "gupnp-didl-lite-createclass-private.h"
Packit 712bc5
#include "xml-util.h"
Packit 712bc5
Packit 712bc5
G_DEFINE_TYPE (GUPnPDIDLLiteCreateClass,
Packit 712bc5
               gupnp_didl_lite_create_class,
Packit 712bc5
               G_TYPE_OBJECT);
Packit 712bc5
Packit 712bc5
struct _GUPnPDIDLLiteCreateClassPrivate {
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_CONTENT,
Packit 712bc5
        PROP_INCLUDE_DERIVED,
Packit 712bc5
        PROP_FRIENDLY_NAME,
Packit 712bc5
};
Packit 712bc5
Packit 712bc5
static void
Packit 712bc5
gupnp_didl_lite_create_class_init (GUPnPDIDLLiteCreateClass *create_class)
Packit 712bc5
{
Packit 712bc5
        create_class->priv = G_TYPE_INSTANCE_GET_PRIVATE
Packit 712bc5
                                        (create_class,
Packit 712bc5
                                         GUPNP_TYPE_DIDL_LITE_CREATE_CLASS,
Packit 712bc5
                                         GUPnPDIDLLiteCreateClassPrivate);
Packit 712bc5
}
Packit 712bc5
Packit 712bc5
static void
Packit 712bc5
gupnp_didl_lite_create_class_get_property (GObject    *object,
Packit 712bc5
                                           guint       property_id,
Packit 712bc5
                                           GValue     *value,
Packit 712bc5
                                           GParamSpec *pspec)
Packit 712bc5
{
Packit 712bc5
        GUPnPDIDLLiteCreateClass *create_class;
Packit 712bc5
Packit 712bc5
        create_class = GUPNP_DIDL_LITE_CREATE_CLASS (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_create_class_get_xml_node
Packit 712bc5
                                                            (create_class));
Packit 712bc5
                break;
Packit 712bc5
        case PROP_CONTENT:
Packit 712bc5
                g_value_set_string
Packit 712bc5
                    (value,
Packit 712bc5
                     gupnp_didl_lite_create_class_get_content
Packit 712bc5
                                                            (create_class));
Packit 712bc5
                break;
Packit 712bc5
        case PROP_INCLUDE_DERIVED:
Packit 712bc5
                g_value_set_boolean
Packit 712bc5
                    (value,
Packit 712bc5
                     gupnp_didl_lite_create_class_get_include_derived
Packit 712bc5
                                                            (create_class));
Packit 712bc5
                break;
Packit 712bc5
        case PROP_FRIENDLY_NAME:
Packit 712bc5
                g_value_set_string
Packit 712bc5
                    (value,
Packit 712bc5
                     gupnp_didl_lite_create_class_get_friendly_name
Packit 712bc5
                                                            (create_class));
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_create_class_set_property (GObject      *object,
Packit 712bc5
                                            guint         property_id,
Packit 712bc5
                                            const GValue *value,
Packit 712bc5
                                            GParamSpec   *pspec)
Packit 712bc5
{
Packit 712bc5
        GUPnPDIDLLiteCreateClass *create_class;
Packit 712bc5
Packit 712bc5
        create_class = GUPNP_DIDL_LITE_CREATE_CLASS (object);
Packit 712bc5
Packit 712bc5
        switch (property_id) {
Packit 712bc5
        case PROP_XML_NODE:
Packit 712bc5
                create_class->priv->xml_node = g_value_get_pointer (value);
Packit 712bc5
                break;
Packit 712bc5
        case PROP_XML_DOC:
Packit 712bc5
                create_class->priv->xml_doc = g_value_dup_boxed (value);
Packit 712bc5
                break;
Packit 712bc5
        case PROP_CONTENT:
Packit 712bc5
                gupnp_didl_lite_create_class_set_content
Packit 712bc5
                                                 (create_class,
Packit 712bc5
                                                  g_value_get_string (value));
Packit 712bc5
                break;
Packit 712bc5
        case PROP_INCLUDE_DERIVED:
Packit 712bc5
                gupnp_didl_lite_create_class_set_include_derived
Packit 712bc5
                                                 (create_class,
Packit 712bc5
                                                  g_value_get_boolean (value));
Packit 712bc5
                break;
Packit 712bc5
        case PROP_FRIENDLY_NAME:
Packit 712bc5
                gupnp_didl_lite_create_class_set_friendly_name
Packit 712bc5
                                                 (create_class,
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_create_class_dispose (GObject *object)
Packit 712bc5
{
Packit 712bc5
        GObjectClass                    *object_class;
Packit 712bc5
        GUPnPDIDLLiteCreateClassPrivate *priv;
Packit 712bc5
Packit 712bc5
        priv = GUPNP_DIDL_LITE_CREATE_CLASS (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_create_class_parent_class);
Packit 712bc5
        object_class->dispose (object);
Packit 712bc5
}
Packit 712bc5
Packit 712bc5
static void
Packit 712bc5
gupnp_didl_lite_create_class_class_init (GUPnPDIDLLiteCreateClassClass *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_create_class_get_property;
Packit 712bc5
        object_class->set_property = gupnp_didl_lite_create_class_set_property;
Packit 712bc5
        object_class->dispose = gupnp_didl_lite_create_class_dispose;
Packit 712bc5
Packit 712bc5
        g_type_class_add_private (klass,
Packit 712bc5
                                  sizeof (GUPnPDIDLLiteCreateClassPrivate));
Packit 712bc5
Packit 712bc5
        /**
Packit 712bc5
         * GUPnPDIDLLiteCreateClass:xml-node:
Packit 712bc5
         *
Packit 712bc5
         * The pointer to desc 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
Packit 712bc5
                                   ("xml-node",
Packit 712bc5
                                    "XMLNode",
Packit 712bc5
                                    "The pointer to desc 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
         * GUPnPDIDLLiteCreateClass: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
Packit 712bc5
                                   ("xml-doc",
Packit 712bc5
                                    "XMLDoc",
Packit 712bc5
                                    "The reference to XML document"
Packit 712bc5
                                    " containing this object.",
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
         * GUPnPDIDLLiteCreateClass:content:
Packit 712bc5
         *
Packit 712bc5
         * The content of this create Class.
Packit 712bc5
         **/
Packit 712bc5
        g_object_class_install_property
Packit 712bc5
                (object_class,
Packit 712bc5
                 PROP_CONTENT,
Packit 712bc5
                 g_param_spec_string
Packit 712bc5
                                   ("content",
Packit 712bc5
                                    "Content",
Packit 712bc5
                                    "The content of this create Class.",
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
         * GUPnPDIDLLiteCreateClass:include-derived:
Packit 712bc5
         *
Packit 712bc5
         * Whether this create Class can be derived.
Packit 712bc5
         **/
Packit 712bc5
        g_object_class_install_property
Packit 712bc5
                (object_class,
Packit 712bc5
                 PROP_INCLUDE_DERIVED,
Packit 712bc5
                 g_param_spec_boolean
Packit 712bc5
                                   ("include-derived",
Packit 712bc5
                                    "IncludeDerived",
Packit 712bc5
                                    "Wether this create Class can be derived.",
Packit 712bc5
                                    FALSE,
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
         * GUPnPDIDLLiteCreateClass:friendly-name:
Packit 712bc5
         *
Packit 712bc5
         * The friendly name of this create Class.
Packit 712bc5
         **/
Packit 712bc5
        g_object_class_install_property
Packit 712bc5
                (object_class,
Packit 712bc5
                 PROP_FRIENDLY_NAME,
Packit 712bc5
                 g_param_spec_string
Packit 712bc5
                                   ("friendly-name",
Packit 712bc5
                                    "FriendlyName",
Packit 712bc5
                                    "The friendly name of this create Class.",
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_create_class_get_content:
Packit 712bc5
 * @create_class: #GUPnPDIDLLiteCreateClass
Packit 712bc5
 *
Packit 712bc5
 * Get the content of the @create_class.
Packit 712bc5
 *
Packit 712bc5
 * Return value: The Content of the @create_class, or %NULL.
Packit 712bc5
 **/
Packit 712bc5
const char *
Packit 712bc5
gupnp_didl_lite_create_class_get_content
Packit 712bc5
                                    (GUPnPDIDLLiteCreateClass *create_class)
Packit 712bc5
{
Packit 712bc5
        g_return_val_if_fail (GUPNP_IS_DIDL_LITE_CREATE_CLASS (create_class),
Packit 712bc5
                              NULL);
Packit 712bc5
Packit 712bc5
        if (G_UNLIKELY (create_class->priv->xml_node->children == NULL))
Packit 712bc5
                return NULL;
Packit 712bc5
Packit 712bc5
        return (const char *) create_class->priv->xml_node->children->content;
Packit 712bc5
}
Packit 712bc5
Packit 712bc5
/**
Packit 712bc5
 * gupnp_didl_lite_create_class_set_content:
Packit 712bc5
 * @create_class: #GUPnPDIDLLiteCreateClass
Packit 712bc5
 * @content: The content
Packit 712bc5
 *
Packit 712bc5
 * Set the content of the @create_class.
Packit 712bc5
 **/
Packit 712bc5
void
Packit 712bc5
gupnp_didl_lite_create_class_set_content
Packit 712bc5
                                    (GUPnPDIDLLiteCreateClass *create_class,
Packit 712bc5
                                     const char               *content)
Packit 712bc5
{
Packit 712bc5
        xmlChar *escaped;
Packit 712bc5
Packit 712bc5
        g_return_if_fail (GUPNP_IS_DIDL_LITE_CREATE_CLASS (create_class));
Packit 712bc5
        g_return_if_fail (create_class != NULL);
Packit 712bc5
Packit 712bc5
        escaped = xmlEncodeSpecialChars (create_class->priv->xml_doc->doc,
Packit 712bc5
                                         (const unsigned char *) content);
Packit 712bc5
        xmlNodeSetContent (create_class->priv->xml_node, escaped);
Packit 712bc5
        xmlFree (escaped);
Packit 712bc5
Packit 712bc5
        g_object_notify (G_OBJECT (create_class), "content");
Packit 712bc5
}
Packit 712bc5
Packit 712bc5
/**
Packit 712bc5
 * gupnp_didl_lite_create_class_get_include_derived:
Packit 712bc5
 * @create_class: #GUPnPDIDLLiteCreateClass
Packit 712bc5
 *
Packit 712bc5
 * Checks whether @create_class can be derived.
Packit 712bc5
 *
Packit 712bc5
 * Return value: #TRUE if @create_class can be derived.
Packit 712bc5
 **/
Packit 712bc5
gboolean
Packit 712bc5
gupnp_didl_lite_create_class_get_include_derived
Packit 712bc5
                                    (GUPnPDIDLLiteCreateClass *create_class)
Packit 712bc5
{
Packit 712bc5
        g_return_val_if_fail (GUPNP_IS_DIDL_LITE_CREATE_CLASS (create_class),
Packit 712bc5
                              FALSE);
Packit 712bc5
Packit 712bc5
        return xml_util_get_boolean_attribute (create_class->priv->xml_node,
Packit 712bc5
                                               "includeDerived");
Packit 712bc5
}
Packit 712bc5
Packit 712bc5
/**
Packit 712bc5
 * gupnp_didl_lite_create_class_set_include_derived:
Packit 712bc5
 * @create_class: #GUPnPDIDLLiteCreateClass
Packit 712bc5
 * @include_derived: the derivability
Packit 712bc5
 *
Packit 712bc5
 * (Un)set the derivability of create_class.
Packit 712bc5
 **/
Packit 712bc5
void
Packit 712bc5
gupnp_didl_lite_create_class_set_include_derived
Packit 712bc5
                                    (GUPnPDIDLLiteCreateClass *create_class,
Packit 712bc5
                                     gboolean                 include_derived)
Packit 712bc5
{
Packit 712bc5
        const char *str;
Packit 712bc5
Packit 712bc5
        g_return_if_fail (create_class != NULL);
Packit 712bc5
        g_return_if_fail (GUPNP_IS_DIDL_LITE_CREATE_CLASS (create_class));
Packit 712bc5
Packit 712bc5
        if (include_derived)
Packit 712bc5
                str = "1";
Packit 712bc5
        else
Packit 712bc5
                str = "0";
Packit 712bc5
        xmlSetProp (create_class->priv->xml_node,
Packit 712bc5
                    (unsigned char *) "includeDerived",
Packit 712bc5
                    (unsigned char *) str);
Packit 712bc5
Packit 712bc5
        g_object_notify (G_OBJECT (create_class), "include-derived");
Packit 712bc5
}
Packit 712bc5
Packit 712bc5
/**
Packit 712bc5
 * gupnp_didl_lite_create_class_get_friendly_name:
Packit 712bc5
 * @create_class: #GUPnPDIDLLiteCreateClass
Packit 712bc5
 *
Packit 712bc5
 * Get the friendly name of the @create_class.
Packit 712bc5
 *
Packit 712bc5
 * Return value: The FriendlyName of the @create_class, or %NULL.
Packit 712bc5
 **/
Packit 712bc5
const char *
Packit 712bc5
gupnp_didl_lite_create_class_get_friendly_name
Packit 712bc5
                                    (GUPnPDIDLLiteCreateClass *create_class)
Packit 712bc5
{
Packit 712bc5
        g_return_val_if_fail (GUPNP_IS_DIDL_LITE_CREATE_CLASS (create_class),
Packit 712bc5
                              NULL);
Packit 712bc5
        return xml_util_get_attribute_content (create_class->priv->xml_node,
Packit 712bc5
                                               "name");
Packit 712bc5
}
Packit 712bc5
Packit 712bc5
/**
Packit 712bc5
 * gupnp_didl_lite_create_class_set_friendly_name:
Packit 712bc5
 * @create_class: #GUPnPDIDLLiteCreateClass
Packit 712bc5
 * @friendly_name: The friendly name
Packit 712bc5
 *
Packit 712bc5
 * Set the friendly name of the @create_class.
Packit 712bc5
 **/
Packit 712bc5
void
Packit 712bc5
gupnp_didl_lite_create_class_set_friendly_name
Packit 712bc5
                                    (GUPnPDIDLLiteCreateClass *create_class,
Packit 712bc5
                                     const char               *friendly_name)
Packit 712bc5
{
Packit 712bc5
        g_return_if_fail (create_class != NULL);
Packit 712bc5
        g_return_if_fail (GUPNP_IS_DIDL_LITE_CREATE_CLASS (create_class));
Packit 712bc5
Packit 712bc5
        xmlSetProp (create_class->priv->xml_node,
Packit 712bc5
                    (unsigned char *) "name",
Packit 712bc5
                    (const unsigned char *) friendly_name);
Packit 712bc5
Packit 712bc5
        g_object_notify (G_OBJECT (create_class), "friendly-name");
Packit 712bc5
}
Packit 712bc5
Packit 712bc5
/**
Packit 712bc5
 * gupnp_didl_lite_create_class_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 #GUPnPDIDLLiteCreateClass for the @xml_node.
Packit 712bc5
 *
Packit 712bc5
 * Returns: (transfer full): A new #GUPnPDIDLLiteCreateClass object. Unref after usage.
Packit 712bc5
 **/
Packit 712bc5
GUPnPDIDLLiteCreateClass *
Packit 712bc5
gupnp_didl_lite_create_class_new_from_xml (xmlNode     *xml_node,
Packit 712bc5
                                           GUPnPAVXMLDoc *xml_doc)
Packit 712bc5
{
Packit 712bc5
        return g_object_new (GUPNP_TYPE_DIDL_LITE_CREATE_CLASS,
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_create_class_get_xml_node:
Packit 712bc5
 * @create_class: The #GUPnPDIDLLiteCreateClass
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_create_class_get_xml_node
Packit 712bc5
                                      (GUPnPDIDLLiteCreateClass *create_class)
Packit 712bc5
{
Packit 712bc5
        g_return_val_if_fail (GUPNP_IS_DIDL_LITE_CREATE_CLASS (create_class),
Packit 712bc5
                              NULL);
Packit 712bc5
Packit 712bc5
        return create_class->priv->xml_node;
Packit 712bc5
}