whatsapp_rust/
presence.rs1use crate::client::Client;
2use crate::types::presence::Presence;
3use log::{debug, info, warn};
4use wacore_binary::builder::NodeBuilder;
5
6impl Client {
7 pub async fn send_presence(&self, presence: Presence) -> Result<(), anyhow::Error> {
8 let device_snapshot = self.persistence_manager.get_device_snapshot().await;
9 debug!(
10 "🔍 send_presence called with push_name: '{}'",
11 device_snapshot.push_name
12 );
13 if device_snapshot.push_name.is_empty() {
14 warn!("❌ Cannot send presence: push_name is empty!");
15 return Err(anyhow::anyhow!(
16 "Cannot send presence without a push name set"
17 ));
18 }
19 let presence_type = match presence {
20 Presence::Available => "available",
21 Presence::Unavailable => "unavailable",
22 };
23 let node = NodeBuilder::new("presence")
24 .attr("type", presence_type)
25 .attr("name", &device_snapshot.push_name)
26 .build();
27 info!(
28 "📡 Sending presence stanza: <presence type=\"{}\" name=\"{}\"/>",
29 presence_type,
30 node.attrs.get("name").map_or("", |s| s.as_str())
31 );
32 self.send_node(node).await.map_err(|e| e.into())
33 }
34}