Anki is a smart spaced repetition flashcard program
Find a file
Damien Elmes e547b0586a simplify undo
The undo code was using triggers and a temporary table to write out all changed rows before making a change. This made for powerful undo/redo support, but had some problems:
- creating the tables and triggers wasn't cheap, especially on mobile devices
- likewise, every data modification required writing into two separate databases, almost doubling the amount of writes required
- it was possible to leave the DB in an inconsistent state if an undoable operation is followed by a non-undoable operation that references the undoable operation, and the user then rolls back the undoable operation.

To address these issues, we simplify undo by integrating it with the autosave changes:
- .save() can be passed a name to mark a rollback point. If the user undoes the change, any changes since the last save are lost
- autosaves happen every 5 minutes, and are pushed back on a .save(), so the maximum work a user can lose is 5 minutes.
- reviews are handled separately, so we can let the user undo multiple reviews at once
- if necessary, special cases could be added for other operations like marking

This means that if a user does two damaging operations in a row they won't be able to restore the first one, but such an event is both unlikely, and is also covered by the backups made each time a deck is opened.
2011-04-28 09:23:59 +09:00
anki simplify undo 2011-04-28 09:23:59 +09:00
tests simplify undo 2011-04-28 09:23:59 +09:00
tools Remove call to iterate over removed dir (features) 2009-06-15 20:02:38 +02:00
.gitignore auto-detect '=' as import delimiter, strip fields 2010-03-14 11:40:31 +01:00
ChangeLog.old initial commit from hg 2008-09-27 23:50:03 +09:00
COPYING allow bsd license rather than requiring people to sign over copyright 2010-08-11 14:40:34 +09:00