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 33e4d70407173109bddf46982356394cb7117d1d..2060ea2838402a73ea6f371301726ff9affce8c5 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 d7292b452d149949188dde2508d9f719310eddda..bdf04f3cd250486017b12af97a9f0d3f1a074a94 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 99d88e88b4c6cc0f5fff2efcf7e765ac03ef8a3f..c33be18588a18fa083a75442a58f4b7ead874892 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);