Use seconds instead of minutes for preview delay

Since this is not compatible with older clients, preview_delay has been
brought back so the configured value will still sync.
This commit is contained in:
Damien Elmes 2023-12-21 11:02:29 +10:00
parent 9b00425209
commit 4678b0cc4a
9 changed files with 60 additions and 40 deletions

View file

@ -109,12 +109,14 @@ message Deck {
repeated SearchTerm search_terms = 2; repeated SearchTerm search_terms = 2;
// v1 scheduler only // v1 scheduler only
repeated float delays = 3; repeated float delays = 3;
// v2 scheduler only // v2 and old v3 scheduler only
uint32 preview_again_mins = 4; uint32 preview_delay = 4;
// recent v3 scheduler only; 0 means card will be returned // recent v3 scheduler only; 0 means card will be returned
uint32 preview_hard_mins = 5; uint32 preview_again_secs = 7;
// recent v3 scheduler only; 0 means card will be returned // recent v3 scheduler only; 0 means card will be returned
uint32 preview_good_mins = 6; uint32 preview_hard_secs = 5;
// recent v3 scheduler only; 0 means card will be returned
uint32 preview_good_secs = 6;
} }
// a container to store the deck specifics in the DB // a container to store the deck specifics in the DB
// as a tagged enum // as a tagged enum

View file

@ -142,9 +142,9 @@ class FilteredDeckConfigDialog(QDialog):
form.order.setCurrentIndex(term1.order) form.order.setCurrentIndex(term1.order)
form.limit.setValue(term1.limit) form.limit.setValue(term1.limit)
form.preview_again.setValue(config.preview_again_mins) form.preview_again.setValue(config.preview_again_secs)
form.preview_hard.setValue(config.preview_hard_mins) form.preview_hard.setValue(config.preview_hard_secs)
form.preview_good.setValue(config.preview_good_mins) form.preview_good.setValue(config.preview_good_secs)
if len(config.search_terms) > 1: if len(config.search_terms) > 1:
term2: FilteredDeckConfig.SearchTerm = config.search_terms[1] term2: FilteredDeckConfig.SearchTerm = config.search_terms[1]
@ -277,9 +277,9 @@ class FilteredDeckConfigDialog(QDialog):
del config.search_terms[:] del config.search_terms[:]
config.search_terms.extend(terms) config.search_terms.extend(terms)
config.preview_again_mins = form.preview_again.value() config.preview_again_secs = form.preview_again.value()
config.preview_hard_mins = form.preview_hard.value() config.preview_hard_secs = form.preview_hard.value()
config.preview_good_mins = form.preview_good.value() config.preview_good_secs = form.preview_good.value()
return True return True

View file

@ -7,7 +7,7 @@
<x>0</x> <x>0</x>
<y>0</y> <y>0</y>
<width>526</width> <width>526</width>
<height>567</height> <height>587</height>
</rect> </rect>
</property> </property>
<property name="windowTitle"> <property name="windowTitle">
@ -209,10 +209,18 @@
</widget> </widget>
</item> </item>
<item row="0" column="2"> <item row="0" column="2">
<widget class="QSpinBox" name="preview_again"/> <widget class="QSpinBox" name="preview_again">
<property name="maximum">
<number>99999</number>
</property>
</widget>
</item> </item>
<item row="2" column="2"> <item row="2" column="2">
<widget class="QSpinBox" name="preview_hard"/> <widget class="QSpinBox" name="preview_hard">
<property name="maximum">
<number>99999</number>
</property>
</widget>
</item> </item>
<item row="0" column="0" colspan="2"> <item row="0" column="0" colspan="2">
<widget class="QLabel" name="again_delay_label"> <widget class="QLabel" name="again_delay_label">
@ -222,19 +230,23 @@
</widget> </widget>
</item> </item>
<item row="3" column="2"> <item row="3" column="2">
<widget class="QSpinBox" name="preview_good"/> <widget class="QSpinBox" name="preview_good">
<property name="maximum">
<number>99999</number>
</property>
</widget>
</item> </item>
<item row="0" column="3"> <item row="0" column="3">
<widget class="QLabel" name="label_13"> <widget class="QLabel" name="label_13">
<property name="text"> <property name="text">
<string>decks_minutes</string> <string>scheduling_seconds</string>
</property> </property>
</widget> </widget>
</item> </item>
<item row="3" column="3" colspan="2"> <item row="3" column="3" colspan="2">
<widget class="QLabel" name="label_9"> <widget class="QLabel" name="label_9">
<property name="text"> <property name="text">
<string>decks_minutes</string> <string>scheduling_seconds</string>
</property> </property>
</widget> </widget>
</item> </item>
@ -248,7 +260,7 @@
<item row="2" column="3"> <item row="2" column="3">
<widget class="QLabel" name="label_8"> <widget class="QLabel" name="label_8">
<property name="text"> <property name="text">
<string>decks_minutes</string> <string>scheduling_seconds</string>
</property> </property>
</widget> </widget>
</item> </item>

View file

@ -22,8 +22,8 @@ impl Deck {
limit: 20, limit: 20,
order: FilteredSearchOrder::Due as i32, order: FilteredSearchOrder::Due as i32,
}); });
filt.preview_again_mins = 1; filt.preview_again_secs = 60;
filt.preview_hard_mins = 10; filt.preview_hard_secs = 600;
filt.reschedule = true; filt.reschedule = true;
Deck { Deck {
id: DeckId(0), id: DeckId(0),

View file

@ -154,14 +154,17 @@ pub struct FilteredDeckSchema11 {
// old scheduler // old scheduler
#[serde(default, deserialize_with = "default_on_invalid")] #[serde(default, deserialize_with = "default_on_invalid")]
delays: Option<Vec<f32>>, delays: Option<Vec<f32>>,
// old scheduler
#[serde(default)]
preview_delay: u32,
// new scheduler // new scheduler
#[serde(default, rename = "previewDelay")]
preview_again_mins: u32,
#[serde(default)] #[serde(default)]
preview_hard_mins: u32, preview_again_secs: u32,
#[serde(default)] #[serde(default)]
preview_good_mins: u32, preview_hard_secs: u32,
#[serde(default)]
preview_good_secs: u32,
} }
#[derive(Serialize, Deserialize, Debug, PartialEq, Eq, Default, Clone)] #[derive(Serialize, Deserialize, Debug, PartialEq, Eq, Default, Clone)]
pub struct DeckTodaySchema11 { pub struct DeckTodaySchema11 {
@ -332,9 +335,10 @@ impl From<FilteredDeckSchema11> for FilteredDeck {
reschedule: deck.resched, reschedule: deck.resched,
search_terms: deck.terms.into_iter().map(Into::into).collect(), search_terms: deck.terms.into_iter().map(Into::into).collect(),
delays: deck.delays.unwrap_or_default(), delays: deck.delays.unwrap_or_default(),
preview_again_mins: deck.preview_again_mins, preview_delay: deck.preview_delay,
preview_hard_mins: deck.preview_hard_mins, preview_again_secs: deck.preview_again_secs,
preview_good_mins: deck.preview_good_mins, preview_hard_secs: deck.preview_hard_secs,
preview_good_secs: deck.preview_good_secs,
} }
} }
} }
@ -373,9 +377,10 @@ impl From<Deck> for DeckSchema11 {
} else { } else {
Some(filt.delays.clone()) Some(filt.delays.clone())
}, },
preview_again_mins: filt.preview_again_mins, preview_delay: filt.preview_delay,
preview_hard_mins: filt.preview_hard_mins, preview_again_secs: filt.preview_again_secs,
preview_good_mins: filt.preview_good_mins, preview_hard_secs: filt.preview_hard_secs,
preview_good_secs: filt.preview_good_secs,
common: deck.into(), common: deck.into(),
}), }),
} }

View file

@ -51,7 +51,7 @@ impl CardStateUpdater {
.into() .into()
} else { } else {
PreviewState { PreviewState {
scheduled_secs: filtered.preview_again_mins * 60, scheduled_secs: filtered.preview_again_secs,
finished: false, finished: false,
} }
.into() .into()

View file

@ -93,9 +93,9 @@ impl CardStateUpdater {
in_filtered_deck: self.deck.is_filtered(), in_filtered_deck: self.deck.is_filtered(),
preview_delays: if let DeckKind::Filtered(deck) = &self.deck.kind { preview_delays: if let DeckKind::Filtered(deck) = &self.deck.kind {
PreviewDelays { PreviewDelays {
again: deck.preview_again_mins, again: deck.preview_again_secs,
hard: deck.preview_hard_mins, hard: deck.preview_hard_secs,
good: deck.preview_good_mins, good: deck.preview_good_secs,
} }
} else { } else {
Default::default() Default::default()

View file

@ -208,9 +208,10 @@ fn custom_study_config(
order: order as i32, order: order as i32,
}], }],
delays: vec![], delays: vec![],
preview_again_mins: 1, preview_delay: 10,
preview_hard_mins: 10, preview_again_secs: 60,
preview_good_mins: 0, preview_hard_secs: 600,
preview_good_secs: 0,
} }
} }

View file

@ -33,15 +33,15 @@ impl PreviewState {
} }
} }
fn delay_or_return(minutes: u32) -> CardState { fn delay_or_return(seconds: u32) -> CardState {
if minutes == 0 { if seconds == 0 {
PreviewState { PreviewState {
scheduled_secs: 0, scheduled_secs: 0,
finished: true, finished: true,
} }
} else { } else {
PreviewState { PreviewState {
scheduled_secs: minutes * 60, scheduled_secs: seconds,
finished: false, finished: false,
} }
} }