From 686f023382f7366eba39cf4422801607a3aa5983 Mon Sep 17 00:00:00 2001 From: Christopher Huntwork Date: Thu, 11 Dec 2025 10:39:45 -0800 Subject: [PATCH] added keep message type --- src/imessage/aps_client.rs | 3 ++- src/imessage/messages.rs | 10 +++++++++- src/test.rs | 10 ++++++++++ 3 files changed, 21 insertions(+), 2 deletions(-) diff --git a/src/imessage/aps_client.rs b/src/imessage/aps_client.rs index 9aabf69..273db69 100644 --- a/src/imessage/aps_client.rs +++ b/src/imessage/aps_client.rs @@ -213,13 +213,14 @@ impl IMClient { let command = payload.command; // delivered/read if let IDSRecvMessage { - command: 101 | 102 | 113, + command: 101 | 102 | 113 | 106, .. } = &payload { return Ok(payload.to_message(None, match command { 101 => Message::Delivered, 102 => Message::Read, 113 => Message::NotifyAnyways, + 106 => Message::Keep, _ => panic!("no") }).ok()) } diff --git a/src/imessage/messages.rs b/src/imessage/messages.rs index f1d3571..26b3802 100644 --- a/src/imessage/messages.rs +++ b/src/imessage/messages.rs @@ -1624,6 +1624,7 @@ pub enum Message { ShareProfile(ShareProfileMessage), NotifyAnyways, SetTranscriptBackground(SetTranscriptBackgroundMessage), + Keep, } @@ -1678,6 +1679,7 @@ impl Message { Self::ShareProfile(_) => 131, Self::NotifyAnyways => 113, Self::SetTranscriptBackground(_) => 138, + Self::Keep => 106, } } @@ -1752,6 +1754,7 @@ impl Message { Self::UpdateProfileSharing(_) => Some(true), Self::NotifyAnyways => Some(true), Self::SetTranscriptBackground(_) => Some(true), + Self::Keep => Some(true), _ => None } } @@ -1837,7 +1840,10 @@ impl fmt::Display for Message { }, Message::SetTranscriptBackground(_) => { write!(f, "Changed the transcript background") - } + }, + Message::Keep => { + write!(f, "kept a message") + }, } } } @@ -1943,6 +1949,7 @@ impl MessageInst { Message::PeerCacheInvalidate => false, Message::Unschedule => false, Message::NotifyAnyways => false, + Message::Keep => false, _ => true } } @@ -2379,6 +2386,7 @@ impl MessageInst { }, Message::Delivered => panic!("no enc body!"), Message::Read => panic!("no enc body!"), + Message::Keep => panic!("no enc body!"), Message::MessageReadOnDevice => panic!("no enc body!"), Message::PeerCacheInvalidate => panic!("no enc body!"), Message::Error(_) => panic!("no enc body!"), diff --git a/src/test.rs b/src/test.rs index 96b7211..3f8a35c 100644 --- a/src/test.rs +++ b/src/test.rs @@ -501,6 +501,16 @@ async fn main() { client.identity.certify_delivery("com.apple.madrid", &context, false).await.unwrap(); } } + //automatically keep audio messages + if let Message::Message(normal_message) = &msg.message { + if normal_message.voice { + if let Some(conversation_data) = msg.conversation.clone() { + let mut keep_msg = MessageInst::new(conversation_data, &handle, Message::Keep); + keep_msg.id = msg.id.clone(); + client.send(&mut keep_msg).await.unwrap(); + } + } + } } }, input = &mut read_task => {