From 10f116b4a3fe37dfa0c5476d383602a7089fad30 Mon Sep 17 00:00:00 2001
From: Paul <paulmakles@gmail.com>
Date: Fri, 14 May 2021 22:44:35 +0100
Subject: [PATCH] Block voice calls in saved messages channel. Add messages for
 desc / icon change for group chats.

---
 src/database/entities/message.rs    |  4 ++++
 src/database/permissions/channel.rs |  2 +-
 src/routes/channels/edit_channel.rs | 24 +++++++++++++++++++++++-
 3 files changed, 28 insertions(+), 2 deletions(-)

diff --git a/src/database/entities/message.rs b/src/database/entities/message.rs
index 04238ed..79463bb 100644
--- a/src/database/entities/message.rs
+++ b/src/database/entities/message.rs
@@ -30,6 +30,10 @@ pub enum SystemMessage {
     UserLeft { id: String },
     #[serde(rename = "channel_renamed")]
     ChannelRenamed { name: String, by: String },
+    #[serde(rename = "channel_description_changed")]
+    ChannelDescriptionChanged { by: String },
+    #[serde(rename = "channel_icon_changed")]
+    ChannelIconChanged { by: String },
 }
 
 #[derive(Serialize, Deserialize, Debug, Clone)]
diff --git a/src/database/permissions/channel.rs b/src/database/permissions/channel.rs
index c82fb2c..d58886b 100644
--- a/src/database/permissions/channel.rs
+++ b/src/database/permissions/channel.rs
@@ -40,7 +40,7 @@ impl<'a> PermissionCalculator<'a> {
         match channel {
             Channel::SavedMessages { user: owner, .. } => {
                 if &self.perspective.id == owner {
-                    Ok(u32::MAX)
+                    Ok(u32::MAX - ChannelPermission::VoiceCall as u32)
                 } else {
                     Ok(0)
                 }
diff --git a/src/routes/channels/edit_channel.rs b/src/routes/channels/edit_channel.rs
index 7c4f037..d032377 100644
--- a/src/routes/channels/edit_channel.rs
+++ b/src/routes/channels/edit_channel.rs
@@ -111,7 +111,29 @@ pub async fn req(user: User, target: Ref, data: Json<Data>) -> Result<()> {
                 Message::create(
                     "00000000000000000000000000".to_string(),
                     id.clone(),
-                    Content::SystemMessage(SystemMessage::ChannelRenamed { name, by: user.id }),
+                    Content::SystemMessage(SystemMessage::ChannelRenamed { name, by: user.id.clone() }),
+                )
+                .publish(&target)
+                .await
+                .ok();
+            }
+
+            if let Some(_) = data.description {
+                Message::create(
+                    "00000000000000000000000000".to_string(),
+                    id.clone(),
+                    Content::SystemMessage(SystemMessage::ChannelDescriptionChanged { by: user.id.clone() }),
+                )
+                .publish(&target)
+                .await
+                .ok();
+            }
+
+            if let Some(_) = data.icon {
+                Message::create(
+                    "00000000000000000000000000".to_string(),
+                    id.clone(),
+                    Content::SystemMessage(SystemMessage::ChannelIconChanged { by: user.id }),
                 )
                 .publish(&target)
                 .await
-- 
GitLab