uridownloader: Store URI and redirect target in the downloaded fragments
authorSebastian Dröge <sebastian@centricular.com>
Wed, 28 May 2014 07:42:44 +0000 (09:42 +0200)
committerSebastian Dröge <sebastian@centricular.com>
Wed, 28 May 2014 07:44:24 +0000 (09:44 +0200)
gst-libs/gst/uridownloader/gstfragment.c
gst-libs/gst/uridownloader/gstfragment.h
gst-libs/gst/uridownloader/gsturidownloader.c

index 33e4d70..2060ea2 100644 (file)
@@ -180,6 +180,8 @@ gst_fragment_finalize (GObject * gobject)
 {
   GstFragment *fragment = GST_FRAGMENT (gobject);
 
+  g_free (fragment->uri);
+  g_free (fragment->redirect_uri);
   g_free (fragment->name);
   g_mutex_clear (&fragment->priv->lock);
 
index d7292b4..bdf04f3 100644 (file)
@@ -41,6 +41,10 @@ struct _GstFragment
 {
   GObject parent;
 
+  gchar * uri;                  /* URI of the fragment */
+  gchar * redirect_uri;         /* Redirect target if any */
+  gboolean redirect_permanent;  /* If the redirect is permanent */
+
   gchar * name;                 /* Name of the fragment */
   gboolean completed;           /* Whether the fragment is complete or not */
   guint64 download_start_time;  /* Epoch time when the download started */
index 99d88e8..c33be18 100644 (file)
@@ -545,10 +545,22 @@ quit:
 
       /* set the element state to NULL */
       GST_OBJECT_UNLOCK (downloader);
-      if (download == NULL)
+      if (download == NULL) {
         gst_element_set_state (urisrc, GST_STATE_NULL);
-      else
+      } else {
+        GstQuery *query;
+
+        /* Download successfull, let's query the URI */
+        query = gst_query_new_uri ();
+        if (gst_element_query (urisrc, query)) {
+          gst_query_parse_uri (query, &download->uri);
+          gst_query_parse_uri_redirection (query, &download->redirect_uri);
+          gst_query_parse_uri_redirection_permanent (query,
+              &download->redirect_permanent);
+        }
+        gst_query_unref (query);
         gst_element_set_state (urisrc, GST_STATE_READY);
+      }
       GST_OBJECT_LOCK (downloader);
       gst_element_set_bus (urisrc, NULL);