From f2353461b36fdf6e103ca58c2d6cd14a37633591 Mon Sep 17 00:00:00 2001 From: James Magahern Date: Sun, 24 Aug 2025 23:01:11 -0700 Subject: [PATCH] xpc: full attachment data --- kordophoned/src/xpc/rpc.rs | 44 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 44 insertions(+) diff --git a/kordophoned/src/xpc/rpc.rs b/kordophoned/src/xpc/rpc.rs index 6bfa2a5..904e87f 100644 --- a/kordophoned/src/xpc/rpc.rs +++ b/kordophoned/src/xpc/rpc.rs @@ -164,6 +164,50 @@ pub async fn dispatch( .collect(); m.insert(cstr("attachment_guids"), array_from_strs(attachment_guids)); + // Full attachments array with metadata (mirrors DBus fields) + let mut attachments_items: Vec = Vec::new(); + for attachment in msg.attachments.iter() { + let mut a: XpcMap = HashMap::new(); + // Basic identifiers + dict_put_str(&mut a, "guid", &attachment.guid); + + // Paths and download status + let path = attachment.get_path_for_preview(false); + let preview_path = attachment.get_path_for_preview(true); + let downloaded = attachment.is_downloaded(false); + let preview_downloaded = attachment.is_downloaded(true); + + dict_put_str(&mut a, "path", &path.to_string_lossy()); + dict_put_str(&mut a, "preview_path", &preview_path.to_string_lossy()); + dict_put_str(&mut a, "downloaded", &downloaded.to_string()); + dict_put_str( + &mut a, + "preview_downloaded", + &preview_downloaded.to_string(), + ); + + // Metadata (optional) + if let Some(metadata) = &attachment.metadata { + let mut metadata_map: XpcMap = HashMap::new(); + if let Some(attribution_info) = &metadata.attribution_info { + let mut attribution_map: XpcMap = HashMap::new(); + if let Some(width) = attribution_info.width { + dict_put_i64_as_str(&mut attribution_map, "width", width as i64); + } + if let Some(height) = attribution_info.height { + dict_put_i64_as_str(&mut attribution_map, "height", height as i64); + } + metadata_map.insert(cstr("attribution_info"), Message::Dictionary(attribution_map)); + } + if !metadata_map.is_empty() { + a.insert(cstr("metadata"), Message::Dictionary(metadata_map)); + } + } + + attachments_items.push(Message::Dictionary(a)); + } + m.insert(cstr("attachments"), Message::Array(attachments_items)); + items.push(Message::Dictionary(m)); } let mut reply: XpcMap = HashMap::new();