ges: Let user set TimelineObject URI while not containing any TrackObject
authorThibault Saunier <thibault.saunier@collabora.com>
Wed, 4 Jan 2012 17:24:05 +0000 (14:24 -0300)
committerThibault Saunier <thibault.saunier@collabora.com>
Wed, 11 Jan 2012 14:56:17 +0000 (11:56 -0300)
In the case of not properly set uri, we can keep using the same
TimelineFileSource changing its URI until its TrackObject could be created.

This is particularly usefull in the case of formatter trying to load filesource
when the file has been moved

ges/ges-timeline-file-source.c

index b706d32a704bcf0af9a347b1af5e2786e986557c..d2e2da99505c4e6650fe83286c6dde61a0c4642c 100644 (file)
@@ -59,6 +59,8 @@ enum
 static GESTrackObject
     * ges_timeline_filesource_create_track_object (GESTimelineObject * obj,
     GESTrack * track);
+void
+ges_timeline_filesource_set_uri (GESTimelineFileSource * self, gchar * uri);
 
 static void
 ges_timeline_filesource_get_property (GObject * object, guint property_id,
@@ -92,7 +94,7 @@ ges_timeline_filesource_set_property (GObject * object, guint property_id,
 
   switch (property_id) {
     case PROP_URI:
-      tfs->priv->uri = g_value_dup_string (value);
+      ges_timeline_filesource_set_uri (tfs, g_value_dup_string (value));
       break;
     case PROP_MUTE:
       ges_timeline_filesource_set_mute (tfs, g_value_get_boolean (value));
@@ -139,7 +141,7 @@ ges_timeline_filesource_class_init (GESTimelineFileSourceClass * klass)
    */
   g_object_class_install_property (object_class, PROP_URI,
       g_param_spec_string ("uri", "URI", "uri of the resource",
-          NULL, G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY));
+          NULL, G_PARAM_READWRITE | G_PARAM_CONSTRUCT));
 
   /**
    * GESTimelineFileSource:max-duration:
@@ -407,3 +409,20 @@ ges_timeline_filesource_new (gchar * uri)
 
   return res;
 }
+
+void
+ges_timeline_filesource_set_uri (GESTimelineFileSource * self, gchar * uri)
+{
+  GESTimelineObject *tlobj = GES_TIMELINE_OBJECT (self);
+  GList *tckobjs = ges_timeline_object_get_track_objects (tlobj);
+
+  if (tckobjs) {
+    /* FIXME handle this case properly */
+    GST_WARNING_OBJECT (tlobj, "Can not change uri when already"
+        "containing TrackObjects");
+
+    return;
+  }
+
+  self->priv->uri = uri;
+}