mirror of
https://github.com/ankitects/anki.git
synced 2025-09-19 22:42:25 -04:00
96 lines
2.6 KiB
Python
96 lines
2.6 KiB
Python
# -*- coding: utf-8 -*-
|
|
# Copyright: Damien Elmes <anki@ichi2.net>
|
|
# License: GNU GPL, version 3 or later; http://www.gnu.org/copyleft/gpl.html
|
|
|
|
from anki.utils import ids2str, intTime
|
|
from anki.sched import Scheduler
|
|
|
|
# The order arg should be the opposite of what you want. So if you want
|
|
# modified ascending, pass in 'mod desc'.
|
|
|
|
class CramScheduler(Scheduler):
|
|
name = "cram"
|
|
|
|
def __init__(self, deck, gids, order):
|
|
Scheduler.__init__(self, deck)
|
|
self.gids = gids
|
|
self.order = order
|
|
self.reset()
|
|
|
|
def counts(self):
|
|
return (self.newCount, self.lrnCount, 0)
|
|
|
|
def reset(self):
|
|
self._resetConf()
|
|
self._resetLrn()
|
|
self._resetNew()
|
|
self._resetRev()
|
|
|
|
def answerCard(self, card, ease):
|
|
if card.queue == 2:
|
|
card.queue = 1
|
|
card.edue = card.due
|
|
if card.queue == 1:
|
|
self._answerLrnCard(card, ease)
|
|
else:
|
|
raise Exception("Invalid queue")
|
|
card.mod = intTime()
|
|
card.flushSched()
|
|
|
|
def countIdx(self, card):
|
|
if card.queue == 2:
|
|
return 0
|
|
else:
|
|
return 1
|
|
|
|
# Fetching
|
|
##########################################################################
|
|
|
|
def _resetNew(self):
|
|
self.newQueue = self.db.list("""
|
|
select id from cards where queue = 2
|
|
and gid in %s order by %s limit %d""" % (ids2str(self.gids),
|
|
self.order,
|
|
self.reportLimit))
|
|
self.newCount = len(self.newQueue)
|
|
|
|
def _resetRev(self):
|
|
self.revQueue = []
|
|
self.revCount = 0
|
|
|
|
def _timeForNewCard(self):
|
|
return True
|
|
|
|
def _getNewCard(self):
|
|
if self.newQueue:
|
|
id = self.newQueue.pop()
|
|
self.newCount -= 1
|
|
return id
|
|
|
|
# Answering
|
|
##########################################################################
|
|
|
|
def _rescheduleAsRev(self, card, conf, early):
|
|
Scheduler._rescheduleAsRev(self, card, conf, early)
|
|
card.ivl = self._graduatingIvl(card, conf, early)
|
|
card.due = self.today + card.ivl
|
|
# temporarily suspend it
|
|
card.queue = -3
|
|
|
|
def _graduatingIvl(self, card, conf, early):
|
|
if conf['resched']:
|
|
print "fixme"
|
|
return card.ivl
|
|
else:
|
|
return card.ivl
|
|
|
|
def _lrnConf(self, card):
|
|
return self._cardConf(card)['cram']
|
|
|
|
# Next time reports
|
|
##########################################################################
|
|
|
|
def nextIvl(self, card, ease):
|
|
"Return the next interval for CARD, in seconds."
|
|
return self._nextLrnIvl(card, ease)
|
|
|