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.
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)