1
0
mirror of https://gitlab.com/comunic/comunicapiv3 synced 2025-06-20 08:25:16 +00:00

Can create group conversation

This commit is contained in:
2021-04-03 19:00:18 +02:00
parent 1fc6f08b19
commit 63c284c322
11 changed files with 202 additions and 43 deletions

View File

@ -4,6 +4,7 @@
use crate::data::group_id::GroupID;
use crate::data::user::UserID;
use crate::data::group_member::GroupMembershipLevel;
#[derive(Copy, Debug, PartialEq, Eq, Clone, Hash)]
pub struct ConvID(u64);
@ -38,6 +39,7 @@ pub struct Conversation {
pub logo: Option<String>,
pub creation_time: u64,
pub group_id: Option<GroupID>,
pub min_group_membership_level: Option<GroupMembershipLevel>,
pub can_everyone_add_members: bool,
pub last_activity: u64,
pub members: Vec<ConversationMember>,
@ -59,6 +61,11 @@ impl Conversation {
/// Check out whether this conversation is managed or not
pub fn is_managed(&self) -> bool {
self.is_linked_to_group()
}
/// Check if this conversation is linked to a group
pub fn is_linked_to_group(&self) -> bool {
self.group_id.is_some()
}

View File

@ -5,7 +5,7 @@
use crate::data::group_id::GroupID;
use crate::data::user::UserID;
#[derive(PartialEq, Eq, PartialOrd)]
#[derive(PartialEq, Eq, PartialOrd, Debug)]
pub enum GroupMembershipLevel {
ADMINISTRATOR = 0,
MODERATOR = 1,
@ -20,6 +20,13 @@ pub enum GroupMembershipLevel {
}
impl GroupMembershipLevel {
pub fn is_at_least_member(&self) -> bool {
matches!(
&self,
GroupMembershipLevel::ADMINISTRATOR | GroupMembershipLevel::MODERATOR | GroupMembershipLevel::MEMBER
)
}
pub fn to_api(&self) -> String {
match self {
GroupMembershipLevel::ADMINISTRATOR => "administrator",
@ -54,6 +61,10 @@ pub struct GroupMember {
}
impl GroupMember {
pub fn is_admin(&self) -> bool {
self.level == GroupMembershipLevel::ADMINISTRATOR
}
/// Check if a member of a group is a least a moderator of this group
pub fn is_moderator(&self) -> bool {
self.level <= GroupMembershipLevel::MODERATOR

View File

@ -5,6 +5,7 @@
use std::collections::HashSet;
use crate::data::group_id::GroupID;
use crate::data::group_member::GroupMembershipLevel;
use crate::data::user::UserID;
#[derive(Debug)]
@ -12,6 +13,7 @@ pub struct NewConversation {
pub owner_id: UserID,
pub name: Option<String>,
pub group_id: Option<GroupID>,
pub group_min_membership_level: Option<GroupMembershipLevel>,
pub color: Option<String>,
pub logo: Option<String>,
pub owner_following: bool,