call .reset() where necessary due to libanki changes

- mw.reset() rebuilds the deck queue, and refetches the current card, so we
  don't try to answer a card that's not in the queue
- in a number of cases we were already explicitly calling reset; the libanki
  changes ensure we're not doing it twice now
- the editor no longer resets the current card when it's closed. Instead, all
  deck operations in the editor should reset when they are performed
This commit is contained in:
Damien Elmes 2010-11-23 18:00:29 +09:00
parent 5067577337
commit 0414eed116
7 changed files with 14 additions and 47 deletions

View file

@ -135,7 +135,7 @@ class AddCards(QDialog):
def addFact(self, fact): def addFact(self, fact):
try: try:
fact = self.parent.deck.addFact(fact) fact = self.parent.deck.addFact(fact, False)
except FactInvalidError: except FactInvalidError:
ui.utils.showInfo(_( ui.utils.showInfo(_(
"Some fields are missing or not unique."), "Some fields are missing or not unique."),
@ -148,6 +148,7 @@ question or answer on all cards."""), parent=self)
return return
self.reportAddedFact(fact) self.reportAddedFact(fact)
# we don't reset() until the add cards dialog is closed
return fact return fact
def initializeNewFact(self, old_fact): def initializeNewFact(self, old_fact):
@ -216,7 +217,7 @@ question or answer on all cards."""), parent=self)
ui.dialogs.close("AddCards") ui.dialogs.close("AddCards")
self.parent.deck.s.flush() self.parent.deck.s.flush()
self.parent.deck.rebuildCSS() self.parent.deck.rebuildCSS()
self.parent.moveToState("auto") self.parent.reset()
saveGeom(self, "add") saveGeom(self, "add")
saveSplitter(self.dialog.splitter, "add") saveSplitter(self.dialog.splitter, "add")
return True return True

View file

@ -726,10 +726,6 @@ class EditDeck(QMainWindow):
saveHeader(self.dialog.tableView.horizontalHeader(), "editor") saveHeader(self.dialog.tableView.horizontalHeader(), "editor")
self.hide() self.hide()
ui.dialogs.close("CardList") ui.dialogs.close("CardList")
if self.parent.currentCard:
self.parent.moveToState("showQuestion")
else:
self.parent.moveToState("auto")
self.teardownHooks() self.teardownHooks()
return True return True
@ -797,12 +793,12 @@ where id in (%s)""" % ",".join([
",".join([str(s) for s in self.selectedFacts()])) ",".join([str(s) for s in self.selectedFacts()]))
def updateAfterCardChange(self): def updateAfterCardChange(self):
"Refresh info like stats on current card" "Refresh info like stats on current card, and rebuild mw queue."
self.currentRow = self.dialog.tableView.currentIndex() self.currentRow = self.dialog.tableView.currentIndex()
self.rowChanged(self.currentRow, None) self.rowChanged(self.currentRow, None)
self.model.refresh() self.model.refresh()
self.drawTags() self.drawTags()
self.parent.moveToState("auto") self.parent.reset()
# Menu options # Menu options
###################################################################### ######################################################################
@ -872,9 +868,11 @@ where id in (%s)""" % ",".join([
self.parent.setProgressParent(self) self.parent.setProgressParent(self)
self.deck.setUndoStart(n) self.deck.setUndoStart(n)
self.deck.suspendCards(self.selectedCards()) self.deck.suspendCards(self.selectedCards())
self.parent.reset()
self.deck.setUndoEnd(n) self.deck.setUndoEnd(n)
self.parent.setProgressParent(None) self.parent.setProgressParent(None)
self.model.refresh() self.model.refresh()
self.updateAfterCardChange()
def _onUnsuspend(self): def _onUnsuspend(self):
n = _("Unsuspend") n = _("Unsuspend")
@ -884,6 +882,7 @@ where id in (%s)""" % ",".join([
self.deck.setUndoEnd(n) self.deck.setUndoEnd(n)
self.parent.setProgressParent(None) self.parent.setProgressParent(None)
self.model.refresh() self.model.refresh()
self.updateAfterCardChange()
def isMarked(self): def isMarked(self):
return self.currentCard and "Marked" in self.currentCard.fact.tags return self.currentCard and "Marked" in self.currentCard.fact.tags

View file

@ -137,6 +137,7 @@ class DeckProperties(QDialog):
self.d.deleteModel(model) self.d.deleteModel(model)
self.updateModelsList() self.updateModelsList()
self.dialog.modelsList.setCurrentRow(row) self.dialog.modelsList.setCurrentRow(row)
self.parent.reset()
def selectedModel(self): def selectedModel(self):
row = self.dialog.modelsList.currentRow() row = self.dialog.modelsList.currentRow()

View file

@ -495,6 +495,7 @@ class FactEditor(object):
self.fact.setModified(textChanged=True) self.fact.setModified(textChanged=True)
if not self.fact.isNew(): if not self.fact.isNew():
self.deck.setModified() self.deck.setModified()
ankiqt.mw.reset()
self.deck.setUndoEnd(n) self.deck.setUndoEnd(n)
def onFocusLost(self, widget): def onFocusLost(self, widget):
@ -593,6 +594,7 @@ class FactEditor(object):
self.deck.updatePriorities([c.id for c in self.fact.cards]) self.deck.updatePriorities([c.id for c in self.fact.cards])
self.fact.setModified(textChanged=True) self.fact.setModified(textChanged=True)
self.deck.flushMod() self.deck.flushMod()
ankiqt.mw.reset()
if self.onChange: if self.onChange:
self.onChange('tag') self.onChange('tag')

View file

@ -388,8 +388,7 @@ Please do not file a bug report with Anki.<br>""")
self.mainWin.actionRepeatAudio.setEnabled(True) self.mainWin.actionRepeatAudio.setEnabled(True)
self.editor.saveFieldsNow() self.editor.saveFieldsNow()
self.mainWin.buttonStack.show() self.mainWin.buttonStack.show()
self.reset() return self.reset()
return self.moveToState("getQuestion")
elif state == "studyScreen": elif state == "studyScreen":
self.currentCard = None self.currentCard = None
if self.deck.finishScheduler: if self.deck.finishScheduler:
@ -463,8 +462,6 @@ Please do not file a bug report with Anki.<br>""")
self.deck.s.expunge(self.currentCard) self.deck.s.expunge(self.currentCard)
# answer # answer
self.deck.answerCard(self.currentCard, quality) self.deck.answerCard(self.currentCard, quality)
self.lastScheduledTime = anki.utils.fmtTimeSpan(
self.currentCard.due - time.time())
self.lastQuality = quality self.lastQuality = quality
self.lastCard = self.currentCard self.lastCard = self.currentCard
self.currentCard = None self.currentCard = None
@ -1829,8 +1826,6 @@ learnt today")
undo = _("Suspend") undo = _("Suspend")
self.deck.setUndoStart(undo) self.deck.setUndoStart(undo)
self.deck.suspendCards([self.currentCard.id]) self.deck.suspendCards([self.currentCard.id])
self.deck.setModified()
self.lastScheduledTime = None
self.reset() self.reset()
self.deck.setUndoEnd(undo) self.deck.setUndoEnd(undo)

View file

@ -77,7 +77,7 @@ class Preferences(QDialog):
self.origConfig.update(self.config) self.origConfig.update(self.config)
self.origConfig.save() self.origConfig.save()
self.parent.setLang() self.parent.setLang()
self.parent.moveToState("auto") self.parent.reset()
self.done(0) self.done(0)
def reject(self): def reject(self):

View file

@ -54,10 +54,7 @@ class View(object):
if self.state == "noDeck" or self.state == "studyScreen": if self.state == "noDeck" or self.state == "studyScreen":
return return
self.buffer = "" self.buffer = ""
self.haveTop = (self.main.lastCard and ( self.haveTop = self.needFutureWarning()
self.main.config['showLastCardContent'] or
self.main.config['showLastCardInterval'])) or (
self.needFutureWarning())
self.drawRule = (self.main.config['qaDivider'] and self.drawRule = (self.main.config['qaDivider'] and
self.main.currentCard and self.main.currentCard and
not self.main.currentCard.cardModel.questionInAnswer) not self.main.currentCard.cardModel.questionInAnswer)
@ -214,7 +211,6 @@ class View(object):
"Show previous card, next scheduled time, and stats." "Show previous card, next scheduled time, and stats."
self.buffer += "<center>" self.buffer += "<center>"
self.drawFutureWarning() self.drawFutureWarning()
self.drawLastCard()
self.buffer += "</center>" self.buffer += "</center>"
def needFutureWarning(self): def needFutureWarning(self):
@ -236,33 +232,6 @@ class View(object):
self.main.currentCard.due - time.time(), after=True) + self.main.currentCard.due - time.time(), after=True) +
"</span>") "</span>")
def drawLastCard(self):
"Show the last card if not the current one, and next time."
if self.main.lastCard:
if self.main.config['showLastCardContent']:
if (self.state == "deckFinished" or
self.main.currentCard.id != self.main.lastCard.id):
q = self.main.lastCard.question.replace("<br>", " ")
q = stripHTML(q)
if len(q) > 50:
q = q[:50] + "..."
a = self.main.lastCard.answer.replace("<br>", " ")
a = stripHTML(a)
if len(a) > 50:
a = a[:50] + "..."
s = "%s<br>%s" % (q, a)
s = stripLatex(s)
self.write('<span class="lastCard">%s</span><br>' % s)
if self.main.config['showLastCardInterval']:
if self.main.lastQuality > 1:
msg = _("Well done! This card will appear again in "
"<b>%(next)s</b>.") % \
{"next":self.main.lastScheduledTime}
else:
msg = _("This card will appear again later.")
self.write(msg)
self.write("<br>")
# Welcome/empty/finished deck messages # Welcome/empty/finished deck messages
########################################################################## ##########################################################################