|
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 |
}
|