kobo_db_tools/model/session/
sessions.rs

1use 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}