Blame libgupnp-av/gupnp-didl-lite-item.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-item
Packit 712bc5
 * @short_description: DIDL-Lite Item
Packit 712bc5
 *
Packit 712bc5
 * #GUPnPDIDLLiteItem respresents a DIDL-Lite item element.
Packit 712bc5
 */
Packit 712bc5
Packit 712bc5
#include <string.h>
Packit 712bc5
Packit 712bc5
#include "gupnp-didl-lite-item.h"
Packit 712bc5
#include "xml-util.h"
Packit 712bc5
#include "time-utils.h"
Packit 712bc5
Packit 712bc5
G_DEFINE_TYPE (GUPnPDIDLLiteItem,
Packit 712bc5
               gupnp_didl_lite_item,
Packit 712bc5
               GUPNP_TYPE_DIDL_LITE_OBJECT);
Packit 712bc5
Packit 712bc5
enum {
Packit 712bc5
        PROP_0,
Packit 712bc5
        PROP_REF_ID,
Packit 712bc5
        PROP_LIFETIME
Packit 712bc5
};
Packit 712bc5
Packit 712bc5
static void
Packit 712bc5
gupnp_didl_lite_item_init (G_GNUC_UNUSED GUPnPDIDLLiteItem *item)
Packit 712bc5
{
Packit 712bc5
        /* Nothing to initialize, yay! */
Packit 712bc5
}
Packit 712bc5
Packit 712bc5
static void
Packit 712bc5
gupnp_didl_lite_item_get_property (GObject    *object,
Packit 712bc5
                                   guint       property_id,
Packit 712bc5
                                   GValue     *value,
Packit 712bc5
                                   GParamSpec *pspec)
Packit 712bc5
{
Packit 712bc5
        GUPnPDIDLLiteItem *item;
Packit 712bc5
Packit 712bc5
        item = GUPNP_DIDL_LITE_ITEM (object);
Packit 712bc5
Packit 712bc5
        switch (property_id) {
Packit 712bc5
        case PROP_REF_ID:
Packit 712bc5
                g_value_set_string
Packit 712bc5
                        (value,
Packit 712bc5
                         gupnp_didl_lite_item_get_ref_id (item));
Packit 712bc5
                break;
Packit 712bc5
        case PROP_LIFETIME:
Packit 712bc5
                g_value_set_long
Packit 712bc5
                        (value,
Packit 712bc5
                         gupnp_didl_lite_item_get_lifetime (item));
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_item_set_property (GObject      *object,
Packit 712bc5
                                   guint         property_id,
Packit 712bc5
                                   const GValue *value,
Packit 712bc5
                                   GParamSpec   *pspec)
Packit 712bc5
Packit 712bc5
{
Packit 712bc5
        GUPnPDIDLLiteItem *item;
Packit 712bc5
Packit 712bc5
        item = GUPNP_DIDL_LITE_ITEM (object);
Packit 712bc5
Packit 712bc5
        switch (property_id) {
Packit 712bc5
        case PROP_REF_ID:
Packit 712bc5
                gupnp_didl_lite_item_set_ref_id (item,
Packit 712bc5
                                                 g_value_get_string (value));
Packit 712bc5
                break;
Packit 712bc5
        case PROP_LIFETIME:
Packit 712bc5
                gupnp_didl_lite_item_set_lifetime (item,
Packit 712bc5
                                                   g_value_get_long (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_item_class_init (GUPnPDIDLLiteItemClass *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_item_get_property;
Packit 712bc5
        object_class->set_property = gupnp_didl_lite_item_set_property;
Packit 712bc5
Packit 712bc5
        /**
Packit 712bc5
         * GUPnPDIDLLiteItem:ref-id:
Packit 712bc5
         *
Packit 712bc5
         * The ref ID of this item.
Packit 712bc5
         **/
Packit 712bc5
        g_object_class_install_property
Packit 712bc5
                (object_class,
Packit 712bc5
                 PROP_REF_ID,
Packit 712bc5
                 g_param_spec_string ("ref-id",
Packit 712bc5
                                      "RefID",
Packit 712bc5
                                      "The ref ID of this item.",
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
         * GUPnPDIDLLiteItem:lifetime:
Packit 712bc5
         *
Packit 712bc5
         * The lifetime in seconds of this DIDLLite item in a media collection.
Packit 712bc5
         **/
Packit 712bc5
        g_object_class_install_property
Packit 712bc5
                (object_class,
Packit 712bc5
                 PROP_LIFETIME,
Packit 712bc5
                 g_param_spec_long ("lifetime",
Packit 712bc5
                                    "Lifetime",
Packit 712bc5
                                    "The lifetime (in seconds) of this"
Packit 712bc5
                                    " item.",
Packit 712bc5
                                    -1,
Packit 712bc5
                                    G_MAXLONG,
Packit 712bc5
                                    -1,
Packit 712bc5
                                    G_PARAM_READWRITE |
Packit 712bc5
                                    G_PARAM_STATIC_STRINGS));
Packit 712bc5
}
Packit 712bc5
Packit 712bc5
/**
Packit 712bc5
 * gupnp_didl_lite_item_get_ref_id:
Packit 712bc5
 * @item: #GUPnPDIDLLiteItem
Packit 712bc5
 *
Packit 712bc5
 * Get the ref ID of the @item.
Packit 712bc5
 *
Packit 712bc5
 * Return value: The ref ID of the @item, or %NULL.
Packit 712bc5
 **/
Packit 712bc5
const char *
Packit 712bc5
gupnp_didl_lite_item_get_ref_id (GUPnPDIDLLiteItem *item)
Packit 712bc5
{
Packit 712bc5
        xmlNode *xml_node;
Packit 712bc5
Packit 712bc5
        g_return_val_if_fail (item != NULL, 0);
Packit 712bc5
        g_return_val_if_fail (GUPNP_IS_DIDL_LITE_ITEM (item), NULL);
Packit 712bc5
Packit 712bc5
        xml_node = gupnp_didl_lite_object_get_xml_node
Packit 712bc5
                                        (GUPNP_DIDL_LITE_OBJECT (item));
Packit 712bc5
Packit 712bc5
        return xml_util_get_attribute_content (xml_node, "refID");
Packit 712bc5
}
Packit 712bc5
Packit 712bc5
/**
Packit 712bc5
 * gupnp_didl_lite_item_set_ref_id:
Packit 712bc5
 * @item: #GUPnPDIDLLiteItem
Packit 712bc5
 * @ref_id: The ref ID
Packit 712bc5
 *
Packit 712bc5
 * Set the ref ID of the @item.
Packit 712bc5
 **/
Packit 712bc5
void
Packit 712bc5
gupnp_didl_lite_item_set_ref_id (GUPnPDIDLLiteItem *item,
Packit 712bc5
                                 const char        *ref_id)
Packit 712bc5
{
Packit 712bc5
        xmlNode *xml_node;
Packit 712bc5
Packit 712bc5
        g_return_if_fail (item != NULL);
Packit 712bc5
        g_return_if_fail (GUPNP_IS_DIDL_LITE_ITEM (item));
Packit 712bc5
Packit 712bc5
        xml_node = gupnp_didl_lite_object_get_xml_node
Packit 712bc5
                                (GUPNP_DIDL_LITE_OBJECT (item));
Packit 712bc5
Packit 712bc5
        xmlSetProp (xml_node,
Packit 712bc5
                    (unsigned char *) "refID",
Packit 712bc5
                    (unsigned char *) ref_id);
Packit 712bc5
Packit 712bc5
        g_object_notify (G_OBJECT (item), "ref-id");
Packit 712bc5
}
Packit 712bc5
Packit 712bc5
/**
Packit 712bc5
 * gupnp_didl_lite_item_set_lifetime:
Packit 712bc5
 * @item: #GUPnPDIDLLiteItem
Packit 712bc5
 * @lifetime: The lifetime (in seconds) of this item in a media collection.
Packit 712bc5
 **/
Packit 712bc5
void
Packit 712bc5
gupnp_didl_lite_item_set_lifetime (GUPnPDIDLLiteItem *item,
Packit 712bc5
                                   glong              lifetime)
Packit 712bc5
{
Packit 712bc5
        xmlNode *node = NULL;
Packit 712bc5
        xmlNs *ns = NULL;
Packit 712bc5
        GUPnPAVXMLDoc *doc = NULL;
Packit 712bc5
        GUPnPDIDLLiteObject *object = NULL;
Packit 712bc5
Packit 712bc5
        g_return_if_fail (GUPNP_IS_DIDL_LITE_ITEM (item));
Packit 712bc5
Packit 712bc5
        object = GUPNP_DIDL_LITE_OBJECT (item);
Packit 712bc5
        node = gupnp_didl_lite_object_get_xml_node (object);
Packit 712bc5
        ns = gupnp_didl_lite_object_get_dlna_namespace (object);
Packit 712bc5
        g_object_get (G_OBJECT (object), "xml-doc", &doc, NULL);
Packit 712bc5
Packit 712bc5
        if (lifetime < 0)
Packit 712bc5
                xml_util_unset_child (node, "lifetime");
Packit 712bc5
        else {
Packit 712bc5
                char *str;
Packit 712bc5
Packit 712bc5
                str = seconds_to_time (lifetime);
Packit 712bc5
                xml_util_set_child (node,
Packit 712bc5
                                    GUPNP_XML_NAMESPACE_DLNA,
Packit 712bc5
                                    &ns,
Packit 712bc5
                                    doc->doc,
Packit 712bc5
                                    "lifetime",
Packit 712bc5
                                    str);
Packit 712bc5
                g_free (str);
Packit 712bc5
        }
Packit 712bc5
Packit 712bc5
        g_object_notify (G_OBJECT (object), "lifetime");
Packit 712bc5
}
Packit 712bc5
Packit 712bc5
/**
Packit 712bc5
 * gupnp_didl_lite_item_get_lifetime:
Packit 712bc5
 * @item: #GUPnPDIDLLiteItem
Packit 712bc5
 *
Packit 712bc5
 * Returns: -1 if unset or the lifetime (in seconds) of the current item.
Packit 712bc5
 **/
Packit 712bc5
glong
Packit 712bc5
gupnp_didl_lite_item_get_lifetime (GUPnPDIDLLiteItem *item)
Packit 712bc5
{
Packit 712bc5
        xmlNode *node = NULL;
Packit 712bc5
        const char *lifetime_str;
Packit 712bc5
        long lifetime;
Packit 712bc5
        GUPnPDIDLLiteObject *object = NULL;
Packit 712bc5
Packit 712bc5
        g_return_val_if_fail (GUPNP_IS_DIDL_LITE_ITEM (item), -1);
Packit 712bc5
Packit 712bc5
        object = GUPNP_DIDL_LITE_OBJECT (item);
Packit 712bc5
        node = gupnp_didl_lite_object_get_xml_node (object);
Packit 712bc5
Packit 712bc5
        lifetime_str = xml_util_get_child_element_content (node, "lifetime");
Packit 712bc5
        lifetime = seconds_from_time (lifetime_str);
Packit 712bc5
Packit 712bc5
        return lifetime;
Packit 712bc5
}