Files
beau-gosse-du-92/src/matrix_interface/requester.rs
2023-12-26 21:04:57 +01:00

47 lines
1.2 KiB
Rust

use std::cell::RefCell;
use std::sync::Arc;
use matrix_sdk::Client as MatrixClient;
use tokio::sync::broadcast::Receiver;
use tokio::sync::mpsc::UnboundedSender;
use super::client::RoomTopicEvent;
use super::worker_tasks::{oneshot, LoginStyle, WorkerTask};
use crate::base::Room;
#[derive(Debug)]
pub struct Receivers {
pub rooms_receiver: RefCell<Receiver<Room>>,
pub room_topic_receiver: RefCell<Receiver<RoomTopicEvent>>,
}
impl Clone for Receivers {
fn clone(&self) -> Self {
Self {
rooms_receiver: RefCell::new(self.rooms_receiver.borrow().resubscribe()),
room_topic_receiver: RefCell::new(self.room_topic_receiver.borrow().resubscribe()),
}
}
}
#[derive(Debug)]
pub struct Requester {
pub matrix_client: Arc<MatrixClient>,
pub tx: UnboundedSender<WorkerTask>,
pub receivers: Receivers,
}
impl Requester {
pub fn init(&self) {
let (reply, response) = oneshot();
self.tx.send(WorkerTask::Init(reply)).unwrap();
response.recv()
}
pub fn login(&self, style: LoginStyle) -> anyhow::Result<()> {
let (reply, response) = oneshot();
self.tx.send(WorkerTask::Login(style, reply)).unwrap();
response.recv()
}
}