diff options
author | Jens Georg <mail@jensge.org> | 2012-10-30 20:26:22 +0100 |
---|---|---|
committer | Jens Georg <mail@jensge.org> | 2012-11-19 13:17:19 +0100 |
commit | a6fb9414fb3d23147823b8e225b2292003fd63a3 (patch) | |
tree | 2bda74617a5a5b47f61b52d28fc5f436ba90a594 | |
parent | 71e46f7db6e1906a4fbfcaaf30f69d40d6abaf45 (diff) | |
download | gupnp-av-a6fb9414fb3d23147823b8e225b2292003fd63a3.tar.gz |
Add dlna:lifetime property to items
-rw-r--r-- | doc/gupnp-av-sections.txt | 2 | ||||
-rw-r--r-- | libgupnp-av/Makefile.am | 2 | ||||
-rw-r--r-- | libgupnp-av/gupnp-didl-lite-item.c | 90 | ||||
-rw-r--r-- | libgupnp-av/gupnp-didl-lite-item.h | 9 | ||||
-rw-r--r-- | libgupnp-av/gupnp-didl-lite-resource.c | 34 | ||||
-rw-r--r-- | libgupnp-av/time-utils.c | 68 | ||||
-rw-r--r-- | libgupnp-av/time-utils.h | 35 |
7 files changed, 207 insertions, 33 deletions
diff --git a/doc/gupnp-av-sections.txt b/doc/gupnp-av-sections.txt index 899c739..3164f3f 100644 --- a/doc/gupnp-av-sections.txt +++ b/doc/gupnp-av-sections.txt @@ -123,6 +123,8 @@ gupnp_didl_lite_container_get_type GUPnPDIDLLiteItem gupnp_didl_lite_item_get_ref_id gupnp_didl_lite_item_set_ref_id +gupnp_didl_lite_item_get_lifetime +gupnp_didl_lite_item_set_lifetime <SUBSECTION Standard> GUPnPDIDLLiteItemClass GUPNP_TYPE_DIDL_LITE_ITEM diff --git a/libgupnp-av/Makefile.am b/libgupnp-av/Makefile.am index 3699367..5d0b6f9 100644 --- a/libgupnp-av/Makefile.am +++ b/libgupnp-av/Makefile.am @@ -75,6 +75,8 @@ libgupnp_av_1_0_la_SOURCES = gupnp-didl-lite-object.c \ gvalue-util.h \ fragment-util.c \ fragment-util.h \ + time-utils.c \ + time-utils.h \ xsd-data.c \ xsd-data.h \ $(BUILT_SOURCES) diff --git a/libgupnp-av/gupnp-didl-lite-item.c b/libgupnp-av/gupnp-didl-lite-item.c index 9e5d34c..ab38cb6 100644 --- a/libgupnp-av/gupnp-didl-lite-item.c +++ b/libgupnp-av/gupnp-didl-lite-item.c @@ -31,6 +31,7 @@ #include "gupnp-didl-lite-item.h" #include "xml-util.h" +#include "time-utils.h" G_DEFINE_TYPE (GUPnPDIDLLiteItem, gupnp_didl_lite_item, @@ -38,7 +39,8 @@ G_DEFINE_TYPE (GUPnPDIDLLiteItem, enum { PROP_0, - PROP_REF_ID + PROP_REF_ID, + PROP_LIFETIME }; static void @@ -63,6 +65,11 @@ gupnp_didl_lite_item_get_property (GObject *object, (value, gupnp_didl_lite_item_get_ref_id (item)); break; + case PROP_LIFETIME: + g_value_set_long + (value, + gupnp_didl_lite_item_get_lifetime (item)); + break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); break; @@ -85,6 +92,10 @@ gupnp_didl_lite_item_set_property (GObject *object, gupnp_didl_lite_item_set_ref_id (item, g_value_get_string (value)); break; + case PROP_LIFETIME: + gupnp_didl_lite_item_set_lifetime (item, + g_value_get_long (value)); + break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); break; @@ -117,6 +128,24 @@ gupnp_didl_lite_item_class_init (GUPnPDIDLLiteItemClass *klass) G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB)); + + /** + * GUPnPDIDLLiteItem:lifetime: + * + * The lifetime in seconds of this DIDLLite item in a media collection. + **/ + g_object_class_install_property + (object_class, + PROP_LIFETIME, + g_param_spec_long ("lifetime", + "Lifetime", + "The lifetime (in seconds) of this" + " item.", + -1, + G_MAXLONG, + -1, + G_PARAM_READWRITE | + G_PARAM_STATIC_STRINGS)); } /** @@ -166,3 +195,62 @@ gupnp_didl_lite_item_set_ref_id (GUPnPDIDLLiteItem *item, g_object_notify (G_OBJECT (item), "ref-id"); } + +/** + * gupnp_didl_lite_item_set_lifetime: + * @item: #GUPnPDIDLLiteItem + * @lifetime: The lifetime (in seconds) of this item in a media collection. + **/ +void +gupnp_didl_lite_item_set_lifetime (GUPnPDIDLLiteItem *item, + glong lifetime) +{ + xmlNode *node = NULL; + xmlNs *ns = NULL; + GUPnPXMLDoc *doc = NULL; + GUPnPDIDLLiteObject *object = NULL; + + g_return_if_fail (GUPNP_IS_DIDL_LITE_ITEM (item)); + + object = GUPNP_DIDL_LITE_OBJECT (item); + node = gupnp_didl_lite_object_get_xml_node (object); + ns = gupnp_didl_lite_object_get_dlna_namespace (object); + g_object_get (G_OBJECT (object), "xml-doc", &doc, NULL); + + if (lifetime < 0) + xml_util_unset_child (node, "lifetime"); + else { + char *str; + + str = seconds_to_time (lifetime); + xml_util_set_child (node, ns, doc->doc, "lifetime", str); + g_free (str); + } + + g_object_notify (G_OBJECT (object), "lifetime"); +} + +/** + * gupnp_didl_lite_item_get_lifetime: + * @item: #GUPnPDIDLLiteItem + * + * Returns: -1 if unset or the lifetime (in seconds) of the current item. + **/ +glong +gupnp_didl_lite_item_get_lifetime (GUPnPDIDLLiteItem *item) +{ + xmlNode *node = NULL; + const char *lifetime_str; + long lifetime; + GUPnPDIDLLiteObject *object = NULL; + + g_return_val_if_fail (GUPNP_IS_DIDL_LITE_ITEM (item), -1); + + object = GUPNP_DIDL_LITE_OBJECT (item); + node = gupnp_didl_lite_object_get_xml_node (object); + + lifetime_str = xml_util_get_child_element_content (node, "lifetime"); + lifetime = seconds_from_time (lifetime_str); + + return lifetime; +} diff --git a/libgupnp-av/gupnp-didl-lite-item.h b/libgupnp-av/gupnp-didl-lite-item.h index 1719729..e55c271 100644 --- a/libgupnp-av/gupnp-didl-lite-item.h +++ b/libgupnp-av/gupnp-didl-lite-item.h @@ -1,8 +1,10 @@ /* * Copyright (C) 2009 Nokia Corporation. + * Copyright (C) 2012 Intel Corporation. * * Authors: Zeeshan Ali (Khattak) <zeeshan.ali@nokia.com> * <zeeshanak@gnome.org> + * Jens Georg <jensg@openismus.com> * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public @@ -73,6 +75,13 @@ void gupnp_didl_lite_item_set_ref_id (GUPnPDIDLLiteItem *item, const char *ref_id); +void +gupnp_didl_lite_item_set_lifetime (GUPnPDIDLLiteItem *item, + glong lifetime); + +glong +gupnp_didl_lite_item_get_lifetime (GUPnPDIDLLiteItem *item); + G_END_DECLS #endif /* __GUPNP_DIDL_LITE_ITEM_H__ */ diff --git a/libgupnp-av/gupnp-didl-lite-resource.c b/libgupnp-av/gupnp-didl-lite-resource.c index 8210b7c..041976a 100644 --- a/libgupnp-av/gupnp-didl-lite-resource.c +++ b/libgupnp-av/gupnp-didl-lite-resource.c @@ -35,9 +35,7 @@ #include "gupnp-didl-lite-resource.h" #include "xml-util.h" - -#define SEC_PER_MIN 60 -#define SEC_PER_HOUR 3600 +#include "time-utils.h" G_DEFINE_TYPE (GUPnPDIDLLiteResource, gupnp_didl_lite_resource, @@ -106,31 +104,6 @@ return_point: g_strfreev (tokens); } -static long -seconds_from_time (const char *time_str) -{ - char **tokens; - gdouble seconds = -1; - - if (time_str == NULL) - return -1; - - tokens = g_strsplit (time_str, ":", -1); - if (tokens[0] == NULL || - tokens[1] == NULL || - tokens[2] == NULL) - goto return_point; - - seconds = g_strtod (tokens[2], NULL); - seconds += g_strtod (tokens[1], NULL) * SEC_PER_MIN; - seconds += g_strtod (tokens[0], NULL) * SEC_PER_HOUR; - -return_point: - g_strfreev (tokens); - - return (long) seconds; -} - static void on_protocol_info_changed (GUPnPProtocolInfo *info, GParamSpec *pspec, @@ -1220,10 +1193,7 @@ gupnp_didl_lite_resource_set_duration (GUPnPDIDLLiteResource *resource, else { char *str; - str = g_strdup_printf ("%ld:%.2ld:%.2ld.000", - duration / (60 * 60), - (duration / 60) % 60, - duration % 60); + str = seconds_to_time (duration); xmlSetProp (resource->priv->xml_node, (unsigned char *) "duration", (unsigned char *) str); diff --git a/libgupnp-av/time-utils.c b/libgupnp-av/time-utils.c new file mode 100644 index 0000000..0964f9e --- /dev/null +++ b/libgupnp-av/time-utils.c @@ -0,0 +1,68 @@ +/* + * Copyright (C) 2012 Intel Corporation. + * + * Authors: Jens Georg <jensg@openismus.com> + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public + * License along with this library; if not, write to the + * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + * Boston, MA 02110-1301, USA. + */ + +#include <glib.h> + +#include "time-utils.h" + +#define SEC_PER_MIN 60 +#define SEC_PER_HOUR 3600 + +long +seconds_from_time (const char *time_str) +{ + char **tokens; + gdouble seconds = -1; + + if (time_str == NULL) + return -1; + + tokens = g_strsplit (time_str, ":", -1); + if (tokens[0] == NULL || + tokens[1] == NULL || + tokens[2] == NULL) + goto return_point; + + seconds = g_strtod (tokens[2], NULL); + seconds += g_strtod (tokens[1], NULL) * SEC_PER_MIN; + seconds += g_strtod (tokens[0], NULL) * SEC_PER_HOUR; + +return_point: + g_strfreev (tokens); + + return (long) seconds; +} + +char * +seconds_to_time (long seconds) +{ + char *str; + + if (seconds < 0) + return NULL; + + str = g_strdup_printf ("%ld:%.2ld:%.2ld.000", + seconds / (60 * 60), + (seconds / 60) % 60, + seconds % 60); + + return str; +} diff --git a/libgupnp-av/time-utils.h b/libgupnp-av/time-utils.h new file mode 100644 index 0000000..d15c598 --- /dev/null +++ b/libgupnp-av/time-utils.h @@ -0,0 +1,35 @@ +/* + * Copyright (C) 2012 Intel Corporation. + * + * Authors: Jens Georg <jensg@openismus.com> + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public + * License along with this library; if not, write to the + * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + * Boston, MA 02110-1301, USA. + */ + +#ifndef __TIME_UTILS_H__ +#define __TIME_UTILS_H__ + +G_BEGIN_DECLS + +G_GNUC_INTERNAL long +seconds_from_time (const char *time_string); + +G_GNUC_INTERNAL char * +seconds_to_time (long seconds); + +G_END_DECLS + +#endif /* __TIME_UTILS_H__ */ |