Make undo/redo more resilient
@aleb
Submitted by Alex Băluț Assigned to Stefan-Adrian Popa @stefanzzz
Description
When an exception is raised in a self.app.action_log.started
context, it could catch it and abort the started undoable action. Otherwise this can happen:
Some action fails:
Traceback (most recent call last):
File "/home/aleb/dev/pitivi/pitivi/pitivi/effects.py", line 491, in _buttonPressEventCb
self._addSelectedEffect()
File "/home/aleb/dev/pitivi/pitivi/pitivi/effects.py", line 518, in _addSelectedEffect
clip.ui.add_effect(effect_info)
File "/home/aleb/dev/pitivi/pitivi/pitivi/timeline/elements.py", line 1136, in add_effect
for effect in self.find_track_elements(None, GES.TrackType.VIDEO,
AttributeError: 'UriClip' object has no attribute 'find_track_elements'
No other action can be done because the undo stack is not empty:
Traceback (most recent call last):
File "/home/aleb/dev/pitivi/pitivi/pitivi/effects.py", line 491, in _buttonPressEventCb
self._addSelectedEffect()
File "/home/aleb/dev/pitivi/pitivi/pitivi/effects.py", line 517, in _addSelectedEffect
toplevel=True):
File "/usr/lib/python3.5/contextlib.py", line 59, in __enter__
return next(self.gen)
File "/home/aleb/dev/pitivi/pitivi/pitivi/undo/undo.py", line 190, in started
self.begin(action_group_name, **kwargs)
File "/home/aleb/dev/pitivi/pitivi/pitivi/undo/undo.py", line 208, in begin
raise UndoWrongStateError("Toplevel operation started as suboperation", self.stacks)
pitivi.undo.undo.UndoWrongStateError: ('Toplevel operation started as suboperation', [add effect: []])