static char * parse_result (const char *result) { GUPnPDIDLLiteParser *parser; GError *error; const char *import_uri; parser = gupnp_didl_lite_parser_new (); g_signal_connect (parser, "item-available", G_CALLBACK (didl_item_available_cb), &import_uri); import_uri = NULL; error = NULL; if (!gupnp_didl_lite_parser_parse_didl (parser, result, &error)) { g_critical ("Failed to parse result DIDL from MediaServer: %s", error->message); g_error_free (error); } g_object_unref (parser); return g_strdup (import_uri); }
static char * parse_result (const char *result) { GUPnPDIDLLiteParser *parser; char *container_id; GError *error; parser = gupnp_didl_lite_parser_new (); g_signal_connect (parser, "container-available", G_CALLBACK (didl_container_available_cb), &container_id); container_id = NULL; error = NULL; if (!gupnp_didl_lite_parser_parse_didl (parser, result, &error)) { g_critical ("Failed to parse result DIDL from MediaServer: %s", error->message); g_error_free (error); } g_object_unref (parser); return container_id; }
void browse_cb(GUPnPServiceProxy *content_dir, GUPnPServiceProxyAction *action, gpointer user_data) { struct browse_data *data; char *didl_xml; guint32 number_returned; guint32 total_matches; GError *error; data = (struct browse_data *)user_data; didl_xml = NULL; error = NULL; gupnp_service_proxy_end_action(content_dir, action, &error, "Result", G_TYPE_STRING, &didl_xml, "NumberReturned", G_TYPE_UINT, &number_returned, "TotalMatches", G_TYPE_UINT, &total_matches, NULL); if (didl_xml) { guint32 remaining; GError *error = NULL; if (!gupnp_didl_lite_parser_parse_didl(data->didl_parser, didl_xml, add_content, data, &error)) { g_warning("%s\n", error->message); g_error_free(error); } g_free(didl_xml); data->starting_index += number_returned; /* See if we have more objects to get */ remaining = total_matches - data->starting_index; /* Keep browsing till we get each and every object */ if (remaining != 0) browse(content_dir, data->id, data->starting_index, MIN(remaining, MAX_BROWSE), data->list, data->didl_parser); } else if (error) { GUPnPServiceInfo *info; info = GUPNP_SERVICE_INFO(content_dir); g_warning("Failed to browse '%s': %s\n", gupnp_service_info_get_location(info), error->message); g_error_free(error); } browse_data_free(data); }
/*! * \brief Parse a DIDLLite XML snippet into GUPnPDIDLLiteObjects. * * \param didlLite the DIDLLite XML snippet to parse * \return a list of parsed objects or an empty list if an error occured. * \sa hasError(), errorMessage() */ DIDLLiteObjectList DIDLLiteParser::parse(const char *didlLite) { Q_D(DIDLLiteParser); GError *error = 0; d->m_objects.clear(); if (gupnp_didl_lite_parser_parse_didl(d->m_parser, didlLite, &error) == FALSE) { d->m_lastError = error; qDebug() << "Faild to parse DIDLLite XML" << error->message; } return d->m_objects; }
END_TEST START_TEST(test_didl_container) { GUPnPDIDLLiteParser* parser; g_type_init(); g_thread_init(NULL); parser = gupnp_didl_lite_parser_new(); g_signal_connect(parser, "object-available", (GCallback)test_didl_container_cb, NULL); gupnp_didl_lite_parser_parse_didl(parser, DIDL_CONTAINER, NULL); g_object_unref(parser); }