Skip to content

Commit 73daec3

Browse files
authored
Merge pull request #810 from gnunicorn/expose-invite-details
feat(sdk): Expose details of invite for invited room
2 parents 771c33d + d9f3b25 commit 73daec3

File tree

3 files changed

+67
-3
lines changed

3 files changed

+67
-3
lines changed

Diff for: crates/matrix-sdk-base/src/rooms/members.rs

+5
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,11 @@ impl RoomMember {
4646
self.event.user_id()
4747
}
4848

49+
/// Get the original member event
50+
pub fn event(&self) -> &Arc<MemberEvent> {
51+
&self.event
52+
}
53+
4954
/// Get the display name of the member if there is one.
5055
pub fn display_name(&self) -> Option<&str> {
5156
if let Some(p) = self.profile.as_ref() {

Diff for: crates/matrix-sdk-common/src/deserialized_responses.rs

+24-2
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
use std::collections::BTreeMap;
1+
use std::{borrow::Borrow, collections::BTreeMap};
22

33
use ruma::{
44
api::client::{
@@ -16,7 +16,8 @@ use ruma::{
1616
AnyRoomEvent, AnySyncRoomEvent,
1717
},
1818
serde::Raw,
19-
DeviceKeyAlgorithm, OwnedDeviceId, OwnedEventId, OwnedRoomId, OwnedUserId, UserId,
19+
DeviceKeyAlgorithm, EventId, MilliSecondsSinceUnixEpoch, OwnedDeviceId, OwnedEventId,
20+
OwnedRoomId, OwnedUserId, UserId,
2021
};
2122
use serde::{Deserialize, Serialize};
2223

@@ -312,6 +313,27 @@ impl MemberEvent {
312313
MemberEvent::Stripped(e) => Some(&e.content),
313314
}
314315
}
316+
/// The sender of this event.
317+
pub fn sender(&self) -> &UserId {
318+
match self {
319+
MemberEvent::Sync(e) => e.sender(),
320+
MemberEvent::Stripped(e) => e.sender.borrow(),
321+
}
322+
}
323+
/// The ID of this event.
324+
pub fn event_id(&self) -> Option<&EventId> {
325+
match self {
326+
MemberEvent::Sync(e) => Some(e.event_id()),
327+
MemberEvent::Stripped(_) => None,
328+
}
329+
}
330+
/// The Server Timestamp of this event.
331+
pub fn origin_server_ts(&self) -> Option<MilliSecondsSinceUnixEpoch> {
332+
match self {
333+
MemberEvent::Sync(e) => Some(e.origin_server_ts()),
334+
MemberEvent::Stripped(_) => None,
335+
}
336+
}
315337

316338
/// The membership state of the user
317339
pub fn membership(&self) -> &MembershipState {

Diff for: crates/matrix-sdk/src/room/invited.rs

+38-1
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
11
use std::ops::Deref;
22

3-
use crate::{room::Common, BaseRoom, Client, Result, RoomType};
3+
use thiserror::Error;
44

5+
use crate::{room::Common, BaseRoom, Client, Error, Result, RoomMember, RoomType};
56
/// A room in the invited state.
67
///
78
/// This struct contains all methods specific to a `Room` with type
@@ -12,6 +13,24 @@ pub struct Invited {
1213
pub(crate) inner: Common,
1314
}
1415

16+
/// Details of the (latest) invite.
17+
#[derive(Debug, Clone)]
18+
pub struct Invite {
19+
/// Who has been invited.
20+
pub invitee: RoomMember,
21+
/// Who sent the invite.
22+
pub inviter: Option<RoomMember>,
23+
}
24+
25+
#[derive(Error, Debug)]
26+
pub enum InvitationError {
27+
/// The client isn't logged in.
28+
#[error("The client isn't authenticated")]
29+
NotAuthenticated,
30+
#[error("No membership event found")]
31+
EventMissing,
32+
}
33+
1534
impl Invited {
1635
/// Create a new `room::Invited` if the underlying `Room` has type
1736
/// `RoomType::Invited`.
@@ -38,6 +57,24 @@ impl Invited {
3857
pub async fn accept_invitation(&self) -> Result<()> {
3958
self.inner.join().await
4059
}
60+
61+
/// The membership details of the (latest) invite for this room.
62+
pub async fn invite_details(&self) -> Result<Invite> {
63+
let user_id = self
64+
.inner
65+
.client
66+
.user_id()
67+
.ok_or_else(|| Error::UnknownError(Box::new(InvitationError::NotAuthenticated)))?;
68+
let invitee = self
69+
.inner
70+
.get_member(user_id)
71+
.await?
72+
.ok_or_else(|| Error::UnknownError(Box::new(InvitationError::EventMissing)))?;
73+
let event = invitee.event();
74+
let inviter_id = event.sender();
75+
let inviter = self.inner.get_member(inviter_id).await?;
76+
Ok(Invite { invitee, inviter })
77+
}
4178
}
4279

4380
impl Deref for Invited {

0 commit comments

Comments
 (0)