static void
gupnp_dlna_information_get_property (GObject    *object,
                                     guint       property_id,
                                     GValue     *value,
                                     GParamSpec *pspec)
{
        GUPnPDLNAInformation *self = GUPNP_DLNA_INFORMATION (object);
        GUPnPDLNAInformationPrivate *priv = GET_PRIVATE (self);

        switch (property_id) {
                case PROP_DLNA_NAME:
                        g_value_set_string (value, priv->name);

                        break;

                case PROP_DLNA_MIME:
                        g_value_set_string (value, priv->mime);

                        break;

                case PROP_DISCOVERER_INFO:
                        gst_value_set_mini_object (value,
                                                   GST_MINI_OBJECT(priv->info));

                        break;

                default:
                        G_OBJECT_WARN_INVALID_PROPERTY_ID (object,
                                                           property_id,
                                                           pspec);

                        break;
        }
}
/**
 * gupnp_dlna_gst_utils_information_from_discoverer_info:
 * @info: A #GstDiscovererInfo object.
 *
 * This utility function creates a #GUPnPDLNAInformation from
 * #GstDiscovererInfo. Its purpose is mainly to pass its result to
 * gupnp_dlna_profile_guesser_guess_profile_from_info() to avoid
 * rediscovering of a URI. Created #GUPnPDLNAInformation takes a
 * reference on @info.
 *
 * Returns: (transfer full): A #GUPnPDLNAInformation. Unref it when
 * done with it.
 */
GUPnPDLNAInformation *
gupnp_dlna_gst_utils_information_from_discoverer_info (GstDiscovererInfo *info)
{
        g_return_val_if_fail (GST_IS_DISCOVERER_INFO (info), NULL);

        return GUPNP_DLNA_INFORMATION
                            (gupnp_dlna_gst_information_new_from_discoverer_info
                                        (gst_discoverer_info_get_uri (info),
                                         info));
}
static void
gupnp_dlna_information_finalize (GObject *object)
{
        GUPnPDLNAInformation *self = GUPNP_DLNA_INFORMATION (object);
        GUPnPDLNAInformationPrivate *priv = GET_PRIVATE (self);

        g_free (priv->name);
        g_free (priv->mime);
        if (priv->info)
                gst_discoverer_info_unref (priv->info);

        G_OBJECT_CLASS (gupnp_dlna_information_parent_class)->finalize (object);
}
static void
gupnp_dlna_discovered_cb (GUPnPDLNAMetadataExtractor *self,
                          GstDiscovererInfo *info,
                          GError *error,
                          gpointer user_data)
{
        GstDiscoverer *discoverer = GST_DISCOVERER (user_data);
        GUPnPDLNAInformation *gupnp_info = NULL;

        if (error)
                gupnp_info = GUPNP_DLNA_INFORMATION
                                  (gupnp_dlna_gst_information_new_empty_with_uri
                                        (gst_discoverer_info_get_uri (info)));
        else
                gupnp_info = gupnp_dlna_gst_utils_information_from_discoverer_info
                                        (info);
        gupnp_dlna_metadata_extractor_emit_done (self,
                                                 gupnp_info,
                                                 error);
        g_object_unref (gupnp_info);
        g_idle_add ((GSourceFunc) unref_discoverer_in_idle, discoverer);
}
static void
gupnp_dlna_information_set_property (GObject      *object,
                                     guint         property_id,
                                     const GValue *value,
                                     GParamSpec   *pspec)
{
        GUPnPDLNAInformation *self = GUPNP_DLNA_INFORMATION (object);
        GUPnPDLNAInformationPrivate *priv = GET_PRIVATE (self);

        switch (property_id) {
                case PROP_DLNA_NAME:
                        g_free (priv->name);
                        priv->name = g_value_dup_string (value);

                        break;

                case PROP_DLNA_MIME:
                        g_free (priv->mime);
                        priv->mime = g_value_dup_string (value);

                        break;

                case PROP_DISCOVERER_INFO:
                        if (priv->info)
                                gst_discoverer_info_unref (priv->info);
                        priv->info = GST_DISCOVERER_INFO
                                (gst_value_dup_mini_object (value));

                        break;

                default:
                        G_OBJECT_WARN_INVALID_PROPERTY_ID (object,
                                                           property_id,
                                                           pspec);

                        break;
        }
}