From 6d59d6690c3e5afd936f067b32e9998bc834728c Mon Sep 17 00:00:00 2001 From: cel 🌸 Date: Fri, 28 Mar 2025 22:56:24 +0000 Subject: feat(filamento): disco items requests --- filamento/src/lib.rs | 41 +++++++++++++++++++++++++++++++++++------ 1 file changed, 35 insertions(+), 6 deletions(-) (limited to 'filamento/src/lib.rs') diff --git a/filamento/src/lib.rs b/filamento/src/lib.rs index ed33e99..4d852e2 100644 --- a/filamento/src/lib.rs +++ b/filamento/src/lib.rs @@ -9,7 +9,7 @@ use std::{ use chat::{Body, Chat, Message}; use chrono::Utc; use db::Db; -use disco::Info; +use disco::{Info, Items}; use error::{ ConnectionJobError, DatabaseError, DiscoError, Error, IqError, MessageRecvError, PresenceError, RosterError, StatusError, @@ -102,10 +102,15 @@ pub enum Command { /// disco info query DiscoInfo( Option, + Option, oneshot::Sender>, ), - // /// disco items query - // DiscoItems(JID, oneshot::Sender>), + /// disco items query + DiscoItems( + Option, + Option, + oneshot::Sender>, + ), } #[derive(Debug, Clone)] @@ -480,11 +485,35 @@ impl Client { Ok(result) } - pub async fn disco_info(&self, jid: Option) -> Result> { + pub async fn disco_info( + &self, + jid: Option, + node: Option, + ) -> Result> { let (send, recv) = oneshot::channel(); - self.send(CoreClientCommand::Command(Command::DiscoInfo(jid, send))) + self.send(CoreClientCommand::Command(Command::DiscoInfo( + jid, node, send, + ))) + .await + .map_err(|e| CommandError::Actor(Into::::into(e)))?; + let result = timeout(self.timeout, recv) .await - .map_err(|e| CommandError::Actor(Into::::into(e)))?; + .map_err(|e| CommandError::Actor(Into::::into(e)))? + .map_err(|e| CommandError::Actor(Into::::into(e)))??; + Ok(result) + } + + pub async fn disco_items( + &self, + jid: Option, + node: Option, + ) -> Result> { + let (send, recv) = oneshot::channel(); + self.send(CoreClientCommand::Command(Command::DiscoItems( + jid, node, send, + ))) + .await + .map_err(|e| CommandError::Actor(Into::::into(e)))?; let result = timeout(self.timeout, recv) .await .map_err(|e| CommandError::Actor(Into::::into(e)))? -- cgit