kobo_db_tools/model/session/
sessions.rs1use crate::ReadingSession;
2
3const MIN_VALID_SESSION_TIME: u64 = 60;
4
5#[derive(Debug, Default)]
6pub struct ReadingSessions {
7 sessions: Vec<ReadingSession>,
8}
9
10impl ReadingSessions {
11 pub fn new() -> Self {
12 Self::default()
13 }
14 pub fn add_session(&mut self, session: ReadingSession) {
15 self.sessions.push(session);
16 }
17 pub fn iter(&self) -> impl Iterator<Item = &ReadingSession> {
18 self.sessions.iter().filter(|s| {
19 s.is_complete()
20 && s.seconds_read
21 .map(|sec| sec >= MIN_VALID_SESSION_TIME)
22 .unwrap_or(false)
23 })
24 }
25 pub fn valid_sessions(&self) -> impl Iterator<Item = &ReadingSession> {
26 self.sessions
27 .iter()
28 .filter(|s| s.is_complete() && s.seconds_read.unwrap_or(0) >= MIN_VALID_SESSION_TIME)
29 }
30 pub fn sessions_count(&self) -> usize {
31 self.sessions.len()
32 }
33}