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:
@ -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()
|
||||
}
|
||||
|
||||
|
@ -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
|
||||
|
@ -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,
|
||||
|
Reference in New Issue
Block a user