mirror of
https://github.com/ankitects/anki.git
synced 2025-09-24 16:56:36 -04:00
fix rated and state searches
This commit is contained in:
parent
37ad664afc
commit
8c158a3897
1 changed files with 37 additions and 17 deletions
|
@ -109,15 +109,15 @@ impl SqlWriter<'_, '_> {
|
||||||
fn write_rated(&mut self, days: u32, ease: Option<u8>) -> Result<()> {
|
fn write_rated(&mut self, days: u32, ease: Option<u8>) -> Result<()> {
|
||||||
let today_cutoff = self.req.storage.timing_today()?.next_day_at;
|
let today_cutoff = self.req.storage.timing_today()?.next_day_at;
|
||||||
let days = days.min(31) as i64;
|
let days = days.min(31) as i64;
|
||||||
let target_cutoff = today_cutoff - 86_400 * days;
|
let target_cutoff_ms = (today_cutoff - 86_400 * days) * 1_000;
|
||||||
write!(
|
write!(
|
||||||
self.sql,
|
self.sql,
|
||||||
"c.id in (select cid from revlog where id>{}",
|
"c.id in (select cid from revlog where id>{}",
|
||||||
target_cutoff
|
target_cutoff_ms
|
||||||
)
|
)
|
||||||
.unwrap();
|
.unwrap();
|
||||||
if let Some(ease) = ease {
|
if let Some(ease) = ease {
|
||||||
write!(self.sql, "and ease={})", ease).unwrap();
|
write!(self.sql, " and ease={})", ease).unwrap();
|
||||||
} else {
|
} else {
|
||||||
write!(self.sql, ")").unwrap();
|
write!(self.sql, ")").unwrap();
|
||||||
}
|
}
|
||||||
|
@ -151,30 +151,30 @@ impl SqlWriter<'_, '_> {
|
||||||
fn write_state(&mut self, state: &StateKind) -> Result<()> {
|
fn write_state(&mut self, state: &StateKind) -> Result<()> {
|
||||||
let timing = self.req.storage.timing_today()?;
|
let timing = self.req.storage.timing_today()?;
|
||||||
match state {
|
match state {
|
||||||
StateKind::New => write!(self.sql, "c.queue = {}", CardQueue::New as u8),
|
StateKind::New => write!(self.sql, "c.queue = {}", CardQueue::New as i8),
|
||||||
StateKind::Review => write!(self.sql, "c.queue = {}", CardQueue::Review as u8),
|
StateKind::Review => write!(self.sql, "c.queue = {}", CardQueue::Review as i8),
|
||||||
StateKind::Learning => write!(
|
StateKind::Learning => write!(
|
||||||
self.sql,
|
self.sql,
|
||||||
"c.queue in ({},{})",
|
"c.queue in ({},{})",
|
||||||
CardQueue::Learn as u8,
|
CardQueue::Learn as i8,
|
||||||
CardQueue::DayLearn as u8
|
CardQueue::DayLearn as i8
|
||||||
),
|
),
|
||||||
StateKind::Buried => write!(
|
StateKind::Buried => write!(
|
||||||
self.sql,
|
self.sql,
|
||||||
"c.queue in ({},{})",
|
"c.queue in ({},{})",
|
||||||
CardQueue::SchedBuried as u8,
|
CardQueue::SchedBuried as i8,
|
||||||
CardQueue::UserBuried as u8
|
CardQueue::UserBuried as i8
|
||||||
),
|
),
|
||||||
StateKind::Suspended => write!(self.sql, "c.queue = {}", CardQueue::Suspended as u8),
|
StateKind::Suspended => write!(self.sql, "c.queue = {}", CardQueue::Suspended as i8),
|
||||||
StateKind::Due => write!(
|
StateKind::Due => write!(
|
||||||
self.sql,
|
self.sql,
|
||||||
"
|
"
|
||||||
(c.queue in ({rev},{daylrn}) and c.due <= {today}) or
|
(c.queue in ({rev},{daylrn}) and c.due <= {today}) or
|
||||||
(c.queue = {lrn} and c.due <= {daycutoff})",
|
(c.queue = {lrn} and c.due <= {daycutoff})",
|
||||||
rev = CardQueue::Review as u8,
|
rev = CardQueue::Review as i8,
|
||||||
daylrn = CardQueue::DayLearn as u8,
|
daylrn = CardQueue::DayLearn as i8,
|
||||||
today = timing.days_elapsed,
|
today = timing.days_elapsed,
|
||||||
lrn = CardQueue::Learn as u8,
|
lrn = CardQueue::Learn as i8,
|
||||||
daycutoff = timing.next_day_at,
|
daycutoff = timing.next_day_at,
|
||||||
),
|
),
|
||||||
}
|
}
|
||||||
|
@ -422,10 +422,10 @@ mod test {
|
||||||
);
|
);
|
||||||
|
|
||||||
// added
|
// added
|
||||||
let t = ctx.storage.timing_today().unwrap();
|
let timing = ctx.storage.timing_today().unwrap();
|
||||||
assert_eq!(
|
assert_eq!(
|
||||||
s(ctx, "added:3").0,
|
s(ctx, "added:3").0,
|
||||||
format!("(c.id > {})", t.next_day_at - (86_400 * 3))
|
format!("(c.id > {})", timing.next_day_at - (86_400 * 3))
|
||||||
);
|
);
|
||||||
|
|
||||||
// deck
|
// deck
|
||||||
|
@ -482,10 +482,30 @@ mod test {
|
||||||
);
|
);
|
||||||
assert_eq!(s(ctx, "tag:none"), ("(n.tags = '')".into(), vec![]));
|
assert_eq!(s(ctx, "tag:none"), ("(n.tags = '')".into(), vec![]));
|
||||||
|
|
||||||
|
// state
|
||||||
|
assert_eq!(
|
||||||
|
s(ctx, "is:suspended").0,
|
||||||
|
format!("(c.queue = {})", CardQueue::Suspended as i8)
|
||||||
|
);
|
||||||
|
|
||||||
|
// rated
|
||||||
|
assert_eq!(
|
||||||
|
s(ctx, "rated:2").0,
|
||||||
|
format!(
|
||||||
|
"(c.id in (select cid from revlog where id>{}))",
|
||||||
|
(timing.next_day_at - (86_400 * 2)) * 1_000
|
||||||
|
)
|
||||||
|
);
|
||||||
|
assert_eq!(
|
||||||
|
s(ctx, "rated:40:1").0,
|
||||||
|
format!(
|
||||||
|
"(c.id in (select cid from revlog where id>{} and ease=1))",
|
||||||
|
(timing.next_day_at - (86_400 * 31)) * 1_000
|
||||||
|
)
|
||||||
|
);
|
||||||
|
|
||||||
// todo:
|
// todo:
|
||||||
// note
|
// note
|
||||||
// rated
|
|
||||||
// is
|
|
||||||
// prop
|
// prop
|
||||||
|
|
||||||
Ok(())
|
Ok(())
|
||||||
|
|
Loading…
Reference in a new issue