From d4f7c4a77d6ca5465f10c7d354bf0d1420c5c718 Mon Sep 17 00:00:00 2001 From: Zomatree Date: Mon, 16 Aug 2021 00:18:14 +0100 Subject: [PATCH 1/4] add nsfw to servers and channels --- src/database/entities/channel.rs | 21 ++++++++++++++++++--- src/database/entities/server.rs | 7 +++++++ src/routes/channels/channel_edit.rs | 6 ++++++ src/routes/channels/group_create.rs | 5 ++++- src/routes/servers/channel_create.rs | 10 ++++++++-- src/routes/servers/server_create.rs | 6 +++++- src/routes/servers/server_edit.rs | 6 ++++++ 7 files changed, 54 insertions(+), 7 deletions(-) diff --git a/src/database/entities/channel.rs b/src/database/entities/channel.rs index f3029660..dbf667a6 100644 --- a/src/database/entities/channel.rs +++ b/src/database/entities/channel.rs @@ -57,7 +57,10 @@ pub enum Channel { #[serde(skip_serializing_if = "Option::is_none")] permissions: Option, - }, + + #[serde(skip_serializing_if = "is_false", default)] + nsfw: bool + }, TextChannel { #[serde(rename = "_id")] id: String, @@ -77,7 +80,10 @@ pub enum Channel { #[serde(skip_serializing_if = "Option::is_none")] default_permissions: Option, #[serde(default = "HashMap::new", skip_serializing_if = "HashMap::is_empty")] - role_permissions: HashMap + role_permissions: HashMap, + + #[serde(skip_serializing_if = "is_false", default)] + nsfw: bool }, VoiceChannel { #[serde(rename = "_id")] @@ -95,7 +101,11 @@ pub enum Channel { #[serde(skip_serializing_if = "Option::is_none")] default_permissions: Option, #[serde(default = "HashMap::new", skip_serializing_if = "HashMap::is_empty")] - role_permissions: HashMap + role_permissions: HashMap, + + #[serde(skip_serializing_if = "is_false", default)] + nsfw: bool + }, } @@ -395,3 +405,8 @@ impl Channel { } } } + + +fn is_false(value: &bool) -> bool { + !value +} \ No newline at end of file diff --git a/src/database/entities/server.rs b/src/database/entities/server.rs index 6f050ad1..97abccf6 100644 --- a/src/database/entities/server.rs +++ b/src/database/entities/server.rs @@ -107,6 +107,9 @@ pub struct Server { pub icon: Option, #[serde(skip_serializing_if = "Option::is_none")] pub banner: Option, + + #[serde(skip_serializing_if = "is_false", default)] + pub nsfw: bool } impl Server { @@ -436,3 +439,7 @@ impl Server { })?) } } + +fn is_false(value: &bool) -> bool { + !value +} \ No newline at end of file diff --git a/src/routes/channels/channel_edit.rs b/src/routes/channels/channel_edit.rs index d32a5a87..f071c79b 100644 --- a/src/routes/channels/channel_edit.rs +++ b/src/routes/channels/channel_edit.rs @@ -18,6 +18,8 @@ pub struct Data { #[validate(length(min = 1, max = 128))] icon: Option, remove: Option, + #[serde(skip_serializing_if = "Option::is_none")] + nsfw: Option } #[patch("/", data = "")] @@ -86,6 +88,10 @@ pub async fn req(user: User, target: Ref, data: Json) -> Result<()> { remove_icon = true; } + if let Some(nsfw) = &data.nsfw { + set.insert("nsfw", nsfw); + } + let mut operations = doc! {}; if set.len() > 0 { operations.insert("$set", &set); diff --git a/src/routes/channels/group_create.rs b/src/routes/channels/group_create.rs index 80bf372a..7d0ce530 100644 --- a/src/routes/channels/group_create.rs +++ b/src/routes/channels/group_create.rs @@ -20,6 +20,8 @@ pub struct Data { #[validate(length(min = 1, max = 36))] nonce: String, users: Vec, + #[serde(skip_serializing_if = "Option::is_none")] + nsfw: Option } #[post("/create", data = "")] @@ -77,7 +79,8 @@ pub async fn req(user: User, info: Json) -> Result { recipients: set.into_iter().collect::>(), icon: None, last_message: None, - permissions: None + permissions: None, + nsfw: info.nsfw.unwrap_or_default() }; channel.clone().publish().await?; diff --git a/src/routes/servers/channel_create.rs b/src/routes/servers/channel_create.rs index ce472726..12520ed5 100644 --- a/src/routes/servers/channel_create.rs +++ b/src/routes/servers/channel_create.rs @@ -32,6 +32,8 @@ pub struct Data { // Maximum length of 36 allows both ULIDs and UUIDs. #[validate(length(min = 1, max = 36))] nonce: String, + #[serde(skip_serializing_if = "Option::is_none")] + nsfw: Option, } #[post("//channels", data = "")] @@ -80,7 +82,9 @@ pub async fn req(user: User, target: Ref, info: Json) -> Result { last_message: None, default_permissions: None, - role_permissions: HashMap::new() + role_permissions: HashMap::new(), + + nsfw: info.nsfw.unwrap_or_default(), }, ChannelType::Voice => Channel::VoiceChannel { id: id.clone(), @@ -92,7 +96,9 @@ pub async fn req(user: User, target: Ref, info: Json) -> Result { icon: None, default_permissions: None, - role_permissions: HashMap::new() + role_permissions: HashMap::new(), + + nsfw: info.nsfw.unwrap_or_default() } }; diff --git a/src/routes/servers/server_create.rs b/src/routes/servers/server_create.rs index 8d8d6736..88c664ae 100644 --- a/src/routes/servers/server_create.rs +++ b/src/routes/servers/server_create.rs @@ -18,6 +18,8 @@ pub struct Data { // Maximum length of 36 allows both ULIDs and UUIDs. #[validate(length(min = 1, max = 36))] nonce: String, + #[serde(skip_serializing_if = "Option::is_none")] + nsfw: Option } #[post("/create", data = "")] @@ -75,6 +77,7 @@ pub async fn req(user: User, info: Json) -> Result { icon: None, banner: None, + nsfw: info.nsfw.unwrap_or_default() }; Channel::TextChannel { @@ -88,7 +91,8 @@ pub async fn req(user: User, info: Json) -> Result { last_message: None, default_permissions: None, - role_permissions: HashMap::new() + role_permissions: HashMap::new(), + nsfw: false } .publish() .await?; diff --git a/src/routes/servers/server_edit.rs b/src/routes/servers/server_edit.rs index b4f7368a..ac4621f4 100644 --- a/src/routes/servers/server_edit.rs +++ b/src/routes/servers/server_edit.rs @@ -18,6 +18,8 @@ pub struct Data { categories: Option>, system_messages: Option, remove: Option, + #[serde(skip_serializing_if = "Option::is_none")] + nsfw: Option } #[patch("/", data = "")] @@ -105,6 +107,10 @@ pub async fn req(user: User, target: Ref, data: Json) -> Result<()> { set.insert("system_messages", to_bson(&system_messages).map_err(|_| Error::DatabaseError { operation: "to_document", with: "system_messages" })?); } + if let Some(nsfw) = &data.nsfw { + set.insert("nsfw", nsfw); + } + let mut operations = doc! {}; if set.len() > 0 { operations.insert("$set", &set); From 5179504ad9b4c38d28db3cdd372000553d34aff7 Mon Sep 17 00:00:00 2001 From: Zomatree Date: Mon, 16 Aug 2021 00:24:55 +0100 Subject: [PATCH 2/4] remove whitespace --- src/database/entities/channel.rs | 1 - 1 file changed, 1 deletion(-) diff --git a/src/database/entities/channel.rs b/src/database/entities/channel.rs index dbf667a6..d2b4e742 100644 --- a/src/database/entities/channel.rs +++ b/src/database/entities/channel.rs @@ -105,7 +105,6 @@ pub enum Channel { #[serde(skip_serializing_if = "is_false", default)] nsfw: bool - }, } From d972395e4307b02a46881f1ca8edbe0a7d04fd71 Mon Sep 17 00:00:00 2001 From: Zomatree Date: Mon, 16 Aug 2021 00:35:53 +0100 Subject: [PATCH 3/4] use existing if_false function --- src/database/entities/channel.rs | 4 ++-- src/database/entities/server.rs | 6 +++--- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/database/entities/channel.rs b/src/database/entities/channel.rs index d2b4e742..8114f0e3 100644 --- a/src/database/entities/channel.rs +++ b/src/database/entities/channel.rs @@ -103,7 +103,7 @@ pub enum Channel { #[serde(default = "HashMap::new", skip_serializing_if = "HashMap::is_empty")] role_permissions: HashMap, - #[serde(skip_serializing_if = "is_false", default)] + #[serde(skip_serializing_if = "entities::server::if_false", default)] nsfw: bool }, } @@ -406,6 +406,6 @@ impl Channel { } -fn is_false(value: &bool) -> bool { +pub fn is_false(value: &bool) -> bool { !value } \ No newline at end of file diff --git a/src/database/entities/server.rs b/src/database/entities/server.rs index 97abccf6..d75d9b4b 100644 --- a/src/database/entities/server.rs +++ b/src/database/entities/server.rs @@ -37,8 +37,8 @@ pub type PermissionTuple = ( i32 // channel permission ); -fn if_false(t: &bool) -> bool { - *t == false +pub fn if_false(t: &bool) -> bool { + !t } #[derive(Serialize, Deserialize, Debug, Clone)] @@ -108,7 +108,7 @@ pub struct Server { #[serde(skip_serializing_if = "Option::is_none")] pub banner: Option, - #[serde(skip_serializing_if = "is_false", default)] + #[serde(skip_serializing_if = "if_false", default)] pub nsfw: bool } From 08fe01a7f2a9bccdccee7ff81b1062b5c3b65860 Mon Sep 17 00:00:00 2001 From: Zomatree Date: Mon, 16 Aug 2021 01:06:13 +0100 Subject: [PATCH 4/4] actually remove old func --- src/database/entities/channel.rs | 9 ++------- src/database/entities/server.rs | 4 ---- 2 files changed, 2 insertions(+), 11 deletions(-) diff --git a/src/database/entities/channel.rs b/src/database/entities/channel.rs index 8114f0e3..a1ba6c4a 100644 --- a/src/database/entities/channel.rs +++ b/src/database/entities/channel.rs @@ -58,7 +58,7 @@ pub enum Channel { #[serde(skip_serializing_if = "Option::is_none")] permissions: Option, - #[serde(skip_serializing_if = "is_false", default)] + #[serde(skip_serializing_if = "entities::server::if_false", default)] nsfw: bool }, TextChannel { @@ -82,7 +82,7 @@ pub enum Channel { #[serde(default = "HashMap::new", skip_serializing_if = "HashMap::is_empty")] role_permissions: HashMap, - #[serde(skip_serializing_if = "is_false", default)] + #[serde(skip_serializing_if = "entities::server::if_false", default)] nsfw: bool }, VoiceChannel { @@ -404,8 +404,3 @@ impl Channel { } } } - - -pub fn is_false(value: &bool) -> bool { - !value -} \ No newline at end of file diff --git a/src/database/entities/server.rs b/src/database/entities/server.rs index d75d9b4b..14cb3945 100644 --- a/src/database/entities/server.rs +++ b/src/database/entities/server.rs @@ -439,7 +439,3 @@ impl Server { })?) } } - -fn is_false(value: &bool) -> bool { - !value -} \ No newline at end of file