From 87fbd896fce229e3ad472f361fa540f162987030 Mon Sep 17 00:00:00 2001 From: Damien Elmes Date: Fri, 16 Jan 2009 18:54:32 +0900 Subject: [PATCH] fix undo bugs, add progress, improve progress of check media db --- anki/deck.py | 12 +++++++++--- anki/media.py | 9 +++++++-- 2 files changed, 16 insertions(+), 5 deletions(-) diff --git a/anki/deck.py b/anki/deck.py index a6c24ebac..71d59e947 100644 --- a/anki/deck.py +++ b/anki/deck.py @@ -1857,7 +1857,7 @@ insert into undoLog values (null, 'insert into %(t)s (rowid""" % {'t': table} self.redoStack = [] def _latestUndoRow(self): - return self.s.scalar("select max(rowid) from undoLog") + return self.s.scalar("select max(rowid) from undoLog") or 0 def _undoredo(self, src, dst): self.s.flush() @@ -1868,15 +1868,21 @@ insert into undoLog values (null, 'insert into %(t)s (rowid""" % {'t': table} (start, end) = (u[1], u[2]) if end is None: end = self._latestUndoRow() + self.startProgress(_("Undo/Redo"), 0, 22) sql = self.s.column0(""" select sql from undoLog where seq > :s and seq <= :e order by seq desc""", s=start, e=end) + mod = len(sql) / 20 + self.updateProgress(_("Applying changes...")) newstart = self._latestUndoRow() - for s in sql: + for c, s in enumerate(sql): + if mod and not c % mod: + self.updateProgress() #print "--", s.encode("utf-8")[0:30] - self.s.execute(s) + self.engine.execute(s) newend = self._latestUndoRow() dst.append([u[0], newstart, newend]) + self.finishProgress() def undo(self): self._undoredo(self.undoStack, self.redoStack) diff --git a/anki/media.py b/anki/media.py index d356f8cd4..4d2655ec8 100644 --- a/anki/media.py +++ b/anki/media.py @@ -119,10 +119,14 @@ def rebuildMediaDir(deck, deleteRefs=False, dirty=True): unusedFileCount = 0 missingFileCount = 0 deck.mediaDir(create=True) - deck.startProgress(_("Check Media DB"), 0, 6) + deck.startProgress(_("Check Media DB"), 0, 16) # rename all files to checksum versions, note non-renamed ones deck.updateProgress(_("Checksum files...")) - for oldBase in os.listdir(unicode(deck.mediaDir())): + files = os.listdir(unicode(deck.mediaDir())) + mod = len(files) / 10 + for c, oldBase in enumerate(files): + if mod and not c % mod: + deck.updateProgress() oldPath = os.path.join(deck.mediaDir(), oldBase) if oldBase.startswith("."): continue @@ -133,6 +137,7 @@ def rebuildMediaDir(deck, deleteRefs=False, dirty=True): existingFiles[oldBase] = 1 else: renamedFiles[oldBase] = newBase + deck.updateProgress(value=10) # now look through all fields, and update references to files deck.updateProgress(_("Scan fields...")) for (id, fid, val) in deck.s.all(