From 359d0bc3317e6b42c11490f0c2d345ead4a9c5ae Mon Sep 17 00:00:00 2001 From: Damien Elmes Date: Tue, 2 Mar 2021 15:48:25 +1000 Subject: [PATCH] use native struct for QueuedCard --- rslib/backend.proto | 4 +-- rslib/src/backend/scheduler/answering.rs | 26 ++++++++++++++- rslib/src/scheduler/queue/mod.rs | 41 +++++++++++++++--------- 3 files changed, 53 insertions(+), 18 deletions(-) diff --git a/rslib/backend.proto b/rslib/backend.proto index b31c939d4..d1621c570 100644 --- a/rslib/backend.proto +++ b/rslib/backend.proto @@ -1375,8 +1375,8 @@ message GetQueuedCardsOut { message QueuedCard { Card card = 1; - Queue queue = 5; - NextCardStates next_states = 6; + Queue queue = 2; + NextCardStates next_states = 3; } message QueuedCards { diff --git a/rslib/src/backend/scheduler/answering.rs b/rslib/src/backend/scheduler/answering.rs index 8d6942bf0..d8f15a900 100644 --- a/rslib/src/backend/scheduler/answering.rs +++ b/rslib/src/backend/scheduler/answering.rs @@ -4,7 +4,10 @@ use crate::{ backend_proto as pb, prelude::*, - scheduler::answering::{CardAnswer, Rating}, + scheduler::{ + answering::{CardAnswer, Rating}, + queue::{QueuedCard, QueuedCards}, + }, }; impl From for CardAnswer { @@ -30,3 +33,24 @@ impl From for Rating { } } } + +impl From for pb::get_queued_cards_out::QueuedCard { + fn from(queued_card: QueuedCard) -> Self { + Self { + card: Some(queued_card.card.into()), + next_states: Some(queued_card.next_states.into()), + queue: queued_card.kind as i32, + } + } +} + +impl From for pb::get_queued_cards_out::QueuedCards { + fn from(queued_cards: QueuedCards) -> Self { + Self { + cards: queued_cards.cards.into_iter().map(Into::into).collect(), + new_count: queued_cards.new_count as u32, + learning_count: queued_cards.learning_count as u32, + review_count: queued_cards.review_count as u32, + } + } +} diff --git a/rslib/src/scheduler/queue/mod.rs b/rslib/src/scheduler/queue/mod.rs index ab8fd2d22..8501b845d 100644 --- a/rslib/src/scheduler/queue/mod.rs +++ b/rslib/src/scheduler/queue/mod.rs @@ -14,7 +14,7 @@ use std::{ use crate::{backend_proto as pb, card::CardQueue, prelude::*, timestamp::TimestampSecs}; pub(crate) use builder::{DueCard, NewCard}; -use super::timing::SchedTimingToday; +use super::{states::NextCardStates, timing::SchedTimingToday}; #[derive(Debug)] pub(crate) struct CardQueues { @@ -154,7 +154,9 @@ impl Collection { ) -> Result { if let Some(next_cards) = self.next_cards(fetch_limit, intraday_learning_only)? { Ok(pb::GetQueuedCardsOut { - value: Some(pb::get_queued_cards_out::Value::QueuedCards(next_cards)), + value: Some(pb::get_queued_cards_out::Value::QueuedCards( + next_cards.into(), + )), }) } else { Ok(pb::GetQueuedCardsOut { @@ -209,7 +211,7 @@ impl Collection { &mut self, _fetch_limit: u32, _intraday_learning_only: bool, - ) -> Result> { + ) -> Result> { let queues = self.get_queues()?; let mut cards = vec![]; if let Some(entry) = queues.next_entry(TimestampSecs::now()) { @@ -226,14 +228,10 @@ impl Collection { // fixme: pass in card instead of id let next_states = self.get_next_card_states(card.id)?; - cards.push(pb::get_queued_cards_out::QueuedCard { - card: Some(card.into()), - next_states: Some(next_states.into()), - queue: match entry.kind { - QueueEntryKind::New => 0, - QueueEntryKind::Learning => 1, - QueueEntryKind::Review => 2, - }, + cards.push(QueuedCard { + card, + next_states, + kind: entry.kind, }); } @@ -241,12 +239,25 @@ impl Collection { Ok(None) } else { let counts = self.get_queues()?.counts(); - Ok(Some(pb::get_queued_cards_out::QueuedCards { + Ok(Some(QueuedCards { cards, - new_count: counts.new as u32, - learning_count: counts.learning as u32, - review_count: counts.review as u32, + new_count: counts.new, + learning_count: counts.learning, + review_count: counts.review, })) } } } + +pub(crate) struct QueuedCard { + pub card: Card, + pub kind: QueueEntryKind, + pub next_states: NextCardStates, +} + +pub(crate) struct QueuedCards { + pub cards: Vec, + pub new_count: usize, + pub learning_count: usize, + pub review_count: usize, +}