Add channel visibility columns and protos

This commit is contained in:
Mikayla 2023-10-12 12:21:09 -07:00
parent 540436a1f9
commit 78432d08ca
No known key found for this signature in database
6 changed files with 72 additions and 6 deletions

View File

@ -3,7 +3,7 @@ use crate::channel_chat::ChannelChatEvent;
use super::*;
use client::{test::FakeServer, Client, UserStore};
use gpui::{AppContext, ModelHandle, TestAppContext};
use rpc::proto;
use rpc::proto::{self, ChannelRole};
use settings::SettingsStore;
use util::http::FakeHttpClient;
@ -18,10 +18,12 @@ fn test_update_channels(cx: &mut AppContext) {
proto::Channel {
id: 1,
name: "b".to_string(),
visibility: proto::ChannelVisibility::ChannelMembers as i32,
},
proto::Channel {
id: 2,
name: "a".to_string(),
visibility: proto::ChannelVisibility::ChannelMembers as i32,
},
],
channel_permissions: vec![proto::ChannelPermission {
@ -49,10 +51,12 @@ fn test_update_channels(cx: &mut AppContext) {
proto::Channel {
id: 3,
name: "x".to_string(),
visibility: proto::ChannelVisibility::ChannelMembers as i32,
},
proto::Channel {
id: 4,
name: "y".to_string(),
visibility: proto::ChannelVisibility::ChannelMembers as i32,
},
],
insert_edge: vec![
@ -92,14 +96,17 @@ fn test_dangling_channel_paths(cx: &mut AppContext) {
proto::Channel {
id: 0,
name: "a".to_string(),
visibility: proto::ChannelVisibility::ChannelMembers as i32,
},
proto::Channel {
id: 1,
name: "b".to_string(),
visibility: proto::ChannelVisibility::ChannelMembers as i32,
},
proto::Channel {
id: 2,
name: "c".to_string(),
visibility: proto::ChannelVisibility::ChannelMembers as i32,
},
],
insert_edge: vec![
@ -158,6 +165,7 @@ async fn test_channel_messages(cx: &mut TestAppContext) {
channels: vec![proto::Channel {
id: channel_id,
name: "the-channel".to_string(),
visibility: proto::ChannelVisibility::ChannelMembers as i32,
}],
..Default::default()
});

View File

@ -1,4 +1,4 @@
-- Add migration script here
ALTER TABLE channel_members ADD COLUMN role TEXT;
UPDATE channel_members SET role = CASE WHEN admin THEN 'admin' ELSE 'member' END;
ALTER TABLE channels ADD COLUMN visibility TEXT NOT NULL DEFAULT 'channel_members';

View File

@ -119,3 +119,38 @@ impl Into<i32> for ChannelRole {
proto.into()
}
}
#[derive(Eq, PartialEq, Copy, Clone, Debug, EnumIter, DeriveActiveEnum, Default)]
#[sea_orm(rs_type = "String", db_type = "String(None)")]
pub enum ChannelVisibility {
#[sea_orm(string_value = "public")]
Public,
#[sea_orm(string_value = "channel_members")]
#[default]
ChannelMembers,
}
impl From<proto::ChannelVisibility> for ChannelVisibility {
fn from(value: proto::ChannelVisibility) -> Self {
match value {
proto::ChannelVisibility::Public => ChannelVisibility::Public,
proto::ChannelVisibility::ChannelMembers => ChannelVisibility::ChannelMembers,
}
}
}
impl Into<proto::ChannelVisibility> for ChannelVisibility {
fn into(self) -> proto::ChannelVisibility {
match self {
ChannelVisibility::Public => proto::ChannelVisibility::Public,
ChannelVisibility::ChannelMembers => proto::ChannelVisibility::ChannelMembers,
}
}
}
impl Into<i32> for ChannelVisibility {
fn into(self) -> i32 {
let proto: proto::ChannelVisibility = self.into();
proto.into()
}
}

View File

@ -1,4 +1,4 @@
use crate::db::ChannelId;
use crate::db::{ChannelId, ChannelVisibility};
use sea_orm::entity::prelude::*;
#[derive(Clone, Debug, Default, PartialEq, Eq, DeriveEntityModel)]
@ -7,6 +7,7 @@ pub struct Model {
#[sea_orm(primary_key)]
pub id: ChannelId,
pub name: String,
pub visbility: ChannelVisibility,
}
impl ActiveModelBehavior for ActiveModel {}

View File

@ -38,8 +38,8 @@ use lazy_static::lazy_static;
use prometheus::{register_int_gauge, IntGauge};
use rpc::{
proto::{
self, Ack, AnyTypedEnvelope, ChannelEdge, EntityMessage, EnvelopedMessage,
LiveKitConnectionInfo, RequestMessage, UpdateChannelBufferCollaborators,
self, Ack, AnyTypedEnvelope, ChannelEdge, ChannelVisibility, EntityMessage,
EnvelopedMessage, LiveKitConnectionInfo, RequestMessage, UpdateChannelBufferCollaborators,
},
Connection, ConnectionId, Peer, Receipt, TypedEnvelope,
};
@ -2210,6 +2210,8 @@ async fn create_channel(
let channel = proto::Channel {
id: id.to_proto(),
name: request.name,
// TODO: Visibility
visibility: proto::ChannelVisibility::ChannelMembers as i32,
};
response.send(proto::CreateChannelResponse {
@ -2299,6 +2301,8 @@ async fn invite_channel_member(
update.channel_invitations.push(proto::Channel {
id: channel.id.to_proto(),
name: channel.name,
// TODO: Visibility
visibility: proto::ChannelVisibility::ChannelMembers as i32,
});
for connection_id in session
.connection_pool()
@ -2394,6 +2398,8 @@ async fn rename_channel(
let channel = proto::Channel {
id: request.channel_id,
name: new_name,
// TODO: Visibility
visibility: proto::ChannelVisibility::ChannelMembers as i32,
};
response.send(proto::RenameChannelResponse {
channel: Some(channel.clone()),
@ -2432,6 +2438,8 @@ async fn link_channel(
.map(|channel| proto::Channel {
id: channel.id.to_proto(),
name: channel.name,
// TODO: Visibility
visibility: proto::ChannelVisibility::ChannelMembers as i32,
})
.collect(),
insert_edge: channels_to_send.edges,
@ -2523,6 +2531,8 @@ async fn move_channel(
.map(|channel| proto::Channel {
id: channel.id.to_proto(),
name: channel.name,
// TODO: Visibility
visibility: proto::ChannelVisibility::ChannelMembers as i32,
})
.collect(),
insert_edge: channels_to_send.edges,
@ -2579,6 +2589,8 @@ async fn respond_to_channel_invite(
.map(|channel| proto::Channel {
id: channel.id.to_proto(),
name: channel.name,
// TODO: Visibility
visibility: ChannelVisibility::ChannelMembers.into(),
}),
);
update.unseen_channel_messages = result.channel_messages;
@ -3082,6 +3094,8 @@ fn build_initial_channels_update(
update.channels.push(proto::Channel {
id: channel.id.to_proto(),
name: channel.name,
// TODO: Visibility
visibility: ChannelVisibility::Public.into(),
});
}
@ -3114,6 +3128,8 @@ fn build_initial_channels_update(
update.channel_invitations.push(proto::Channel {
id: channel.id.to_proto(),
name: channel.name,
// TODO: Visibility
visibility: ChannelVisibility::Public.into(),
});
}

View File

@ -1539,9 +1539,15 @@ message Nonce {
uint64 lower_half = 2;
}
enum ChannelVisibility {
Public = 0;
ChannelMembers = 1;
}
message Channel {
uint64 id = 1;
string name = 2;
ChannelVisibility visibility = 3;
}
message Contact {