✨ Add rooms topics management
This commit is contained in:
32
src/base.rs
32
src/base.rs
@@ -16,7 +16,7 @@ use matrix_sdk::{
|
||||
};
|
||||
use tracing::{debug, error, warn};
|
||||
|
||||
use crate::matrix_interface::client::Client;
|
||||
use crate::matrix_interface::client::{Client, RoomTopicEvent};
|
||||
use crate::matrix_interface::requester::Requester;
|
||||
use crate::matrix_interface::worker_tasks::LoginStyle;
|
||||
|
||||
@@ -148,24 +148,38 @@ async fn on_room(room_option: Option<Room>, rooms_ref: &UseAtomRef<ByIdRooms>) {
|
||||
}
|
||||
}
|
||||
|
||||
async fn on_room_topic(
|
||||
room_topic_event_option: Option<RoomTopicEvent>,
|
||||
rooms_ref: &UseAtomRef<ByIdRooms>,
|
||||
) {
|
||||
if let Some(room_topic_event) = room_topic_event_option {
|
||||
let room_id = room_topic_event.0;
|
||||
|
||||
if let Some(room_ref) = rooms_ref.read().get(&room_id) {
|
||||
let topic = room_topic_event.1;
|
||||
|
||||
let mut room = room_ref.borrow_mut();
|
||||
room.topic = Some(RefCell::new(topic));
|
||||
} else {
|
||||
warn!("No room found with the \"{}\" id", room_id);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
pub async fn sync_rooms(
|
||||
mut rx: UnboundedReceiver<bool>,
|
||||
app_settings_ref: UseAtomRef<AppSettings>,
|
||||
rooms_ref: UseAtomRef<ByIdRooms>,
|
||||
) {
|
||||
error!("=== SYNC ROOMS BEG ===");
|
||||
while let Some(_is_logged) = rx.next().await {
|
||||
let app_settings_ref = app_settings_ref.read();
|
||||
let requester = &app_settings_ref.requester;
|
||||
|
||||
if requester.is_some() {
|
||||
let rooms_receiver = &requester.as_ref().unwrap().rooms_receiver;
|
||||
|
||||
let mut room_stream = rooms_receiver.stream();
|
||||
if let Some(requester) = &app_settings_ref.read().requester {
|
||||
let mut room_stream = requester.rooms_receiver.stream();
|
||||
let mut room_topic_stream = requester.room_topic_receiver.stream();
|
||||
|
||||
loop {
|
||||
select! {
|
||||
room = room_stream.next() => on_room(room, &rooms_ref).await,
|
||||
room_topic_event = room_topic_stream.next() => on_room_topic(room_topic_event, &rooms_ref).await,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user