Add rooms topics management

This commit is contained in:
2023-12-23 14:54:21 +01:00
parent c9292fd613
commit 8679a23692
3 changed files with 89 additions and 44 deletions

View File

@@ -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,
}
}
}