refactor(channel): accept SendMessage struct in Channel::send()
Refactor the Channel trait to accept a SendMessage struct instead of separate message and recipient string parameters. This enables passing additional metadata like email subjects. Changes: - Add SendMessage struct with content, recipient, and optional subject - Update Channel::send() signature to accept &SendMessage - Update all 12 channel implementations - Update call sites in channels/mod.rs and gateway/mod.rs Subject field usage: - Email: uses subject for email subject line - DingTalk: uses subject as markdown message title - All others: ignore subject (no native platform support)
This commit is contained in:
parent
b8ed42edbb
commit
dbebd48dfe
14 changed files with 153 additions and 73 deletions
|
|
@ -1,4 +1,4 @@
|
|||
use crate::channels::traits::{Channel, ChannelMessage};
|
||||
use crate::channels::traits::{Channel, ChannelMessage, SendMessage};
|
||||
use async_trait::async_trait;
|
||||
use std::sync::atomic::{AtomicU64, Ordering};
|
||||
use std::sync::Arc;
|
||||
|
|
@ -345,7 +345,7 @@ impl Channel for IrcChannel {
|
|||
"irc"
|
||||
}
|
||||
|
||||
async fn send(&self, message: &str, recipient: &str) -> anyhow::Result<()> {
|
||||
async fn send(&self, message: &SendMessage) -> anyhow::Result<()> {
|
||||
let mut guard = self.writer.lock().await;
|
||||
let writer = guard
|
||||
.as_mut()
|
||||
|
|
@ -353,12 +353,12 @@ impl Channel for IrcChannel {
|
|||
|
||||
// Calculate safe payload size:
|
||||
// 512 - sender prefix (~64 bytes for :nick!user@host) - "PRIVMSG " - target - " :" - "\r\n"
|
||||
let overhead = SENDER_PREFIX_RESERVE + 10 + recipient.len() + 2;
|
||||
let overhead = SENDER_PREFIX_RESERVE + 10 + message.recipient.len() + 2;
|
||||
let max_payload = 512_usize.saturating_sub(overhead);
|
||||
let chunks = split_message(message, max_payload);
|
||||
let chunks = split_message(&message.content, max_payload);
|
||||
|
||||
for chunk in chunks {
|
||||
Self::send_raw(writer, &format!("PRIVMSG {recipient} :{chunk}")).await?;
|
||||
Self::send_raw(writer, &format!("PRIVMSG {} :{chunk}", message.recipient)).await?;
|
||||
}
|
||||
|
||||
Ok(())
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue