WIP sync thread implementation
This commit is contained in:
@@ -3,15 +3,21 @@ use crate::matrix_connection::matrix_manager::MatrixManagerMsg;
|
||||
use crate::users::UserEmail;
|
||||
use crate::utils::rand_utils::rand_string;
|
||||
use anyhow::Context;
|
||||
use futures_util::Stream;
|
||||
use matrix_sdk::authentication::oauth::error::OAuthDiscoveryError;
|
||||
use matrix_sdk::authentication::oauth::{
|
||||
ClientId, OAuthError, OAuthSession, UrlOrQuery, UserSession,
|
||||
};
|
||||
use matrix_sdk::config::SyncSettings;
|
||||
use matrix_sdk::encryption::recovery::RecoveryState;
|
||||
use matrix_sdk::ruma::presence::PresenceState;
|
||||
use matrix_sdk::ruma::serde::Raw;
|
||||
use matrix_sdk::ruma::{DeviceId, UserId};
|
||||
use matrix_sdk::sync::SyncResponse;
|
||||
use matrix_sdk::{Client, ClientBuildError};
|
||||
use ractor::ActorRef;
|
||||
use serde::{Deserialize, Serialize};
|
||||
use std::pin::Pin;
|
||||
use url::Url;
|
||||
|
||||
/// The full session to persist.
|
||||
@@ -83,7 +89,7 @@ pub struct FinishMatrixAuth {
|
||||
pub struct MatrixClient {
|
||||
manager: ActorRef<MatrixManagerMsg>,
|
||||
pub email: UserEmail,
|
||||
pub client: Client,
|
||||
client: Client,
|
||||
}
|
||||
|
||||
impl MatrixClient {
|
||||
@@ -315,6 +321,16 @@ impl MatrixClient {
|
||||
Ok(())
|
||||
}
|
||||
|
||||
/// Get client Matrix device id
|
||||
pub fn device_id(&self) -> Option<&DeviceId> {
|
||||
self.client.device_id()
|
||||
}
|
||||
|
||||
/// Get client Matrix user id
|
||||
pub fn user_id(&self) -> Option<&UserId> {
|
||||
self.client.user_id()
|
||||
}
|
||||
|
||||
/// Get current encryption keys recovery state
|
||||
pub fn recovery_state(&self) -> EncryptionRecoveryState {
|
||||
match self.client.encryption().recovery().state() {
|
||||
@@ -335,4 +351,22 @@ impl MatrixClient {
|
||||
.await
|
||||
.map_err(MatrixClientError::SetRecoveryKey)?)
|
||||
}
|
||||
|
||||
/// Get matrix synchronization settings to use
|
||||
fn sync_settings() -> SyncSettings {
|
||||
SyncSettings::default().set_presence(PresenceState::Offline)
|
||||
}
|
||||
|
||||
/// Perform initial synchronization
|
||||
pub async fn perform_initial_sync(&self) -> anyhow::Result<()> {
|
||||
self.client.sync_once(Self::sync_settings()).await?;
|
||||
Ok(())
|
||||
}
|
||||
|
||||
/// Perform routine synchronization
|
||||
pub async fn sync_stream(
|
||||
&self,
|
||||
) -> Pin<Box<impl Stream<Item = matrix_sdk::Result<SyncResponse>>>> {
|
||||
Box::pin(self.client.sync_stream(Self::sync_settings()).await)
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user