🏗️ Remove data handling from components
The data sent by matrix_interface senders is now handled by the App.
This commit is contained in:
@@ -5,12 +5,13 @@ use std::time::Duration;
|
||||
use dioxus::prelude::to_owned;
|
||||
use flume::{bounded, unbounded};
|
||||
use flume::{Receiver as FlumeReceiver, Sender};
|
||||
use tokio::sync::mpsc::{unbounded_channel, UnboundedReceiver, UnboundedSender};
|
||||
use tokio::sync::mpsc::{unbounded_channel, UnboundedReceiver};
|
||||
use tokio::task::JoinHandle;
|
||||
use tracing::{debug, error, warn};
|
||||
|
||||
use matrix_sdk::{
|
||||
config::SyncSettings,
|
||||
event_handler::Ctx,
|
||||
room::Room as MatrixRoom,
|
||||
ruma::events::{
|
||||
key::verification::{
|
||||
@@ -44,12 +45,23 @@ pub enum ClientError {
|
||||
Matrix(#[from] matrix_sdk::Error),
|
||||
}
|
||||
|
||||
#[derive(Clone)]
|
||||
struct Senders {
|
||||
rooms_sender: flume::Sender<Room>,
|
||||
}
|
||||
|
||||
impl Senders {
|
||||
fn new(rooms_sender: flume::Sender<Room>) -> Self {
|
||||
Self { rooms_sender }
|
||||
}
|
||||
}
|
||||
|
||||
pub struct Client {
|
||||
initialized: bool,
|
||||
client: Option<Arc<MatrixClient>>,
|
||||
load_handle: Option<JoinHandle<()>>,
|
||||
sync_handle: Option<JoinHandle<()>>,
|
||||
rooms_sender: Option<flume::Sender<Room>>,
|
||||
senders: Senders,
|
||||
}
|
||||
|
||||
impl Client {
|
||||
@@ -59,7 +71,7 @@ impl Client {
|
||||
client: Some(client),
|
||||
load_handle: None,
|
||||
sync_handle: None,
|
||||
rooms_sender: Some(rooms_sender),
|
||||
senders: Senders::new(rooms_sender),
|
||||
}
|
||||
}
|
||||
|
||||
@@ -237,9 +249,7 @@ impl Client {
|
||||
fn init(&mut self) {
|
||||
let client = self.client.clone().unwrap();
|
||||
|
||||
// let store = self.store.clone();
|
||||
// client.add_event_handler_context(store);
|
||||
// client.add_event_handler_context(self);
|
||||
client.add_event_handler_context(self.senders.clone());
|
||||
|
||||
let _ = client.add_event_handler(Client::on_sync_typing_event);
|
||||
let _ = client.add_event_handler(Client::on_presence_event);
|
||||
@@ -333,7 +343,7 @@ impl Client {
|
||||
|
||||
fn start_background_tasks(&mut self, synchronized_rx: FlumeReceiver<bool>) {
|
||||
let client = self.client.clone().unwrap();
|
||||
let rooms_sender_ref = &self.rooms_sender;
|
||||
let rooms_sender_ref = &self.senders.rooms_sender;
|
||||
|
||||
self.load_handle = tokio::spawn({
|
||||
to_owned![rooms_sender_ref];
|
||||
@@ -345,7 +355,7 @@ impl Client {
|
||||
|
||||
let rooms_refresh = Self::refresh_rooms_forever(
|
||||
client.as_ref(),
|
||||
rooms_sender_ref.as_ref().unwrap(),
|
||||
&rooms_sender_ref
|
||||
);
|
||||
let ((),) = tokio::join!(rooms_refresh);
|
||||
}
|
||||
|
Reference in New Issue
Block a user