atagen

macltok

public
Star0
Watch0
a912b21d0811764a7efef2f04b4c3fce8341b536
3
ssh://brewery@pls.lobotomise.me:33/atagen/macltok.git

Blame: src/normalise/member.rs

21b9227729a4atagen2026-10-25 11:03 UTC1
use matrix_sdk::{Room, room::RoomMember};
21b9227729a4atagen2026-10-25 11:03 UTC2
use ruma::{OwnedUserId, events::room::member::MembershipState};
96fdf90aacd6atagen2026-09-08 08:24 UTC3
21b9227729a4atagen2026-10-25 11:03 UTC4
use crate::{MediaId, MemberMembership, MemberSummary, Sender};
96fdf90aacd6atagen2026-09-08 08:24 UTC5
96fdf90aacd6atagen2026-09-08 08:24 UTC6
pub(crate) fn member_summary(member: RoomMember) -> MemberSummary {
96fdf90aacd6atagen2026-09-08 08:24 UTC7
    MemberSummary {
96fdf90aacd6atagen2026-09-08 08:24 UTC8
        user_id: member.user_id().to_owned(),
96fdf90aacd6atagen2026-09-08 08:24 UTC9
        name: member.name().to_owned(),
96fdf90aacd6atagen2026-09-08 08:24 UTC10
        display_name: member.display_name().map(ToOwned::to_owned),
5d2974de5826atagen2026-10-08 11:29 UTC11
        avatar: member.avatar_url().map(MediaId::plain),
96fdf90aacd6atagen2026-09-08 08:24 UTC12
        membership: match member.membership() {
96fdf90aacd6atagen2026-09-08 08:24 UTC13
            MembershipState::Join => MemberMembership::Joined,
96fdf90aacd6atagen2026-09-08 08:24 UTC14
            MembershipState::Invite => MemberMembership::Invited,
96fdf90aacd6atagen2026-09-08 08:24 UTC15
            MembershipState::Leave => MemberMembership::Left,
96fdf90aacd6atagen2026-09-08 08:24 UTC16
            MembershipState::Knock => MemberMembership::Knocked,
96fdf90aacd6atagen2026-09-08 08:24 UTC17
            MembershipState::Ban => MemberMembership::Banned,
96fdf90aacd6atagen2026-09-08 08:24 UTC18
            value => MemberMembership::Custom(value.to_string()),
96fdf90aacd6atagen2026-09-08 08:24 UTC19
        },
96fdf90aacd6atagen2026-09-08 08:24 UTC20
        own: member.is_account_user(),
96fdf90aacd6atagen2026-09-08 08:24 UTC21
        name_ambiguous: member.name_ambiguous(),
96fdf90aacd6atagen2026-09-08 08:24 UTC22
        ignored: member.is_ignored(),
96fdf90aacd6atagen2026-09-08 08:24 UTC23
        service: member.is_service_member(),
96fdf90aacd6atagen2026-09-08 08:24 UTC24
    }
96fdf90aacd6atagen2026-09-08 08:24 UTC25
}
21b9227729a4atagen2026-10-25 11:03 UTC26
b34c2df6d896atagen2026-10-25 13:52 UTC27
/// fetches the member list when it isn't synced yet, and settles for the store when that fails
21b9227729a4atagen2026-10-25 11:03 UTC28
pub(crate) async fn member_sender(room: &Room, user_id: &OwnedUserId) -> Option<Sender> {
b34c2df6d896atagen2026-10-25 13:52 UTC29
    match room.get_member(user_id).await {
b34c2df6d896atagen2026-10-25 13:52 UTC30
        Ok(Some(member)) => Some(sender(user_id, &member)),
b34c2df6d896atagen2026-10-25 13:52 UTC31
        _ => stored_member_sender(room, user_id).await,
b34c2df6d896atagen2026-10-25 13:52 UTC32
    }
b34c2df6d896atagen2026-10-25 13:52 UTC33
}
b34c2df6d896atagen2026-10-25 13:52 UTC34
b34c2df6d896atagen2026-10-25 13:52 UTC35
/// what the state store already knows, without asking the server
8127bd8b03daatagen2026-10-27 03:57 UTC36
pub(crate) async fn stored_member_sender(room: &Room, user_id: &OwnedUserId) -> Option<Sender> {
b34c2df6d896atagen2026-10-25 13:52 UTC37
    let member = room.get_member_no_sync(user_id).await.ok().flatten()?;
b34c2df6d896atagen2026-10-25 13:52 UTC38
    Some(sender(user_id, &member))
b34c2df6d896atagen2026-10-25 13:52 UTC39
}
b34c2df6d896atagen2026-10-25 13:52 UTC40
b34c2df6d896atagen2026-10-25 13:52 UTC41
fn sender(user_id: &OwnedUserId, member: &RoomMember) -> Sender {
b34c2df6d896atagen2026-10-25 13:52 UTC42
    Sender {
21b9227729a4atagen2026-10-25 11:03 UTC43
        user_id: user_id.clone(),
21b9227729a4atagen2026-10-25 11:03 UTC44
        display_name: member.display_name().map(str::to_owned),
21b9227729a4atagen2026-10-25 11:03 UTC45
        avatar: member.avatar_url().map(MediaId::plain),
21b9227729a4atagen2026-10-25 11:03 UTC46
        name_ambiguous: member.name_ambiguous(),
b34c2df6d896atagen2026-10-25 13:52 UTC47
    }
21b9227729a4atagen2026-10-25 11:03 UTC48
}