feat: Update FCM payload for android notifications (#766)

* feat: modify fcm payload to jens will

Signed-off-by: IAmTomahawkx <iamtomahawkx@gmail.com>

* fix: add message id

Signed-off-by: IAmTomahawkx <iamtomahawkx@gmail.com>

* fix: rename field

Signed-off-by: IAmTomahawkx <iamtomahawkx@gmail.com>

* fix: whitespace

Signed-off-by: IAmTomahawkx <iamtomahawkx@gmail.com>

---------

Signed-off-by: IAmTomahawkx <iamtomahawkx@gmail.com>
This commit is contained in:
Tom
2026-05-18 10:57:23 -07:00
committed by GitHub
parent 2871632382
commit acbc087982

View File

@@ -11,7 +11,6 @@ use fcm_v1::{
}; };
use revolt_config::config; use revolt_config::config;
use revolt_database::{events::rabbit::*, Database}; use revolt_database::{events::rabbit::*, Database};
use revolt_models::v0::{Channel, PushNotification};
use serde_json::Value; use serde_json::Value;
/// Custom notification data /// Custom notification data
@@ -31,10 +30,12 @@ pub enum NotificationData {
image: Option<String>, image: Option<String>,
}, },
Message { Message {
title: String, message: String,
body: String, body: String,
image: String, image: String,
tag: String, channel: String,
author: String,
author_name: String,
}, },
DmCallStartEnd { DmCallStartEnd {
initiator_id: String, initiator_id: String,
@@ -81,15 +82,19 @@ impl NotificationData {
} }
} }
NotificationData::Message { NotificationData::Message {
title, message,
body, body,
image, image,
tag, channel,
author,
author_name,
} => { } => {
data.insert("title".to_string(), Value::String(title)); data.insert("message".to_string(), Value::String(message));
data.insert("body".to_string(), Value::String(body)); data.insert("body".to_string(), Value::String(body));
data.insert("image".to_string(), Value::String(image)); data.insert("image".to_string(), Value::String(image));
data.insert("tag".to_string(), Value::String(tag)); data.insert("channel".to_string(), Value::String(channel));
data.insert("author".to_string(), Value::String(author));
data.insert("author_name".to_string(), Value::String(author_name));
} }
NotificationData::DmCallStartEnd { NotificationData::DmCallStartEnd {
initiator_id, initiator_id,
@@ -115,26 +120,6 @@ pub struct FcmOutboundConsumer {
client: Client, client: Client,
} }
impl FcmOutboundConsumer {
fn format_title(&self, notification: &PushNotification) -> String {
// ideally this changes depending on context
// in a server, it would look like "Sendername, #channelname in servername"
// in a group, it would look like "Sendername in groupname"
// in a dm it should just be "Sendername".
// not sure how feasible all those are given the PushNotification object as it currently stands.
#[allow(deprecated)]
match &notification.channel {
Channel::DirectMessage { .. } => notification.author.clone(),
Channel::Group { name, .. } => format!("{}, #{}", notification.author, name),
Channel::TextChannel { name, .. } => {
format!("{} in #{}", notification.author, name)
}
_ => "Unknown".to_string(),
}
}
}
impl FcmOutboundConsumer { impl FcmOutboundConsumer {
pub async fn new(db: Database) -> Result<FcmOutboundConsumer, &'static str> { pub async fn new(db: Database) -> Result<FcmOutboundConsumer, &'static str> {
let config = revolt_config::config().await; let config = revolt_config::config().await;
@@ -244,10 +229,12 @@ impl FcmOutboundConsumer {
PayloadKind::MessageNotification(alert) => { PayloadKind::MessageNotification(alert) => {
let data = NotificationData::Message { let data = NotificationData::Message {
title: self.format_title(&alert), message: alert.message.id,
body: alert.body, body: alert.body,
image: alert.icon, image: alert.icon,
tag: alert.tag, channel: alert.message.channel,
author: alert.message.author,
author_name: alert.author,
}; };
let msg = Message { let msg = Message {