1
0
mirror of https://gitlab.com/comunic/comunicapiv3 synced 2024-12-28 14:38:52 +00:00

Sort the list of memberships

This commit is contained in:
Pierre HUBERT 2020-07-13 11:44:37 +02:00
parent b5bcb3e8c7
commit 748fa64609
4 changed files with 31 additions and 3 deletions

View File

@ -4,7 +4,7 @@
use crate::data::user::UserID; use crate::data::user::UserID;
#[derive(Debug)] #[derive(Debug, PartialEq, Eq)]
pub struct Conversation { pub struct Conversation {
pub id: u64, pub id: u64,
pub owner_id: UserID, pub owner_id: UserID,

View File

@ -4,6 +4,7 @@
use crate::data::user::UserID; use crate::data::user::UserID;
#[derive(PartialEq, Eq)]
pub struct Friend { pub struct Friend {
pub friend_id: UserID, pub friend_id: UserID,
pub accepted: bool, pub accepted: bool,

View File

@ -2,12 +2,37 @@
//! //!
//! @author Pierre Hubert //! @author Pierre Hubert
use crate::data::friend::Friend; use std::cmp::Ordering;
use crate::data::conversation::Conversation; use crate::data::conversation::Conversation;
use crate::data::friend::Friend;
use crate::data::group_id::GroupID; use crate::data::group_id::GroupID;
#[derive(PartialEq, Eq)]
pub enum UserMembership { pub enum UserMembership {
Group(GroupID, u64), Group(GroupID, u64),
Friend(Friend), Friend(Friend),
Conversation(Conversation) Conversation(Conversation),
}
impl UserMembership {
pub fn last_active(&self) -> u64 {
match self {
UserMembership::Group(_, last_active) => *last_active,
UserMembership::Friend(f) => f.last_activity_time,
UserMembership::Conversation(c) => c.last_active,
}
}
}
impl PartialOrd for UserMembership {
fn partial_cmp(&self, other: &Self) -> Option<Ordering> {
self.last_active().partial_cmp(&other.last_active())
}
}
impl Ord for UserMembership {
fn cmp(&self, other: &Self) -> Ordering {
self.last_active().cmp(&other.last_active())
}
} }

View File

@ -30,5 +30,7 @@ pub fn get_user_memberships(user_id: &UserID) -> ResultBoxError<Vec<UserMembersh
list.push(UserMembership::Conversation(conv)) list.push(UserMembership::Conversation(conv))
} }
list.sort_by(|a, b| b.cmp(a));
Ok(list) Ok(list)
} }