Blame tests/fragments.c

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
}