From aab4cd47b1d2da5539c50675be4c7a36898189ef Mon Sep 17 00:00:00 2001 From: cel 🌸 Date: Fri, 11 Apr 2025 00:49:36 +0100 Subject: feat(filamento): `get_roster_with_users()` --- filamento/src/logic/online.rs | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) (limited to 'filamento/src/logic/online.rs') diff --git a/filamento/src/logic/online.rs b/filamento/src/logic/online.rs index d9441d7..d5242e0 100644 --- a/filamento/src/logic/online.rs +++ b/filamento/src/logic/online.rs @@ -18,7 +18,7 @@ use uuid::Uuid; use crate::{ avatar, chat::{Body, Chat, Delivery, Message}, disco::{Info, Items}, error::{ AvatarPublishError, DatabaseError, DiscoError, Error, IqRequestError, MessageSendError, NickError, PEPError, RosterError, StatusError, SubscribeError - }, files::FileStore, pep, presence::{Online, Presence, PresenceType}, roster::{Contact, ContactUpdate}, Command, UpdateMessage + }, files::FileStore, pep, presence::{Online, Presence, PresenceType}, roster::{Contact, ContactUpdate}, user::User, Command, UpdateMessage }; use super::{ @@ -97,6 +97,18 @@ pub async fn handle_get_roster( } } +pub async fn handle_get_roster_with_users( + logic: &ClientLogic, +) -> Result, RosterError> { + let roster = logic.client.get_roster().await?; + let mut users = Vec::new(); + for contact in &roster { + let user = logic.db().read_user(contact.user_jid.clone()).await?; + users.push(user); + } + Ok(roster.into_iter().zip(users).collect()) +} + pub async fn handle_add_contact( logic: &ClientLogic, connection: Connected, @@ -1006,6 +1018,10 @@ pub async fn handle_online_result( let roster = handle_get_roster(logic, connection).await; let _ = result_sender.send(roster); } + Command::GetRosterWithUsers(result_sender) => { + let roster = handle_get_roster_with_users(logic).await; + let _ = result_sender.send(roster); + } Command::GetChats(sender) => { let chats = handle_get_chats(logic).await; let _ = sender.send(chats); -- cgit