|
Packit |
712bc5 |
/*
|
|
Packit |
712bc5 |
* Copyright (C) 2012 Intel Corporation
|
|
Packit |
712bc5 |
*
|
|
Packit |
712bc5 |
* Authors: Krzesimir Nowak <krnowak@openismus.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 |
#include <glib-object.h>
|
|
Packit |
712bc5 |
#include <libgupnp-av/gupnp-didl-lite-object.h>
|
|
Packit |
712bc5 |
#include <libgupnp-av/gupnp-didl-lite-writer.h>
|
|
Packit |
712bc5 |
#include <libgupnp-av/gupnp-didl-lite-item.h>
|
|
Packit |
712bc5 |
|
|
Packit |
712bc5 |
/* creates an item described by:
|
|
Packit |
712bc5 |
static const gchar * const didllite =
|
|
Packit |
712bc5 |
"\n"
|
|
Packit |
712bc5 |
"
|
|
Packit |
712bc5 |
"xmlns:dc=\"http://purl.org/dc/elements/1.1/\"\n"
|
|
Packit |
712bc5 |
"xmlns=\"urn:schemas-upnp-org:metadata-1-0/DIDL-Lite/\"\n"
|
|
Packit |
712bc5 |
"xmlns:upnp=\"urn:schemas-upnp-org:metadata-1-0/upnp/\"\n"
|
|
Packit |
712bc5 |
"xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n"
|
|
Packit |
712bc5 |
"xsi:schemaLocation=\"\n"
|
|
Packit |
712bc5 |
"urn:schemas-upnp-org:metadata-1-0/DIDL-Lite/\n"
|
|
Packit |
712bc5 |
"http://www.upnp.org/schemas/av/didl-lite.xsd\n"
|
|
Packit |
712bc5 |
"urn:schemas-upnp-org:metadata-1-0/upnp/\n"
|
|
Packit |
712bc5 |
"http://www.upnp.org/schemas/av/upnp.xsd\">\n"
|
|
Packit |
712bc5 |
"<item id=\"$id\" parentID=\"$parent_id\" restricted=\"0\">\n"
|
|
Packit |
712bc5 |
"<dc:title>Try a little tenderness</dc:title>\n"
|
|
Packit |
712bc5 |
"<upnp:class>object.item.audioItem.musicTrack</upnp:class>\n"
|
|
Packit |
712bc5 |
"<res protocolInfo=\"http-get:*:audio/mpeg:*\" size=\"3558000\">\n"
|
|
Packit |
712bc5 |
"http://168.192.1.1/audio197.mp3\n"
|
|
Packit |
712bc5 |
"</res>\n"
|
|
Packit |
712bc5 |
"<upnp:artist>Unknown</upnp:artist>\n"
|
|
Packit |
712bc5 |
"</item>\n"
|
|
Packit |
712bc5 |
"</DIDL-Lite>\n";
|
|
Packit |
712bc5 |
*/
|
|
Packit |
712bc5 |
static GUPnPDIDLLiteObject *
|
|
Packit |
712bc5 |
get_item (GUPnPDIDLLiteWriter *writer, guint id, guint parent_id)
|
|
Packit |
712bc5 |
{
|
|
Packit |
712bc5 |
GUPnPDIDLLiteItem *item = gupnp_didl_lite_writer_add_item (writer);
|
|
Packit |
712bc5 |
GUPnPDIDLLiteObject *object = GUPNP_DIDL_LITE_OBJECT (item);
|
|
Packit |
712bc5 |
GUPnPDIDLLiteContributor *artist;
|
|
Packit |
712bc5 |
GUPnPDIDLLiteResource *resource;
|
|
Packit |
712bc5 |
GUPnPProtocolInfo *info;
|
|
Packit |
712bc5 |
gchar *str_id = g_strdup_printf ("%u", id);
|
|
Packit |
712bc5 |
|
|
Packit |
712bc5 |
gupnp_didl_lite_object_set_id (object, str_id);
|
|
Packit |
712bc5 |
g_free (str_id);
|
|
Packit |
712bc5 |
str_id = g_strdup_printf ("%u", parent_id);
|
|
Packit |
712bc5 |
gupnp_didl_lite_object_set_parent_id (object, str_id);
|
|
Packit |
712bc5 |
g_free (str_id);
|
|
Packit |
712bc5 |
gupnp_didl_lite_object_set_restricted (object, FALSE);
|
|
Packit |
712bc5 |
gupnp_didl_lite_object_set_title (object, "Try a little tenderness");
|
|
Packit |
712bc5 |
gupnp_didl_lite_object_set_upnp_class
|
|
Packit |
712bc5 |
(object,
|
|
Packit |
712bc5 |
"object.item.audioItem.musicTrack");
|
|
Packit |
712bc5 |
artist = gupnp_didl_lite_object_add_artist (object);
|
|
Packit |
712bc5 |
gupnp_didl_lite_contributor_set_name (artist, "Unknown");
|
|
Packit |
712bc5 |
g_object_unref (artist);
|
|
Packit |
712bc5 |
resource = gupnp_didl_lite_object_add_resource (object);
|
|
Packit |
712bc5 |
info = gupnp_protocol_info_new ();
|
|
Packit |
712bc5 |
gupnp_protocol_info_set_protocol (info, "http-get");
|
|
Packit |
712bc5 |
gupnp_protocol_info_set_network (info, "*");
|
|
Packit |
712bc5 |
gupnp_protocol_info_set_mime_type (info, "audio/mpeg");
|
|
Packit |
712bc5 |
gupnp_didl_lite_resource_set_protocol_info (resource, info);
|
|
Packit |
712bc5 |
g_object_unref (info);
|
|
Packit |
712bc5 |
gupnp_didl_lite_resource_set_size (resource, 3558000);
|
|
Packit |
712bc5 |
gupnp_didl_lite_resource_set_uri (resource,
|
|
Packit |
712bc5 |
"http://168.192.1.1/audio197.mp3");
|
|
Packit |
712bc5 |
g_object_unref (resource);
|
|
Packit |
712bc5 |
|
|
Packit |
712bc5 |
return object;
|
|
Packit |
712bc5 |
}
|
|
Packit |
712bc5 |
|
|
Packit |
712bc5 |
static const gchar *current_fragments[] = {
|
|
Packit |
712bc5 |
/* 1 */
|
|
Packit |
712bc5 |
"<upnp:class>object.item.audioItem.musicTrack</upnp:class>",
|
|
Packit |
712bc5 |
/* 2 */
|
|
Packit |
712bc5 |
"",
|
|
Packit |
712bc5 |
/* 3 */
|
|
Packit |
712bc5 |
"<upnp:artist>Unknown</upnp:artist>",
|
|
Packit |
712bc5 |
/* 4 */
|
|
Packit |
712bc5 |
"<dc:title>Try a little tenderness</dc:title>"
|
|
Packit |
712bc5 |
};
|
|
Packit |
712bc5 |
|
|
Packit |
712bc5 |
static const gchar *new_fragments[] = {
|
|
Packit |
712bc5 |
/* 1 */
|
|
Packit |
712bc5 |
"<upnp:class>object.item.audioItem.musicTrack</upnp:class>"
|
|
Packit |
712bc5 |
"<upnp:genre>Obscure</upnp:genre>",
|
|
Packit |
712bc5 |
/* 2 */
|
|
Packit |
712bc5 |
"<upnp:genre>Even more obscure</upnp:genre>",
|
|
Packit |
712bc5 |
/* 3 */
|
|
Packit |
712bc5 |
"",
|
|
Packit |
712bc5 |
/* 4 */
|
|
Packit |
712bc5 |
"<dc:title>Cthulhu fhtagn</dc:title>"
|
|
Packit |
712bc5 |
};
|
|
Packit |
712bc5 |
|
|
Packit |
712bc5 |
static void
|
|
Packit |
712bc5 |
debug_dump (GUPnPDIDLLiteObject *object)
|
|
Packit |
712bc5 |
{
|
|
Packit |
712bc5 |
xmlChar *dump = NULL;
|
|
Packit |
712bc5 |
xmlNodePtr node = gupnp_didl_lite_object_get_xml_node (object);
|
|
Packit |
712bc5 |
xmlDocPtr doc = node->doc;
|
|
Packit |
712bc5 |
|
|
Packit |
712bc5 |
xmlDocDumpMemory (doc, &dump, NULL);
|
|
Packit |
712bc5 |
g_debug ("Obj dump:\n%s", dump);
|
|
Packit |
712bc5 |
xmlFree (dump);
|
|
Packit |
712bc5 |
}
|
|
Packit |
712bc5 |
|
|
Packit |
712bc5 |
int main (void)
|
|
Packit |
712bc5 |
{
|
|
Packit |
712bc5 |
GUPnPDIDLLiteObject *temp_object;
|
|
Packit |
712bc5 |
GUPnPDIDLLiteObject *object;
|
|
Packit |
712bc5 |
GUPnPDIDLLiteFragmentResult result;
|
|
Packit |
712bc5 |
GUPnPDIDLLiteWriter *writer;
|
|
Packit |
712bc5 |
int retval = 1;
|
|
Packit |
712bc5 |
const gchar *value;
|
|
Packit |
712bc5 |
GList* artists;
|
|
Packit |
712bc5 |
GUPnPDIDLLiteContributor *artist;
|
|
Packit |
712bc5 |
|
|
Packit |
712bc5 |
#if !GLIB_CHECK_VERSION (2, 35, 0)
|
|
Packit |
712bc5 |
g_type_init ();
|
|
Packit |
712bc5 |
#endif
|
|
Packit |
712bc5 |
g_setenv ("GUPNP_AV_DATADIR", ABS_TOP_SRCDIR G_DIR_SEPARATOR_S "data", FALSE);
|
|
Packit |
712bc5 |
|
|
Packit |
712bc5 |
writer = gupnp_didl_lite_writer_new (NULL);
|
|
Packit |
712bc5 |
temp_object = get_item (writer, 3, 2);
|
|
Packit |
712bc5 |
object = get_item (writer, 18, 13);
|
|
Packit |
712bc5 |
debug_dump (object);
|
|
Packit |
712bc5 |
result = gupnp_didl_lite_object_apply_fragments (object,
|
|
Packit |
712bc5 |
(char **) current_fragments,
|
|
Packit |
712bc5 |
G_N_ELEMENTS (current_fragments),
|
|
Packit |
712bc5 |
(char **) new_fragments,
|
|
Packit |
712bc5 |
G_N_ELEMENTS (new_fragments));
|
|
Packit |
712bc5 |
debug_dump (object);
|
|
Packit |
712bc5 |
if (result != GUPNP_DIDL_LITE_FRAGMENT_RESULT_OK) {
|
|
Packit |
712bc5 |
g_warning ("Applying fragments failed.");
|
|
Packit |
712bc5 |
goto out;
|
|
Packit |
712bc5 |
}
|
|
Packit |
712bc5 |
|
|
Packit |
712bc5 |
value = gupnp_didl_lite_object_get_title (object);
|
|
Packit |
712bc5 |
|
|
Packit |
712bc5 |
if (g_strcmp0 (value, "Cthulhu fhtagn")) {
|
|
Packit |
712bc5 |
g_warning ("Title is '%s', should be 'Cthulhu fhtagn'.", value);
|
|
Packit |
712bc5 |
goto out;
|
|
Packit |
712bc5 |
}
|
|
Packit |
712bc5 |
|
|
Packit |
712bc5 |
artists = gupnp_didl_lite_object_get_artists (object);
|
|
Packit |
712bc5 |
|
|
Packit |
712bc5 |
if (artists) {
|
|
Packit |
712bc5 |
g_warning ("Should be no artists.");
|
|
Packit |
712bc5 |
g_list_free_full (artists, g_object_unref);
|
|
Packit |
712bc5 |
goto out;
|
|
Packit |
712bc5 |
}
|
|
Packit |
712bc5 |
|
|
Packit |
712bc5 |
value = gupnp_didl_lite_object_get_title (temp_object);
|
|
Packit |
712bc5 |
|
|
Packit |
712bc5 |
if (g_strcmp0 (value, "Try a little tenderness")) {
|
|
Packit |
712bc5 |
g_warning ("Title is '%s', should be 'Try a little tenderness'.", value);
|
|
Packit |
712bc5 |
goto out;
|
|
Packit |
712bc5 |
}
|
|
Packit |
712bc5 |
|
|
Packit |
712bc5 |
artists = gupnp_didl_lite_object_get_artists (temp_object);
|
|
Packit |
712bc5 |
|
|
Packit |
712bc5 |
if (!artists) {
|
|
Packit |
712bc5 |
g_warning ("Should be one artist, there are none.");
|
|
Packit |
712bc5 |
goto out;
|
|
Packit |
712bc5 |
}
|
|
Packit |
712bc5 |
if (artists->next) {
|
|
Packit |
712bc5 |
g_list_free_full (artists, g_object_unref);
|
|
Packit |
712bc5 |
g_warning ("Should be one artist, there are more.");
|
|
Packit |
712bc5 |
goto out;
|
|
Packit |
712bc5 |
}
|
|
Packit |
712bc5 |
artist = g_object_ref (artists->data);
|
|
Packit |
712bc5 |
g_list_free_full (artists, g_object_unref);
|
|
Packit |
712bc5 |
value = gupnp_didl_lite_contributor_get_name (artist);
|
|
Packit |
712bc5 |
if (g_strcmp0 (value, "Unknown")) {
|
|
Packit |
712bc5 |
g_object_unref (artist);
|
|
Packit |
712bc5 |
g_warning ("Artist is '%s', but should be 'Unknown'.", value);
|
|
Packit |
712bc5 |
goto out;
|
|
Packit |
712bc5 |
}
|
|
Packit |
712bc5 |
g_object_unref (artist);
|
|
Packit |
712bc5 |
|
|
Packit |
712bc5 |
retval = 0;
|
|
Packit |
712bc5 |
out:
|
|
Packit |
712bc5 |
g_object_unref (object);
|
|
Packit |
712bc5 |
g_object_unref (temp_object);
|
|
Packit |
712bc5 |
g_object_unref (writer);
|
|
Packit |
712bc5 |
return retval;
|
|
Packit |
712bc5 |
}
|