diff --git a/anki/collection.py b/anki/collection.py index 4f9a92059..f04ab3eaf 100644 --- a/anki/collection.py +++ b/anki/collection.py @@ -2,12 +2,15 @@ # Copyright: Damien Elmes # License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html +import pprint +import re import time import os import random import stat import datetime import copy +import traceback from anki.lang import _, ngettext from anki.utils import ids2str, fieldChecksum, stripHTML, \ @@ -48,9 +51,12 @@ defaultConf = { # this is initialized by storage.Collection class _Collection(object): + debugLog = False + def __init__(self, db, server=False): self.db = db self.path = db._path + self._openLog() self.log(self.path, anki.version) self.server = server self._lastSave = time.time() @@ -773,4 +779,25 @@ and queue = 0""", intTime(), self.usn()) ########################################################################## def log(self, *args, **kwargs): - runHook("log", args, kwargs) + if not self.debugLog: + return + def customRepr(x): + if isinstance(x, basestring): + return x + return pprint.pformat(x) + path, num, fn, y = traceback.extract_stack( + limit=2+kwargs.get("stack", 0))[0] + buf = u"[%s] %s:%s(): %s" % (intTime(), os.path.basename(path), fn, + ", ".join([customRepr(x) for x in args])) + self._logHnd.write(buf.encode("utf8") + "\n") + if os.environ.get("ANKIDEV"): + print buf + + def _openLog(self): + if not self.debugLog: + return + lpath = re.sub("\.anki2$", ".log", self.path) + self._logHnd = open(lpath, "ab") + + def _closeLog(self): + self._logHnd = None diff --git a/anki/sched.py b/anki/sched.py index 790a494bf..9c05df4e9 100644 --- a/anki/sched.py +++ b/anki/sched.py @@ -1366,7 +1366,7 @@ usn=:usn, mod=:mod, factor=:fact where id=:id and odid=0 and queue >=0""", % sids) # reset all cards self.col.db.execute( - "update cards set reps=0,lapses=0,odid=0,odue=0" + "update cards set reps=0,lapses=0,odid=0,odue=0,queue=0" " where id in %s" % sids ) # and forget any non-new cards, changing their due numbers diff --git a/aqt/main.py b/aqt/main.py index 46ff38327..a8133f561 100644 --- a/aqt/main.py +++ b/aqt/main.py @@ -3,7 +3,6 @@ # License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html import os -import pprint import sys import re import traceback @@ -32,6 +31,8 @@ class AnkiQt(QMainWindow): self.state = "startup" aqt.mw = self self.app = app + from anki.collection import _Collection + _Collection.debugLog = True if isWin: self._xpstyle = QStyleFactory.create("WindowsXP") self.app.setStyle(self._xpstyle) @@ -864,7 +865,6 @@ Difference to correct time: %s.""") % diffText def setupHooks(self): addHook("modSchema", self.onSchemaMod) addHook("remNotes", self.onRemNotes) - addHook("log", self.onLog) # Log note deletion ########################################################################## @@ -882,23 +882,6 @@ Difference to correct time: %s.""") % diffText f.write(("\t".join([str(id), str(mid)] + fields)).encode("utf8")) f.write("\n") - # Debug logging - ########################################################################## - - def onLog(self, args, kwargs): - def customRepr(x): - if isinstance(x, basestring): - return x - return pprint.pformat(x) - path, num, fn, y = traceback.extract_stack( - limit=4+kwargs.get("stack", 0))[0] - buf = u"[%s] %s:%s(): %s" % (intTime(), os.path.basename(path), fn, - ", ".join([customRepr(x) for x in args])) - lpath = re.sub("\.anki2$", ".log", self.pm.collectionPath()) - open(lpath, "ab").write(buf.encode("utf8") + "\n") - if os.environ.get("ANKIDEV"): - print buf - # Schema modifications ##########################################################################