use of com.ichi2.libanki.DeckConfig in project Anki-Android by ankidroid.
the class Sched method _deckRevLimitSingle.
/**
* Maximal number of rev card still to see today in deck d. It's computed as:
* the number of rev card to see by day according
* minus the number of rev cards seen today in deck d or a descendant
* plus the number of extra cards to see today in deck d, a parent or a descendant.
*
* Limits of its ancestors are not applied. Current card is treated the same way as other cards.
* @param considerCurrentCard Whether current card should be conted if it is in this deck
*/
@Override
protected int _deckRevLimitSingle(@NonNull Deck d, boolean considerCurrentCard) {
if (d.isDyn()) {
return mReportLimit;
}
long did = d.getLong("id");
DeckConfig c = mCol.getDecks().confForDid(did);
int lim = Math.max(0, c.getJSONObject("rev").getInt("perDay") - d.getJSONArray("revToday").getInt(1));
if (considerCurrentCard && currentCardIsInQueueWithDeck(Consts.QUEUE_TYPE_REV, did)) {
lim--;
}
// So currentCard does not have to be taken into consideration in this method
return lim;
}
use of com.ichi2.libanki.DeckConfig in project Anki-Android by ankidroid.
the class Sched method _newConf.
/**
* Tools ******************************************************************** ***************************
*/
@Override
@NonNull
protected JSONObject _newConf(@NonNull Card card) {
DeckConfig conf = _cardConf(card);
if (!card.isInDynamicDeck()) {
return conf.getJSONObject("new");
}
// dynamic deck; override some attributes, use original deck for others
DeckConfig oconf = mCol.getDecks().confForDid(card.getODid());
JSONArray delays = conf.optJSONArray("delays");
if (delays == null) {
delays = oconf.getJSONObject("new").getJSONArray("delays");
}
JSONObject dict = new JSONObject();
// original deck
dict.put("ints", oconf.getJSONObject("new").getJSONArray("ints"));
dict.put("initialFactor", oconf.getJSONObject("new").getInt("initialFactor"));
dict.put("bury", oconf.getJSONObject("new").optBoolean("bury", true));
// overrides
dict.put("delays", delays);
dict.put("separate", conf.getBoolean("separate"));
dict.put("order", Consts.NEW_CARDS_DUE);
dict.put("perDay", mReportLimit);
return dict;
}
use of com.ichi2.libanki.DeckConfig in project Anki-Android by ankidroid.
the class AbstractSchedTest method siblingCorrectlyBuried.
@Test
public void siblingCorrectlyBuried() {
// #6903
Collection col = getCol();
AbstractSched sched = col.getSched();
DeckConfig dconf = col.getDecks().getConf(1);
assertThat(dconf, notNullValue());
dconf.getJSONObject("new").put("bury", true);
getCol().getDecks().save(dconf);
final int nbNote = 2;
Note[] notes = new Note[nbNote];
for (int i = 0; i < nbNote; i++) {
Note note = addNoteUsingBasicAndReversedModel("front", "back");
notes[i] = note;
}
col.reset();
for (int i = 0; i < nbNote; i++) {
Card card = sched.getCard();
Counts counts = sched.counts(card);
// imitate what the reviewer does
sched.setCurrentCard(card);
// Actual number of new card.
assertThat(counts.getNew(), is(greaterThan(nbNote - i)));
// Maximal number potentially shown,
assertThat(counts.getNew(), is(lessThanOrEqualTo(nbNote * 2 - i)));
// because decrementing does not consider burying sibling
assertEquals(0, counts.getLrn());
assertEquals(0, counts.getRev());
assertEquals(notes[i].firstCard().getId(), card.getId());
assertEquals(Consts.QUEUE_TYPE_NEW, card.getQueue());
sched.answerCard(card, sched.answerButtons(card));
}
Card card = sched.getCard();
assertNull(card);
}
use of com.ichi2.libanki.DeckConfig in project Anki-Android by ankidroid.
the class AbstractSchedTest method undoAndRedo.
protected void undoAndRedo(boolean preload) {
Collection col = getCol();
DeckConfig conf = col.getDecks().confForDid(1);
conf.getJSONObject("new").put("delays", new JSONArray(new double[] { 1, 3, 5, 10 }));
col.getDecks().save(conf);
col.set_config("collapseTime", 20 * 60);
AbstractSched sched = col.getSched();
addNoteUsingBasicModel("foo", "bar");
col.reset();
advanceRobolectricLooper();
Card card = sched.getCard();
assertNotNull(card);
assertEquals(new Counts(1, 0, 0), sched.counts(card));
if (preload) {
sched.preloadNextCard();
}
sched.answerCard(card, sched.getGoodNewButton());
advanceRobolectricLooper();
card = sched.getCard();
assertNotNull(card);
assertEquals(new Counts(0, (schedVersion == 1) ? 3 : 1, 0), sched.counts(card));
if (preload) {
sched.preloadNextCard();
}
sched.answerCard(card, sched.getGoodNewButton());
advanceRobolectricLooper();
card = sched.getCard();
assertNotNull(card);
assertEquals(new Counts(0, (schedVersion == 1) ? 2 : 1, 0), sched.counts(card));
if (preload) {
sched.preloadNextCard();
advanceRobolectricLooper();
}
assertNotNull(card);
card = nonTaskUndo(col);
advanceRobolectricLooper();
assertNotNull(card);
assertEquals(new Counts(0, (schedVersion == 1) ? 3 : 1, 0), sched.counts(card));
sched.count();
if (preload) {
sched.preloadNextCard();
advanceRobolectricLooper();
}
sched.answerCard(card, sched.getGoodNewButton());
advanceRobolectricLooper();
card = sched.getCard();
assertNotNull(card);
if (preload) {
sched.preloadNextCard();
}
assertEquals(new Counts(0, (schedVersion == 1) ? 2 : 1, 0), sched.counts(card));
assertNotNull(card);
}
use of com.ichi2.libanki.DeckConfig in project Anki-Android by ankidroid.
the class AbstractSchedTest method ensureUndoCorrectCounts.
@Test
public void ensureUndoCorrectCounts() {
Collection col = getCol();
AbstractSched sched = col.getSched();
DeckConfig dconf = col.getDecks().getConf(1);
assertThat(dconf, notNullValue());
dconf.getJSONObject("new").put("perDay", 10);
col.getDecks().save(dconf);
for (int i = 0; i < 20; i++) {
Note note = col.newNote();
note.setField(0, "a");
col.addNote(note);
}
col.reset();
assertThat(col.cardCount(), is(20));
assertThat(sched.newCount(), is(10));
Card card = sched.getCard();
assertThat(sched.newCount(), is(9));
assertThat(sched.counts(card).getNew(), is(10));
sched.answerCard(card, sched.getGoodNewButton());
sched.getCard();
nonTaskUndo(col);
card.load();
assertThat(sched.newCount(), is(9));
assertThat(sched.counts(card).getNew(), is(10));
}
Aggregations