msmith - in flumotion/trunk: . flumotion/component/producers/playlist flumotion/test

flumotion-commit at lists.fluendo.com flumotion-commit at lists.fluendo.com
Wed Jul 4 12:29:21 CEST 2007


Author: msmith
Date: Wed Jul  4 12:29:16 2007
New Revision: 5296

Modified:
   flumotion/trunk/ChangeLog
   flumotion/trunk/flumotion/component/producers/playlist/playlist.py
   flumotion/trunk/flumotion/component/producers/playlist/playlistparser.py
   flumotion/trunk/flumotion/test/test_component_playlist.py
Log:
        * flumotion/component/producers/playlist/playlist.py:
          Return item if we successfully scheduled it.
        * flumotion/component/producers/playlist/playlistparser.py:
          Unlink item from list if we failed to schedule it, so we don't have
          stale entries that we can't clean up properly.
        * flumotion/test/test_component_playlist.py:
          Return item in FakeProducer as API now requires it.



Modified: flumotion/trunk/ChangeLog
==============================================================================
--- flumotion/trunk/ChangeLog	(original)
+++ flumotion/trunk/ChangeLog	Wed Jul  4 12:29:16 2007
@@ -1,3 +1,12 @@
+2007-07-04  Michael Smith <msmith at fluendo.com>
+	* flumotion/component/producers/playlist/playlist.py:
+	  Return item if we successfully scheduled it.
+	* flumotion/component/producers/playlist/playlistparser.py:
+	  Unlink item from list if we failed to schedule it, so we don't have
+	  stale entries that we can't clean up properly.
+	* flumotion/test/test_component_playlist.py:
+	  Return item in FakeProducer as API now requires it.
+
 2007-07-04  Andy Wingo  <wingo at pobox.com>
 
 	* flumotion/common/registry.py (RegistryDirectory.__init__)

Modified: flumotion/trunk/flumotion/component/producers/playlist/playlist.py
==============================================================================
--- flumotion/trunk/flumotion/component/producers/playlist/playlist.py	(original)
+++ flumotion/trunk/flumotion/component/producers/playlist/playlist.py	Wed Jul  4 12:29:16 2007
@@ -246,7 +246,7 @@
         if start < neareststarttime:
             if start + item.duration < neareststarttime:
                 self.debug("Item too late; skipping entirely")
-                return
+                return False
             else:
                 change = neareststarttime - start
                 self.debug("Starting item with offset %d", change)
@@ -276,6 +276,7 @@
             self.audiocomp.add(asrc)
             self._asrcs[item] = asrc
         self.debug("Done scheduling")
+        return True
 
     def unscheduleItem(self, item):
         self.debug("Unscheduling item at uri %s", item.uri)

Modified: flumotion/trunk/flumotion/component/producers/playlist/playlistparser.py
==============================================================================
--- flumotion/trunk/flumotion/component/producers/playlist/playlistparser.py	(original)
+++ flumotion/trunk/flumotion/component/producers/playlist/playlistparser.py	Wed Jul  4 12:29:16 2007
@@ -87,13 +87,7 @@
                     current.duration):
                 self.debug("Not removing current item!")
                 continue
-            if item.prev:
-                item.prev.next = item.next
-            else:
-                self.items = item.next
-
-            if item.next:
-                item.next.prev = item.prev
+            self.unlinkItem(item)
             self.producer.unscheduleItem(item)
 
         del self._itemsById[id]
@@ -181,10 +175,23 @@
             self.producer.adjustItemScheduling(next)
 
         # Then we need to actually add newitem into the gnonlin timeline
-        self.producer.scheduleItem(newitem)
+        if not self.producer.scheduleItem(newitem):
+            self.debug("Failed to schedule item, unlinking")
+            # Failed to schedule it. 
+            self.unlinkItem(newitem)
+            return None
 
         return newitem
 
+    def unlinkItem(self, item):
+        if item.prev:
+            item.prev.next = item.next
+        else:
+            self.items = item.next
+
+        if item.next:
+            item.next.prev = item.prev
+
 class PlaylistParser(object, log.Loggable):
     def __init__(self, playlist):
         self.playlist = playlist

Modified: flumotion/trunk/flumotion/test/test_component_playlist.py
==============================================================================
--- flumotion/trunk/flumotion/test/test_component_playlist.py	(original)
+++ flumotion/trunk/flumotion/test/test_component_playlist.py	Wed Jul  4 12:29:16 2007
@@ -32,7 +32,7 @@
     position = -1
 
     def scheduleItem(self, item):
-        pass
+        return item
 
     def unscheduleItem(self, item):
         pass


More information about the flumotion-commit mailing list