@@ -98,38 +98,38 @@ auto_derived!(
|
||||
pub struct WebsiteMetadata {
|
||||
/// Direct URL to web page
|
||||
#[serde(skip_serializing_if = "Option::is_none")]
|
||||
url: Option<String>,
|
||||
pub url: Option<String>,
|
||||
/// Original direct URL
|
||||
#[serde(skip_serializing_if = "Option::is_none")]
|
||||
original_url: Option<String>,
|
||||
pub original_url: Option<String>,
|
||||
/// Remote content
|
||||
#[serde(skip_serializing_if = "Option::is_none")]
|
||||
special: Option<Special>,
|
||||
pub special: Option<Special>,
|
||||
|
||||
/// Title of website
|
||||
#[serde(skip_serializing_if = "Option::is_none")]
|
||||
title: Option<String>,
|
||||
pub title: Option<String>,
|
||||
/// Description of website
|
||||
#[serde(skip_serializing_if = "Option::is_none")]
|
||||
description: Option<String>,
|
||||
pub description: Option<String>,
|
||||
/// Embedded image
|
||||
#[serde(skip_serializing_if = "Option::is_none")]
|
||||
image: Option<Image>,
|
||||
pub image: Option<Image>,
|
||||
/// Embedded video
|
||||
#[serde(skip_serializing_if = "Option::is_none")]
|
||||
video: Option<Video>,
|
||||
pub video: Option<Video>,
|
||||
|
||||
// #[serde(skip_serializing_if = "Option::is_none")]
|
||||
// opengraph_type: Option<String>,
|
||||
/// Site name
|
||||
#[serde(skip_serializing_if = "Option::is_none")]
|
||||
site_name: Option<String>,
|
||||
pub site_name: Option<String>,
|
||||
/// URL to site icon
|
||||
#[serde(skip_serializing_if = "Option::is_none")]
|
||||
icon_url: Option<String>,
|
||||
pub icon_url: Option<String>,
|
||||
/// CSS Colour
|
||||
#[serde(skip_serializing_if = "Option::is_none")]
|
||||
colour: Option<String>,
|
||||
pub colour: Option<String>,
|
||||
}
|
||||
|
||||
/// Text Embed
|
||||
|
||||
@@ -207,6 +207,8 @@ auto_derived!(
|
||||
pub timestamp: u64,
|
||||
/// URL to open when clicking notification
|
||||
pub url: String,
|
||||
/// The message object itself, to send to clients for processing
|
||||
pub message: Message,
|
||||
}
|
||||
|
||||
/// Representation of a text embed before it is sent.
|
||||
@@ -453,15 +455,30 @@ impl PushNotification {
|
||||
format!("{}/assets/logo.png", config.hosts.app)
|
||||
};
|
||||
|
||||
let image = msg.attachments.and_then(|attachments| {
|
||||
let image = msg.attachments.as_ref().and_then(|attachments| {
|
||||
attachments
|
||||
.first()
|
||||
.map(|v| format!("{}/attachments/{}", config.hosts.autumn, v.id))
|
||||
});
|
||||
|
||||
let body = if let Some(sys) = msg.system {
|
||||
sys.into()
|
||||
} else if let Some(text) = msg.content {
|
||||
let body = if let Some(ref sys) = msg.system {
|
||||
sys.clone().into()
|
||||
} else if let Some(ref text) = msg.content {
|
||||
text.clone()
|
||||
} else if let Some(text) = msg.embeds.as_ref().and_then(|embeds| match embeds.first() {
|
||||
Some(Embed::Image(_)) => Some("Sent an image".to_string()),
|
||||
Some(Embed::Video(_)) => Some("Sent a video".to_string()),
|
||||
Some(Embed::Text(e)) => e
|
||||
.description
|
||||
.clone()
|
||||
.or(e.title.clone().or(Some("Empty Embed".to_string()))),
|
||||
Some(Embed::Website(e)) => e.title.clone().or(e
|
||||
.description
|
||||
.clone()
|
||||
.or(e.site_name.clone().or(Some("Empty Embed".to_string())))),
|
||||
Some(Embed::None) => Some("Empty Message".to_string()), // ???
|
||||
None => Some("Empty Message".to_string()), // ??
|
||||
}) {
|
||||
text
|
||||
} else {
|
||||
"Empty Message".to_string()
|
||||
@@ -482,6 +499,7 @@ impl PushNotification {
|
||||
tag: channel_id.to_string(),
|
||||
timestamp,
|
||||
url: format!("{}/channel/{}/{}", config.hosts.app, channel_id, msg.id),
|
||||
message: msg,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user