From 3788cb8890bef8250681c0b93e60bc0ba76c1fec Mon Sep 17 00:00:00 2001 From: Henrik Giesel Date: Thu, 14 Jan 2021 17:58:21 +0100 Subject: [PATCH] Port prop:rated to EaseKind --- rslib/src/search/parser.rs | 13 +++++++++++-- rslib/src/search/sqlwriter.rs | 5 ++--- rslib/src/search/writer.rs | 5 +++-- 3 files changed, 16 insertions(+), 7 deletions(-) diff --git a/rslib/src/search/parser.rs b/rslib/src/search/parser.rs index d5ed46266..a6db30cba 100644 --- a/rslib/src/search/parser.rs +++ b/rslib/src/search/parser.rs @@ -87,7 +87,7 @@ pub enum PropertyKind { Lapses(u32), Ease(f32), Position(u32), - Rated(u32, Option), + Rated(u32, EaseKind), } #[derive(Debug, PartialEq, Clone)] @@ -433,7 +433,16 @@ fn parse_prop(s: &str) -> ParseResult { } } None => EaseKind::AnyAnswerButton, - } + }; + + PropertyKind::Rated(days, ease) + } else if key == "resched" { + let mut it = val.splitn(2, ':'); + + let n: u32 = it.next().unwrap().parse()?; + let days = n.max(1).min(365); + + let ease = EaseKind::ManualReschedule; PropertyKind::Rated(days, ease) } else if key == "resched" { diff --git a/rslib/src/search/sqlwriter.rs b/rslib/src/search/sqlwriter.rs index 5481b2c67..60da1b8a4 100644 --- a/rslib/src/search/sqlwriter.rs +++ b/rslib/src/search/sqlwriter.rs @@ -116,7 +116,6 @@ impl SqlWriter<'_> { fn write_search_node_to_sql(&mut self, node: &SearchNode) -> Result<()> { use normalize_to_nfc as norm; - use std::cmp::max; match node { // note fields related SearchNode::UnqualifiedText(text) => self.write_unqualified(&self.norm_note(text)), @@ -218,7 +217,7 @@ impl SqlWriter<'_> { fn write_rated(&mut self, days: u32, ease: &EaseKind, op: &str) -> Result<()> { let today_cutoff = self.col.timing_today()?.next_day_at; let target_cutoff_ms = (today_cutoff - 86_400 * i64::from(days)) * 1_000; - let day_before_cutoff_ms = (today_cutoff - 86_400 * (days)) * 1_000; + let day_before_cutoff_ms = (today_cutoff - 86_400 * i64::from(days - 1)) * 1_000; write!( self.sql, @@ -286,7 +285,7 @@ impl SqlWriter<'_> { PropertyKind::Ease(ease) => { write!(self.sql, "factor {} {}", op, (ease * 1000.0) as u32).unwrap() } - PropertyKind::Rated(days, ease) => self.write_rated(*days, *ease, op)? + PropertyKind::Rated(days, ease) => self.write_rated(*days, ease, op)? } Ok(()) diff --git a/rslib/src/search/writer.rs b/rslib/src/search/writer.rs index bc7ba5584..41109e09b 100644 --- a/rslib/src/search/writer.rs +++ b/rslib/src/search/writer.rs @@ -196,8 +196,9 @@ fn write_property(operator: &str, kind: &PropertyKind) -> String { Ease(f) => format!("\"prop:ease{}{}\"", operator, f), Position(u) => format!("\"prop:pos{}{}\"", operator, u), Rated(u, ease) => match ease { - Some(val) => format!("\"prop:rated{}{}:{}\"", operator, u, val), - None => format!("\"prop:rated{}{}\"", operator, u), + EaseKind::AnswerButton(val) => format!("\"prop:rated{}{}:{}\"", operator, u, val), + EaseKind::AnyAnswerButton => format!("\"prop:rated{}{}\"", operator, u), + EaseKind::ManualReschedule => format!("\"prop:resched{}{}\"", operator, u), } } }