Config for burying interday learning cards (#1680)

* Add config for burying interday learning cards

* Expose bury interday learning config in GUI
This commit is contained in:
RumovZ 2022-02-22 12:37:59 +01:00 committed by GitHub
parent 337f96fce8
commit 131a94dd85
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
12 changed files with 45 additions and 8 deletions

View file

@ -87,8 +87,9 @@ deck-config-leech-action-tooltip =
## Burying section ## Burying section
deck-config-bury-title = Burying deck-config-bury-title = Burying
deck-config-bury-new-siblings = Bury new siblings until the next day deck-config-bury-new-siblings = Bury new siblings
deck-config-bury-review-siblings = Bury review siblings until the next day deck-config-bury-review-siblings = Bury review siblings
deck-config-bury-interday-learning-siblings = Bury interday learning siblings
deck-config-bury-tooltip = deck-config-bury-tooltip =
Whether other cards of the same note (eg reverse cards, adjacent Whether other cards of the same note (eg reverse cards, adjacent
cloze deletions) will be delayed until the next day. cloze deletions) will be delayed until the next day.

View file

@ -88,7 +88,7 @@ message DeckConfig {
uint32 reviews_per_day = 10; uint32 reviews_per_day = 10;
// not currently used // not currently used
uint32 new_per_day_minimum = 29; uint32 new_per_day_minimum = 35;
float initial_ease = 11; float initial_ease = 11;
float easy_multiplier = 12; float easy_multiplier = 12;
@ -121,6 +121,7 @@ message DeckConfig {
bool bury_new = 27; bool bury_new = 27;
bool bury_reviews = 28; bool bury_reviews = 28;
bool bury_interday_learning = 29;
bytes other = 255; bytes other = 255;
} }

View file

@ -75,6 +75,7 @@ impl Default for DeckConfig {
skip_question_when_replaying_answer: false, skip_question_when_replaying_answer: false,
bury_new: false, bury_new: false,
bury_reviews: false, bury_reviews: false,
bury_interday_learning: false,
other: vec![], other: vec![],
}, },
} }

View file

@ -54,6 +54,8 @@ pub struct DeckConfSchema11 {
new_sort_order: i32, new_sort_order: i32,
#[serde(default)] #[serde(default)]
new_gather_priority: i32, new_gather_priority: i32,
#[serde(default)]
bury_interday_learning: bool,
#[serde(flatten)] #[serde(flatten)]
other: HashMap<String, Value>, other: HashMap<String, Value>,
@ -243,6 +245,7 @@ impl Default for DeckConfSchema11 {
review_order: 0, review_order: 0,
new_sort_order: 0, new_sort_order: 0,
new_gather_priority: 0, new_gather_priority: 0,
bury_interday_learning: false,
} }
} }
} }
@ -310,6 +313,7 @@ impl From<DeckConfSchema11> for DeckConfig {
skip_question_when_replaying_answer: !c.replayq, skip_question_when_replaying_answer: !c.replayq,
bury_new: c.new.bury, bury_new: c.new.bury,
bury_reviews: c.rev.bury, bury_reviews: c.rev.bury,
bury_interday_learning: c.bury_interday_learning,
other: other_bytes, other: other_bytes,
}, },
} }
@ -397,6 +401,7 @@ impl From<DeckConfig> for DeckConfSchema11 {
review_order: i.review_order, review_order: i.review_order,
new_sort_order: i.new_card_sort_order, new_sort_order: i.new_card_sort_order,
new_gather_priority: i.new_card_gather_priority, new_gather_priority: i.new_card_gather_priority,
bury_interday_learning: i.bury_interday_learning,
} }
} }
} }
@ -416,6 +421,7 @@ fn clear_other_duplicates(top_other: &mut HashMap<String, Value>) {
"reviewOrder", "reviewOrder",
"newSortOrder", "newSortOrder",
"newGatherPriority", "newGatherPriority",
"buryInterdayLearning",
] { ] {
top_other.remove(*key); top_other.remove(*key);
} }

View file

@ -9,7 +9,6 @@ mod review;
mod revlog; mod revlog;
use rand::{prelude::*, rngs::StdRng}; use rand::{prelude::*, rngs::StdRng};
use revlog::RevlogEntryPartial; use revlog::RevlogEntryPartial;
use super::{ use super::{
@ -281,6 +280,7 @@ impl Collection {
card.note_id, card.note_id,
config.inner.bury_new, config.inner.bury_new,
config.inner.bury_reviews, config.inner.bury_reviews,
config.inner.bury_interday_learning,
)?; )?;
} }

View file

@ -147,9 +147,15 @@ impl Collection {
nid: NoteId, nid: NoteId,
include_new: bool, include_new: bool,
include_reviews: bool, include_reviews: bool,
include_day_learn: bool,
) -> Result<usize> { ) -> Result<usize> {
self.storage self.storage.search_siblings_for_bury(
.search_siblings_for_bury(cid, nid, include_new, include_reviews)?; cid,
nid,
include_new,
include_reviews,
include_day_learn,
)?;
self.bury_or_suspend_searched_cards(BuryOrSuspendMode::BurySched) self.bury_or_suspend_searched_cards(BuryOrSuspendMode::BurySched)
} }
} }

View file

@ -46,6 +46,7 @@ impl Context {
.map(|config| BuryMode { .map(|config| BuryMode {
bury_new: config.inner.bury_new, bury_new: config.inner.bury_new,
bury_reviews: config.inner.bury_reviews, bury_reviews: config.inner.bury_reviews,
bury_interday_learning: config.inner.bury_interday_learning,
}) })
.unwrap_or_default() .unwrap_or_default()
} }
@ -68,6 +69,7 @@ impl QueueBuilder {
previous_mode = Some(*entry); previous_mode = Some(*entry);
entry.bury_new |= new_mode.bury_new; entry.bury_new |= new_mode.bury_new;
entry.bury_reviews |= new_mode.bury_reviews; entry.bury_reviews |= new_mode.bury_reviews;
entry.bury_interday_learning |= new_mode.bury_interday_learning;
}) })
.or_insert(new_mode); .or_insert(new_mode);

View file

@ -122,7 +122,10 @@ impl QueueBuilder {
fn add_due_card(&mut self, card: DueCard) -> bool { fn add_due_card(&mut self, card: DueCard) -> bool {
let bury_this_card = self let bury_this_card = self
.get_and_update_bury_mode_for_note(card.into()) .get_and_update_bury_mode_for_note(card.into())
.map(|mode| mode.bury_reviews) .map(|mode| match card.kind {
DueCardKind::Review => mode.bury_reviews,
DueCardKind::Learning => mode.bury_interday_learning,
})
.unwrap_or_default(); .unwrap_or_default();
if bury_this_card { if bury_this_card {
false false

View file

@ -89,6 +89,7 @@ impl From<DueCard> for LearningQueueEntry {
pub(super) struct BuryMode { pub(super) struct BuryMode {
bury_new: bool, bury_new: bool,
bury_reviews: bool, bury_reviews: bool,
bury_interday_learning: bool,
} }
#[derive(Default, Clone, Debug)] #[derive(Default, Clone, Debug)]

View file

@ -417,6 +417,7 @@ impl super::SqliteStorage {
nid: NoteId, nid: NoteId,
include_new: bool, include_new: bool,
include_reviews: bool, include_reviews: bool,
include_day_learn: bool,
) -> Result<()> { ) -> Result<()> {
self.setup_searched_cards_table()?; self.setup_searched_cards_table()?;
let params = named_params! { let params = named_params! {
@ -424,6 +425,7 @@ impl super::SqliteStorage {
":note_id": nid, ":note_id": nid,
":include_new": include_new, ":include_new": include_new,
":include_reviews": include_reviews, ":include_reviews": include_reviews,
":include_day_learn": include_day_learn,
":new_queue": CardQueue::New as i8, ":new_queue": CardQueue::New as i8,
":review_queue": CardQueue::Review as i8, ":review_queue": CardQueue::Review as i8,
":daylearn_queue": CardQueue::DayLearn as i8, ":daylearn_queue": CardQueue::DayLearn as i8,

View file

@ -10,6 +10,10 @@ WHERE id != :card_id
) )
OR ( OR (
:include_reviews :include_reviews
AND queue IN (:review_queue, :daylearn_queue) AND queue = :review_queue
)
OR (
:include_day_learn
AND queue = :daylearn_queue
) )
); );

View file

@ -38,5 +38,15 @@ License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html
{tr.deckConfigBuryReviewSiblings()} {tr.deckConfigBuryReviewSiblings()}
</SwitchRow> </SwitchRow>
</Item> </Item>
<Item>
<SwitchRow
bind:value={$config.buryInterdayLearning}
defaultValue={defaults.buryInterdayLearning}
markdownTooltip={tr.deckConfigBuryTooltip()}
>
{tr.deckConfigBuryInterdayLearningSiblings()}
</SwitchRow>
</Item>
</DynamicallySlottable> </DynamicallySlottable>
</TitledContainer> </TitledContainer>