Skip to main content

aven_core/sync/persistence/
status.rs

1use anyhow::Result;
2
3use crate::db::{Database, get_meta};
4
5use super::SyncPersistenceStatus;
6
7impl Database {
8    /// Local sync bookkeeping; reads no protected keys and contacts no server.
9    pub async fn sync_persistence_status(&self) -> Result<SyncPersistenceStatus> {
10        let mut conn = self.acquire_reader().await?;
11        let pending_changes =
12            sqlx::query_scalar("SELECT count(*) FROM changes WHERE server_seq IS NULL")
13                .fetch_one(&mut *conn)
14                .await?;
15        let conflicts = sqlx::query_scalar("SELECT count(*) FROM conflicts WHERE resolved = 0")
16            .fetch_one(&mut *conn)
17            .await?;
18        Ok(SyncPersistenceStatus {
19            pending_changes,
20            conflicts,
21            sync_cursor: get_meta(&mut conn, "sync_cursor").await?,
22            local_sequence: get_meta(&mut conn, "local_seq").await?,
23        })
24    }
25}