From 00ad4d54e7e88593c24fd596a673fe208aca47ea Mon Sep 17 00:00:00 2001 From: Paul Makles Date: Fri, 15 Jul 2022 16:34:08 +0100 Subject: [PATCH] feat: add nsfw flag to emotes --- crates/delta/src/routes/customisation/emoji_create.rs | 6 ++++++ crates/quark/src/events/impl.rs | 1 + crates/quark/src/impl/dummy/media/emoji.rs | 1 + crates/quark/src/models/media/emoji.rs | 9 +++++++++ 4 files changed, 17 insertions(+) diff --git a/crates/delta/src/routes/customisation/emoji_create.rs b/crates/delta/src/routes/customisation/emoji_create.rs index b2440069..e71b20fe 100644 --- a/crates/delta/src/routes/customisation/emoji_create.rs +++ b/crates/delta/src/routes/customisation/emoji_create.rs @@ -14,7 +14,11 @@ pub struct DataCreateEmoji { /// Server name #[validate(length(min = 1, max = 32), regex = "RE_EMOJI")] name: String, + /// Parent information parent: EmojiParent, + /// Whether the emoji is mature + #[serde(default)] + nsfw: bool, } /// # Create New Emoji @@ -55,6 +59,7 @@ pub async fn create_emoji( return Err(Error::TooManyEmoji); } } + EmojiParent::Detached => return Err(Error::InvalidOperation), }; // Find the relevant attachment @@ -67,6 +72,7 @@ pub async fn create_emoji( creator_id: user.id, name: data.name, animated: "image/gif" == &attachment.content_type, + nsfw: data.nsfw, }; // Save emoji diff --git a/crates/quark/src/events/impl.rs b/crates/quark/src/events/impl.rs index 03acc508..0dd41e16 100644 --- a/crates/quark/src/events/impl.rs +++ b/crates/quark/src/events/impl.rs @@ -111,6 +111,7 @@ impl State { // Fetch all memberships with their corresponding servers. let members: Vec = db.fetch_all_memberships(&user.id).await?; + let server_ids: Vec = members.iter().map(|x| x.id.server.clone()).collect(); let servers = db.fetch_servers(&server_ids).await?; diff --git a/crates/quark/src/impl/dummy/media/emoji.rs b/crates/quark/src/impl/dummy/media/emoji.rs index bd2ff700..6695db69 100644 --- a/crates/quark/src/impl/dummy/media/emoji.rs +++ b/crates/quark/src/impl/dummy/media/emoji.rs @@ -14,6 +14,7 @@ impl AbstractEmoji for DummyDb { parent: EmojiParent::Server { id: id.into() }, creator_id: id.into(), animated: false, + nsfw: false, }) } diff --git a/crates/quark/src/models/media/emoji.rs b/crates/quark/src/models/media/emoji.rs index 44df4746..2d3345dd 100644 --- a/crates/quark/src/models/media/emoji.rs +++ b/crates/quark/src/models/media/emoji.rs @@ -1,5 +1,10 @@ use serde::{Deserialize, Serialize}; +/// Utility function to check if a boolean value is false +pub fn if_false(t: &bool) -> bool { + !t +} + /// Information about what owns this emoji #[derive(Serialize, Deserialize, JsonSchema, Debug, Clone)] #[serde(tag = "type")] @@ -21,5 +26,9 @@ pub struct Emoji { /// Emoji name pub name: String, /// Whether the emoji is animated + #[serde(skip_serializing_if = "if_false", default)] pub animated: bool, + /// Whether the emoji is marked as nsfw + #[serde(skip_serializing_if = "if_false", default)] + pub nsfw: bool, }