Only shallow copy when filtering a playlist.
authorW. Trevor King <wking@drexel.edu>
Thu, 11 Nov 2010 13:13:09 +0000 (08:13 -0500)
committerW. Trevor King <wking@drexel.edu>
Thu, 11 Nov 2010 13:13:09 +0000 (08:13 -0500)
We should iterate through the base playlist, because iterating over a
playlist that's having items removed is poorly defined.  However, if
were iterating through the input playlist and removing items from the
copy, we need a shallow copy so the item ids still match.  Curves can
belong to several playlists, so shallow copies are ok.

Another problem with the old version was that the _index was being
updated in the copy, not the current curve, so the
current_curve_callback() bit was *not* working.

hooke/playlist.py

index cd5f9fbd3e37cc01e60dcd121b9a8d9761db0ce4..6dde157502ba5f4a2ef1cb12d0a09c41c0385df9 100644 (file)
@@ -138,11 +138,11 @@ class NoteIndexList (list):
 
     def filter(self, keeper_fn=lambda item:True, load_curves=True,
                *args, **kwargs):
-        c = copy.deepcopy(self)
+        c = copy.copy(self)
         if load_curves == True:
-            items = c.items(reverse=True)
+            items = self.items(reverse=True)
         else:
-            items = reversed(c)
+            items = reversed(self)
         for item in items: 
             if keeper_fn(item, *args, **kwargs) != True:
                 c.remove(item)