🏗️ Remove data handling from components

The data sent by matrix_interface senders is now handled by the App.
This commit is contained in:
2023-12-21 22:07:08 +01:00
parent 513b05ddb3
commit c9292fd613
7 changed files with 177 additions and 71 deletions

View File

@@ -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);
}