7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 1 | // Copyright 2025 The Matrix.org Foundation C.I.C. |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 2 | // |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 3 | // Licensed under the Apache License, Version 2.0 (the "License"); |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 4 | // you may not use this file except in compliance with the License. |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 5 | // You may obtain a copy of the License at |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 6 | // |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 7 | // http://www.apache.org/licenses/LICENSE-2.0 |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 8 | // |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 9 | // Unless required by applicable law or agreed to in writing, software |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 10 | // distributed under the License is distributed on an "AS IS" BASIS, |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 11 | // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 12 | // See the License for that specific language governing permissions and |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 13 | // limitations under the License. |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 14 | |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 15 | use anyhow::{Context, bail}; |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 16 | use matrix_sdk::IdParseError; |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 17 | use matrix_sdk_ui::timeline::TimelineEventItemId; |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 18 | use ruma::{ |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 19 | EventId, |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 20 | events::{ |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 21 | AnySyncMessageLikeEvent, AnySyncStateEvent, AnySyncTimelineEvent, AnyTimelineEvent, |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 22 | MessageLikeEventContent as RumaMessageLikeEventContent, RedactContent, |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 23 | RedactedStateEventContent, StaticStateEventContent, SyncMessageLikeEvent, SyncStateEvent, |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 24 | TimelineEventType as RumaTimelineEventType, |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 25 | room::{ |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 26 | encrypted, |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 27 | message::{MessageType as RumaMessageType, Relation}, |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 28 | redaction::SyncRoomRedactionEvent, |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 29 | }, |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 30 | }, |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 31 | }; |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 32 | |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 33 | use crate::{ |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 34 | ClientError, |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 35 | room_member::MembershipState, |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 36 | ruma::{MessageType, RtcCallIntent, RtcNotificationType}, |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 37 | utils::Timestamp, |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 38 | }; |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 39 | |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 40 | #[derive(uniffi::Object)] |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 41 | pub struct TimelineEvent(pub(crate) Box<AnySyncTimelineEvent>); |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 42 | |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 43 | #[matrix_sdk_ffi_macros::export] |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 44 | impl TimelineEvent { |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 45 | pub fn event_id(&self) -> String { |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 46 | self.0.event_id().to_string() |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 47 | } |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 48 | |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 49 | pub fn sender_id(&self) -> String { |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 50 | self.0.sender().to_string() |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 51 | } |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 52 | |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 53 | pub fn timestamp(&self) -> Timestamp { |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 54 | self.0.origin_server_ts().into() |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 55 | } |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 56 | |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 57 | pub fn content(&self) -> Result<TimelineEventContent, ClientError> { |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 58 | let content = match &*self.0 { |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 59 | AnySyncTimelineEvent::MessageLike(event) => { |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 60 | TimelineEventContent::MessageLike { content: event.clone().try_into()? } |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 61 | } |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 62 | AnySyncTimelineEvent::State(event) => { |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 63 | TimelineEventContent::State { content: event.clone().try_into()? } |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 64 | } |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 65 | }; |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 66 | Ok(content) |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 67 | } |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 68 | |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 69 | /// Returns the thread root event id for the event, if it's part of a |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 70 | /// thread. |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 71 | pub fn thread_root_event_id(&self) -> Option<String> { |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 72 | match &*self.0 { |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 73 | AnySyncTimelineEvent::MessageLike(event) => { |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 74 | match event.original_content().and_then(|content| content.relation()) { |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 75 | Some(encrypted::Relation::Thread(thread)) => Some(thread.event_id.to_string()), |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 76 | _ => None, |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 77 | } |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 78 | } |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 79 | AnySyncTimelineEvent::State(_) => None, |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 80 | } |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 81 | } |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 82 | } |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 83 | |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 84 | impl From<AnyTimelineEvent> for TimelineEvent { |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 85 | fn from(event: AnyTimelineEvent) -> Self { |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 86 | Self(Box::new(event.into())) |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 87 | } |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 88 | } |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 89 | |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 90 | /// The timeline event type. |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 91 | #[derive(Clone, uniffi::Enum, PartialEq, Eq, Hash)] |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 92 | #[uniffi::export(Eq, Hash)] |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 93 | pub enum TimelineEventType { |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 94 | /// The event is a message-like one and should be displayed as such. |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 95 | MessageLike { value: MessageLikeEventType }, |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 96 | /// The event is a state event, and may or may not be displayed in the |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 97 | /// timeline. |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 98 | State { value: StateEventType }, |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 99 | } |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 100 | |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 101 | impl From<RumaTimelineEventType> for TimelineEventType { |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 102 | fn from(value: RumaTimelineEventType) -> Self { |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 103 | match value { |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 104 | RumaTimelineEventType::Audio => { |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 105 | Self::MessageLike { value: MessageLikeEventType::Audio } |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 106 | } |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 107 | RumaTimelineEventType::File => Self::MessageLike { value: MessageLikeEventType::File }, |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 108 | RumaTimelineEventType::Image => { |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 109 | Self::MessageLike { value: MessageLikeEventType::Image } |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 110 | } |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 111 | RumaTimelineEventType::Video => { |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 112 | Self::MessageLike { value: MessageLikeEventType::Video } |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 113 | } |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 114 | RumaTimelineEventType::Voice => { |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 115 | Self::MessageLike { value: MessageLikeEventType::Voice } |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 116 | } |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 117 | RumaTimelineEventType::Emote => { |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 118 | Self::MessageLike { value: MessageLikeEventType::Emote } |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 119 | } |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 120 | RumaTimelineEventType::Encrypted => { |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 121 | Self::MessageLike { value: MessageLikeEventType::Encrypted } |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 122 | } |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 123 | RumaTimelineEventType::RoomMessage => { |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 124 | Self::MessageLike { value: MessageLikeEventType::RoomMessage } |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 125 | } |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 126 | RumaTimelineEventType::CallAnswer => { |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 127 | Self::MessageLike { value: MessageLikeEventType::CallAnswer } |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 128 | } |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 129 | RumaTimelineEventType::CallInvite => { |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 130 | Self::MessageLike { value: MessageLikeEventType::CallInvite } |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 131 | } |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 132 | RumaTimelineEventType::CallHangup => { |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 133 | Self::MessageLike { value: MessageLikeEventType::CallHangup } |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 134 | } |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 135 | RumaTimelineEventType::CallCandidates => { |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 136 | Self::MessageLike { value: MessageLikeEventType::CallCandidates } |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 137 | } |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 138 | RumaTimelineEventType::CallNegotiate => { |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 139 | Self::MessageLike { value: MessageLikeEventType::CallNegotiate } |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 140 | } |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 141 | RumaTimelineEventType::CallReject => { |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 142 | Self::MessageLike { value: MessageLikeEventType::CallReject } |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 143 | } |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 144 | RumaTimelineEventType::CallSdpStreamMetadataChanged => { |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 145 | Self::MessageLike { value: MessageLikeEventType::CallSdpStreamMetadataChanged } |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 146 | } |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 147 | RumaTimelineEventType::CallSelectAnswer => { |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 148 | Self::MessageLike { value: MessageLikeEventType::CallSelectAnswer } |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 149 | } |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 150 | RumaTimelineEventType::KeyVerificationReady => { |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 151 | Self::MessageLike { value: MessageLikeEventType::KeyVerificationReady } |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 152 | } |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 153 | RumaTimelineEventType::KeyVerificationStart => { |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 154 | Self::MessageLike { value: MessageLikeEventType::KeyVerificationStart } |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 155 | } |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 156 | RumaTimelineEventType::KeyVerificationCancel => { |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 157 | Self::MessageLike { value: MessageLikeEventType::KeyVerificationCancel } |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 158 | } |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 159 | RumaTimelineEventType::KeyVerificationAccept => { |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 160 | Self::MessageLike { value: MessageLikeEventType::KeyVerificationAccept } |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 161 | } |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 162 | RumaTimelineEventType::KeyVerificationKey => { |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 163 | Self::MessageLike { value: MessageLikeEventType::KeyVerificationKey } |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 164 | } |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 165 | RumaTimelineEventType::KeyVerificationMac => { |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 166 | Self::MessageLike { value: MessageLikeEventType::KeyVerificationMac } |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 167 | } |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 168 | RumaTimelineEventType::KeyVerificationDone => { |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 169 | Self::MessageLike { value: MessageLikeEventType::KeyVerificationDone } |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 170 | } |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 171 | RumaTimelineEventType::Location => { |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 172 | Self::MessageLike { value: MessageLikeEventType::Location } |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 173 | } |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 174 | RumaTimelineEventType::Message => { |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 175 | Self::MessageLike { value: MessageLikeEventType::Message } |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 176 | } |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 177 | RumaTimelineEventType::PollStart => { |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 178 | Self::MessageLike { value: MessageLikeEventType::PollStart } |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 179 | } |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 180 | RumaTimelineEventType::UnstablePollStart => { |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 181 | Self::MessageLike { value: MessageLikeEventType::UnstablePollStart } |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 182 | } |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 183 | RumaTimelineEventType::PollResponse => { |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 184 | Self::MessageLike { value: MessageLikeEventType::PollResponse } |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 185 | } |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 186 | RumaTimelineEventType::UnstablePollResponse => { |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 187 | Self::MessageLike { value: MessageLikeEventType::UnstablePollResponse } |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 188 | } |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 189 | RumaTimelineEventType::PollEnd => { |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 190 | Self::MessageLike { value: MessageLikeEventType::PollEnd } |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 191 | } |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 192 | RumaTimelineEventType::UnstablePollEnd => { |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 193 | Self::MessageLike { value: MessageLikeEventType::UnstablePollEnd } |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 194 | } |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 195 | RumaTimelineEventType::Beacon => { |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 196 | Self::MessageLike { value: MessageLikeEventType::Beacon } |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 197 | } |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 198 | RumaTimelineEventType::Reaction => { |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 199 | Self::MessageLike { value: MessageLikeEventType::Reaction } |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 200 | } |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 201 | RumaTimelineEventType::RoomEncrypted => { |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 202 | Self::MessageLike { value: MessageLikeEventType::RoomEncrypted } |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 203 | } |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 204 | RumaTimelineEventType::RoomRedaction => { |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 205 | Self::MessageLike { value: MessageLikeEventType::RoomRedaction } |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 206 | } |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 207 | RumaTimelineEventType::Sticker => { |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 208 | Self::MessageLike { value: MessageLikeEventType::Sticker } |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 209 | } |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 210 | RumaTimelineEventType::CallNotify => { |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 211 | Self::MessageLike { value: MessageLikeEventType::CallNotify } |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 212 | } |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 213 | RumaTimelineEventType::RtcNotification => { |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 214 | Self::MessageLike { value: MessageLikeEventType::RtcNotification } |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 215 | } |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 216 | RumaTimelineEventType::RtcDecline => { |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 217 | Self::MessageLike { value: MessageLikeEventType::RtcDecline } |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 218 | } |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 219 | RumaTimelineEventType::PolicyRuleRoom => { |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 220 | Self::State { value: StateEventType::PolicyRuleRoom } |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 221 | } |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 222 | RumaTimelineEventType::PolicyRuleServer => { |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 223 | Self::State { value: StateEventType::PolicyRuleServer } |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 224 | } |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 225 | RumaTimelineEventType::PolicyRuleUser => { |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 226 | Self::State { value: StateEventType::PolicyRuleUser } |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 227 | } |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 228 | RumaTimelineEventType::RoomAvatar => Self::State { value: StateEventType::RoomAvatar }, |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 229 | RumaTimelineEventType::RoomCanonicalAlias => { |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 230 | Self::State { value: StateEventType::RoomCanonicalAlias } |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 231 | } |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 232 | RumaTimelineEventType::RoomCreate => Self::State { value: StateEventType::RoomCreate }, |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 233 | RumaTimelineEventType::RoomEncryption => { |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 234 | Self::State { value: StateEventType::RoomEncryption } |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 235 | } |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 236 | RumaTimelineEventType::RoomGuestAccess => { |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 237 | Self::State { value: StateEventType::RoomGuestAccess } |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 238 | } |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 239 | RumaTimelineEventType::RoomHistoryVisibility => { |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 240 | Self::State { value: StateEventType::RoomHistoryVisibility } |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 241 | } |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 242 | RumaTimelineEventType::RoomJoinRules => { |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 243 | Self::State { value: StateEventType::RoomJoinRules } |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 244 | } |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 245 | RumaTimelineEventType::RoomMember => { |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 246 | Self::State { value: StateEventType::RoomMemberEvent } |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 247 | } |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 248 | RumaTimelineEventType::RoomLanguage => { |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 249 | Self::State { value: StateEventType::RoomLanguage } |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 250 | } |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 251 | RumaTimelineEventType::RoomName => Self::State { value: StateEventType::RoomName }, |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 252 | RumaTimelineEventType::RoomImagePack => { |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 253 | Self::State { value: StateEventType::RoomImagePack } |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 254 | } |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 255 | RumaTimelineEventType::RoomPinnedEvents => { |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 256 | Self::State { value: StateEventType::RoomPinnedEvents } |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 257 | } |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 258 | RumaTimelineEventType::RoomPowerLevels => { |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 259 | Self::State { value: StateEventType::RoomPowerLevels } |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 260 | } |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 261 | RumaTimelineEventType::RoomServerAcl => { |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 262 | Self::State { value: StateEventType::RoomServerAcl } |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 263 | } |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 264 | RumaTimelineEventType::RoomThirdPartyInvite => { |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 265 | Self::State { value: StateEventType::RoomThirdPartyInvite } |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 266 | } |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 267 | RumaTimelineEventType::RoomTombstone => { |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 268 | Self::State { value: StateEventType::RoomTombstone } |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 269 | } |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 270 | RumaTimelineEventType::RoomTopic => Self::State { value: StateEventType::RoomTopic }, |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 271 | RumaTimelineEventType::SpaceChild => Self::State { value: StateEventType::SpaceChild }, |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 272 | RumaTimelineEventType::SpaceParent => { |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 273 | Self::State { value: StateEventType::SpaceParent } |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 274 | } |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 275 | RumaTimelineEventType::BeaconInfo => Self::State { value: StateEventType::BeaconInfo }, |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 276 | RumaTimelineEventType::CallMember => Self::State { value: StateEventType::CallMember }, |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 277 | RumaTimelineEventType::MemberHints => { |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 278 | Self::State { value: StateEventType::MemberHints } |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 279 | } |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 280 | RumaTimelineEventType::_Custom(_) => { |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 281 | Self::State { value: StateEventType::Custom { value: value.to_string() } } |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 282 | } |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 283 | _ => Self::MessageLike { value: MessageLikeEventType::Other(value.to_string()) }, |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 284 | } |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 285 | } |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 286 | } |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 287 | |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 288 | #[derive(uniffi::Enum)] |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 289 | // A note about this `allow(clippy::large_enum_variant)`. |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 290 | // In order to reduce the size of `TimelineEventContent`, we would need to |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 291 | // put some parts in a `Box`, or an `Arc`. Sadly, it doesn't play well with |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 292 | // UniFFI. We would need to change the `uniffi::Record` of the subtypes into |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 293 | // `uniffi::Object`, which is a radical change. It would simplify the memory |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 294 | // usage, but it would slow down the performance around the FFI border. Thus, |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 295 | // let's consider this is a false-positive lint in this particular case. |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 296 | #[allow(clippy::large_enum_variant)] |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 297 | pub enum TimelineEventContent { |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 298 | MessageLike { content: MessageLikeEventContent }, |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 299 | State { content: StateEventContent }, |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 300 | } |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 301 | |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 302 | #[derive(uniffi::Enum)] |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 303 | pub enum StateEventContent { |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 304 | PolicyRuleRoom, |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 305 | PolicyRuleServer, |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 306 | PolicyRuleUser, |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 307 | RoomAvatar, |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 308 | RoomCanonicalAlias, |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 309 | RoomCreate, |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 310 | RoomEncryption, |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 311 | RoomGuestAccess, |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 312 | RoomHistoryVisibility, |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 313 | RoomJoinRules, |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 314 | RoomMemberContent { user_id: String, membership_state: MembershipState }, |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 315 | RoomName, |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 316 | RoomPinnedEvents, |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 317 | RoomPowerLevels, |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 318 | RoomServerAcl, |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 319 | RoomThirdPartyInvite, |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 320 | RoomTombstone, |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 321 | RoomTopic { topic: String }, |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 322 | SpaceChild, |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 323 | SpaceParent, |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 324 | } |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 325 | |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 326 | impl TryFrom<AnySyncStateEvent> for StateEventContent { |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 327 | type Error = anyhow::Error; |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 328 | |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 329 | fn try_from(value: AnySyncStateEvent) -> anyhow::Result<Self> { |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 330 | let event = match value { |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 331 | AnySyncStateEvent::PolicyRuleRoom(_) => StateEventContent::PolicyRuleRoom, |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 332 | AnySyncStateEvent::PolicyRuleServer(_) => StateEventContent::PolicyRuleServer, |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 333 | AnySyncStateEvent::PolicyRuleUser(_) => StateEventContent::PolicyRuleUser, |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 334 | AnySyncStateEvent::RoomAvatar(_) => StateEventContent::RoomAvatar, |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 335 | AnySyncStateEvent::RoomCanonicalAlias(_) => StateEventContent::RoomCanonicalAlias, |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 336 | AnySyncStateEvent::RoomCreate(_) => StateEventContent::RoomCreate, |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 337 | AnySyncStateEvent::RoomEncryption(_) => StateEventContent::RoomEncryption, |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 338 | AnySyncStateEvent::RoomGuestAccess(_) => StateEventContent::RoomGuestAccess, |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 339 | AnySyncStateEvent::RoomHistoryVisibility(_) => StateEventContent::RoomHistoryVisibility, |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 340 | AnySyncStateEvent::RoomJoinRules(_) => StateEventContent::RoomJoinRules, |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 341 | AnySyncStateEvent::RoomMember(content) => { |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 342 | let state_key = content.state_key().to_string(); |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 343 | let original_content = get_state_event_original_content(content)?; |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 344 | StateEventContent::RoomMemberContent { |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 345 | user_id: state_key, |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 346 | membership_state: original_content.membership.try_into()?, |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 347 | } |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 348 | } |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 349 | AnySyncStateEvent::RoomName(_) => StateEventContent::RoomName, |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 350 | AnySyncStateEvent::RoomPinnedEvents(_) => StateEventContent::RoomPinnedEvents, |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 351 | AnySyncStateEvent::RoomPowerLevels(_) => StateEventContent::RoomPowerLevels, |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 352 | AnySyncStateEvent::RoomServerAcl(_) => StateEventContent::RoomServerAcl, |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 353 | AnySyncStateEvent::RoomThirdPartyInvite(_) => StateEventContent::RoomThirdPartyInvite, |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 354 | AnySyncStateEvent::RoomTombstone(_) => StateEventContent::RoomTombstone, |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 355 | AnySyncStateEvent::RoomTopic(content) => { |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 356 | let content = get_state_event_original_content(content)?; |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 357 | |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 358 | StateEventContent::RoomTopic { topic: content.topic } |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 359 | } |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 360 | AnySyncStateEvent::SpaceChild(_) => StateEventContent::SpaceChild, |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 361 | AnySyncStateEvent::SpaceParent(_) => StateEventContent::SpaceParent, |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 362 | _ => bail!("Unsupported state event: {:?}", value.event_type()), |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 363 | }; |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 364 | Ok(event) |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 365 | } |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 366 | } |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 367 | |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 368 | #[derive(uniffi::Enum)] |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 369 | // A note about this `allow(clippy::large_enum_variant)`. |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 370 | // In order to reduce the size of `MessageLineEventContent`, we would need to |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 371 | // put some parts in a `Box`, or an `Arc`. Sadly, it doesn't play well with |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 372 | // UniFFI. We would need to change the `uniffi::Record` of the subtypes into |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 373 | // `uniffi::Object`, which is a radical change. It would simplify the memory |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 374 | // usage, but it would slow down the performance around the FFI border. Thus, |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 375 | // let's consider this is a false-positive lint in this particular case. |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 376 | #[allow(clippy::large_enum_variant)] |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 377 | pub enum MessageLikeEventContent { |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 378 | CallAnswer, |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 379 | CallInvite, |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 380 | RtcNotification { |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 381 | notification_type: RtcNotificationType, |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 382 | /// The timestamp at which this notification is considered invalid. |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 383 | expiration_ts: Timestamp, |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 384 | /// Soft indication of whether it is an audio or video call. |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 385 | call_intent: Option<RtcCallIntent>, |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 386 | }, |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 387 | CallHangup, |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 388 | CallCandidates, |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 389 | KeyVerificationReady, |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 390 | KeyVerificationStart, |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 391 | KeyVerificationCancel, |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 392 | KeyVerificationAccept, |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 393 | KeyVerificationKey, |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 394 | KeyVerificationMac, |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 395 | KeyVerificationDone, |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 396 | Poll { |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 397 | question: String, |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 398 | }, |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 399 | ReactionContent { |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 400 | related_event_id: String, |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 401 | }, |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 402 | RoomEncrypted, |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 403 | RoomMessage { |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 404 | message_type: MessageType, |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 405 | in_reply_to_event_id: Option<String>, |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 406 | }, |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 407 | RoomRedaction { |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 408 | redacted_event_id: Option<String>, |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 409 | reason: Option<String>, |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 410 | }, |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 411 | Sticker, |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 412 | } |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 413 | |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 414 | impl TryFrom<AnySyncMessageLikeEvent> for MessageLikeEventContent { |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 415 | type Error = anyhow::Error; |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 416 | |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 417 | fn try_from(value: AnySyncMessageLikeEvent) -> anyhow::Result<Self> { |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 418 | let content = match value { |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 419 | AnySyncMessageLikeEvent::CallAnswer(_) => MessageLikeEventContent::CallAnswer, |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 420 | AnySyncMessageLikeEvent::CallInvite(_) => MessageLikeEventContent::CallInvite, |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 421 | AnySyncMessageLikeEvent::RtcNotification(event) => { |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 422 | let origin_server_ts = event.origin_server_ts(); |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 423 | let original_content = get_message_like_event_original_content(event)?; |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 424 | let expiration_ts = original_content.expiration_ts(origin_server_ts, None).into(); |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 425 | MessageLikeEventContent::RtcNotification { |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 426 | notification_type: original_content.notification_type.into(), |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 427 | expiration_ts, |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 428 | call_intent: original_content.call_intent.map(|intent| intent.into()), |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 429 | } |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 430 | } |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 431 | AnySyncMessageLikeEvent::CallHangup(_) => MessageLikeEventContent::CallHangup, |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 432 | AnySyncMessageLikeEvent::CallCandidates(_) => MessageLikeEventContent::CallCandidates, |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 433 | AnySyncMessageLikeEvent::KeyVerificationReady(_) => { |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 434 | MessageLikeEventContent::KeyVerificationReady |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 435 | } |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 436 | AnySyncMessageLikeEvent::KeyVerificationStart(_) => { |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 437 | MessageLikeEventContent::KeyVerificationStart |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 438 | } |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 439 | AnySyncMessageLikeEvent::KeyVerificationCancel(_) => { |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 440 | MessageLikeEventContent::KeyVerificationCancel |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 441 | } |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 442 | AnySyncMessageLikeEvent::KeyVerificationAccept(_) => { |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 443 | MessageLikeEventContent::KeyVerificationAccept |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 444 | } |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 445 | AnySyncMessageLikeEvent::KeyVerificationKey(_) => { |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 446 | MessageLikeEventContent::KeyVerificationKey |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 447 | } |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 448 | AnySyncMessageLikeEvent::KeyVerificationMac(_) => { |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 449 | MessageLikeEventContent::KeyVerificationMac |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 450 | } |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 451 | AnySyncMessageLikeEvent::KeyVerificationDone(_) => { |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 452 | MessageLikeEventContent::KeyVerificationDone |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 453 | } |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 454 | AnySyncMessageLikeEvent::UnstablePollStart(content) => { |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 455 | let original_content = get_message_like_event_original_content(content)?; |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 456 | MessageLikeEventContent::Poll { |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 457 | question: original_content.poll_start().question.text.clone(), |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 458 | } |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 459 | } |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 460 | AnySyncMessageLikeEvent::Reaction(content) => { |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 461 | let original_content = get_message_like_event_original_content(content)?; |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 462 | MessageLikeEventContent::ReactionContent { |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 463 | related_event_id: original_content.relates_to.event_id.to_string(), |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 464 | } |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 465 | } |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 466 | AnySyncMessageLikeEvent::RoomEncrypted(_) => MessageLikeEventContent::RoomEncrypted, |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 467 | AnySyncMessageLikeEvent::RoomMessage(content) => { |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 468 | let original_content = get_message_like_event_original_content(content)?; |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 469 | let in_reply_to_event_id = |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 470 | original_content.relates_to.and_then(|relation| match relation { |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 471 | Relation::Reply(reply) => Some(reply.in_reply_to.event_id.to_string()), |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 472 | _ => None, |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 473 | }); |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 474 | MessageLikeEventContent::RoomMessage { |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 475 | message_type: original_content.msgtype.try_into()?, |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 476 | in_reply_to_event_id, |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 477 | } |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 478 | } |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 479 | AnySyncMessageLikeEvent::RoomRedaction(c) => { |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 480 | let (redacted_event_id, reason) = match c { |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 481 | SyncRoomRedactionEvent::Original(o) => { |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 482 | let id = |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 483 | if o.content.redacts.is_some() { o.content.redacts } else { o.redacts }; |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 484 | (id.map(|id| id.to_string()), o.content.reason) |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 485 | } |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 486 | SyncRoomRedactionEvent::Redacted(_) => (None, None), |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 487 | }; |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 488 | MessageLikeEventContent::RoomRedaction { redacted_event_id, reason } |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 489 | } |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 490 | AnySyncMessageLikeEvent::Sticker(_) => MessageLikeEventContent::Sticker, |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 491 | _ => bail!("Unsupported Event Type: {:?}", value.event_type()), |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 492 | }; |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 493 | Ok(content) |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 494 | } |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 495 | } |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 496 | |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 497 | fn get_state_event_original_content<C>(event: SyncStateEvent<C>) -> anyhow::Result<C> |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 498 | where |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 499 | C: StaticStateEventContent + RedactContent + Clone, |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 500 | <C as RedactContent>::Redacted: RedactedStateEventContent<StateKey = C::StateKey>, |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 501 | { |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 502 | let original_content = |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 503 | event.as_original().context("Failed to get original content")?.content.clone(); |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 504 | Ok(original_content) |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 505 | } |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 506 | |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 507 | fn get_message_like_event_original_content<C>(event: SyncMessageLikeEvent<C>) -> anyhow::Result<C> |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 508 | where |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 509 | C: RumaMessageLikeEventContent + RedactContent + Clone, |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 510 | <C as ruma::events::RedactContent>::Redacted: ruma::events::RedactedMessageLikeEventContent, |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 511 | { |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 512 | let original_content = |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 513 | event.as_original().context("Failed to get original content")?.content.clone(); |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 514 | Ok(original_content) |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 515 | } |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 516 | |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 517 | #[derive(Clone, uniffi::Enum, PartialEq, Eq, Hash)] |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 518 | pub enum StateEventType { |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 519 | BeaconInfo, |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 520 | CallMember, |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 521 | MemberHints, |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 522 | PolicyRuleRoom, |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 523 | PolicyRuleServer, |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 524 | PolicyRuleUser, |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 525 | RoomAvatar, |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 526 | RoomCanonicalAlias, |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 527 | RoomCreate, |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 528 | RoomEncryption, |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 529 | RoomGuestAccess, |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 530 | RoomHistoryVisibility, |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 531 | RoomImagePack, |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 532 | RoomJoinRules, |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 533 | RoomMemberEvent, |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 534 | RoomLanguage, |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 535 | RoomName, |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 536 | RoomPinnedEvents, |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 537 | RoomPowerLevels, |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 538 | RoomServerAcl, |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 539 | RoomThirdPartyInvite, |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 540 | RoomTombstone, |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 541 | RoomTopic, |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 542 | SpaceChild, |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 543 | SpaceParent, |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 544 | Custom { value: String }, |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 545 | } |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 546 | |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 547 | impl From<StateEventType> for ruma::events::StateEventType { |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 548 | fn from(val: StateEventType) -> Self { |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 549 | match val { |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 550 | StateEventType::BeaconInfo => Self::BeaconInfo, |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 551 | StateEventType::CallMember => Self::CallMember, |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 552 | StateEventType::MemberHints => Self::MemberHints, |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 553 | StateEventType::PolicyRuleRoom => Self::PolicyRuleRoom, |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 554 | StateEventType::PolicyRuleServer => Self::PolicyRuleServer, |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 555 | StateEventType::PolicyRuleUser => Self::PolicyRuleUser, |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 556 | StateEventType::RoomAvatar => Self::RoomAvatar, |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 557 | StateEventType::RoomCanonicalAlias => Self::RoomCanonicalAlias, |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 558 | StateEventType::RoomCreate => Self::RoomCreate, |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 559 | StateEventType::RoomEncryption => Self::RoomEncryption, |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 560 | StateEventType::RoomGuestAccess => Self::RoomGuestAccess, |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 561 | StateEventType::RoomHistoryVisibility => Self::RoomHistoryVisibility, |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 562 | StateEventType::RoomImagePack => Self::RoomImagePack, |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 563 | StateEventType::RoomJoinRules => Self::RoomJoinRules, |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 564 | StateEventType::RoomLanguage => Self::RoomLanguage, |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 565 | StateEventType::RoomMemberEvent => Self::RoomMember, |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 566 | StateEventType::RoomName => Self::RoomName, |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 567 | StateEventType::RoomPinnedEvents => Self::RoomPinnedEvents, |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 568 | StateEventType::RoomPowerLevels => Self::RoomPowerLevels, |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 569 | StateEventType::RoomServerAcl => Self::RoomServerAcl, |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 570 | StateEventType::RoomThirdPartyInvite => Self::RoomThirdPartyInvite, |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 571 | StateEventType::RoomTombstone => Self::RoomTombstone, |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 572 | StateEventType::RoomTopic => Self::RoomTopic, |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 573 | StateEventType::SpaceChild => Self::SpaceChild, |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 574 | StateEventType::SpaceParent => Self::SpaceParent, |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 575 | StateEventType::Custom { value } => value.into(), |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 576 | } |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 577 | } |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 578 | } |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 579 | |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 580 | #[derive(Clone, uniffi::Enum, PartialEq, Eq, Hash)] |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 581 | pub enum MessageLikeEventType { |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 582 | Audio, |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 583 | Beacon, |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 584 | CallAnswer, |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 585 | CallCandidates, |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 586 | CallHangup, |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 587 | CallInvite, |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 588 | CallNegotiate, |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 589 | CallNotify, |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 590 | CallReject, |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 591 | CallSdpStreamMetadataChanged, |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 592 | CallSelectAnswer, |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 593 | Emote, |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 594 | Encrypted, |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 595 | File, |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 596 | Image, |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 597 | KeyVerificationAccept, |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 598 | KeyVerificationCancel, |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 599 | KeyVerificationDone, |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 600 | KeyVerificationKey, |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 601 | KeyVerificationMac, |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 602 | KeyVerificationReady, |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 603 | KeyVerificationStart, |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 604 | Location, |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 605 | Message, |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 606 | PollEnd, |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 607 | PollResponse, |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 608 | PollStart, |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 609 | Reaction, |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 610 | RoomEncrypted, |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 611 | RoomMessage, |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 612 | RoomRedaction, |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 613 | RtcDecline, |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 614 | RtcNotification, |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 615 | Sticker, |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 616 | UnstablePollEnd, |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 617 | UnstablePollResponse, |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 618 | UnstablePollStart, |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 619 | Video, |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 620 | Voice, |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 621 | Other(String), |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 622 | } |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 623 | |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 624 | impl From<MessageLikeEventType> for ruma::events::MessageLikeEventType { |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 625 | fn from(val: MessageLikeEventType) -> Self { |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 626 | match val { |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 627 | MessageLikeEventType::Audio => Self::Audio, |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 628 | MessageLikeEventType::File => Self::File, |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 629 | MessageLikeEventType::Image => Self::Image, |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 630 | MessageLikeEventType::Video => Self::Video, |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 631 | MessageLikeEventType::Voice => Self::Voice, |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 632 | MessageLikeEventType::Beacon => Self::Beacon, |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 633 | MessageLikeEventType::CallAnswer => Self::CallAnswer, |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 634 | MessageLikeEventType::CallCandidates => Self::CallCandidates, |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 635 | MessageLikeEventType::CallInvite => Self::CallInvite, |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 636 | MessageLikeEventType::CallHangup => Self::CallHangup, |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 637 | MessageLikeEventType::CallNegotiate => Self::CallNegotiate, |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 638 | MessageLikeEventType::CallNotify => Self::CallNotify, |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 639 | MessageLikeEventType::CallReject => Self::CallReject, |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 640 | MessageLikeEventType::CallSdpStreamMetadataChanged => { |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 641 | Self::CallSdpStreamMetadataChanged |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 642 | } |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 643 | MessageLikeEventType::CallSelectAnswer => Self::CallSelectAnswer, |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 644 | MessageLikeEventType::Emote => Self::Emote, |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 645 | MessageLikeEventType::Encrypted => Self::Encrypted, |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 646 | MessageLikeEventType::KeyVerificationReady => Self::KeyVerificationReady, |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 647 | MessageLikeEventType::KeyVerificationStart => Self::KeyVerificationStart, |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 648 | MessageLikeEventType::KeyVerificationCancel => Self::KeyVerificationCancel, |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 649 | MessageLikeEventType::KeyVerificationAccept => Self::KeyVerificationAccept, |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 650 | MessageLikeEventType::KeyVerificationKey => Self::KeyVerificationKey, |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 651 | MessageLikeEventType::KeyVerificationMac => Self::KeyVerificationMac, |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 652 | MessageLikeEventType::KeyVerificationDone => Self::KeyVerificationDone, |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 653 | MessageLikeEventType::Location => Self::Location, |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 654 | MessageLikeEventType::Message => Self::Message, |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 655 | MessageLikeEventType::Reaction => Self::Reaction, |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 656 | MessageLikeEventType::RoomEncrypted => Self::RoomEncrypted, |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 657 | MessageLikeEventType::RoomMessage => Self::RoomMessage, |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 658 | MessageLikeEventType::RoomRedaction => Self::RoomRedaction, |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 659 | MessageLikeEventType::RtcDecline => Self::RtcDecline, |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 660 | MessageLikeEventType::Sticker => Self::Sticker, |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 661 | MessageLikeEventType::PollEnd => Self::PollEnd, |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 662 | MessageLikeEventType::PollResponse => Self::PollResponse, |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 663 | MessageLikeEventType::PollStart => Self::PollStart, |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 664 | MessageLikeEventType::RtcNotification => Self::RtcNotification, |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 665 | MessageLikeEventType::UnstablePollEnd => Self::UnstablePollEnd, |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 666 | MessageLikeEventType::UnstablePollResponse => Self::UnstablePollResponse, |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 667 | MessageLikeEventType::UnstablePollStart => Self::UnstablePollStart, |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 668 | MessageLikeEventType::Other(msgtype) => Self::from(msgtype), |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 669 | } |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 670 | } |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 671 | } |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 672 | |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 673 | #[derive(Debug, PartialEq, Clone, uniffi::Enum)] |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 674 | pub enum RoomMessageEventMessageType { |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 675 | Audio, |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 676 | Emote, |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 677 | File, |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 678 | #[cfg(feature = "unstable-msc4274")] |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 679 | Gallery, |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 680 | Image, |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 681 | Location, |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 682 | Notice, |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 683 | ServerNotice, |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 684 | Text, |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 685 | Video, |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 686 | VerificationRequest, |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 687 | Other, |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 688 | } |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 689 | |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 690 | impl From<RumaMessageType> for RoomMessageEventMessageType { |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 691 | fn from(val: ruma::events::room::message::MessageType) -> Self { |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 692 | match val { |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 693 | RumaMessageType::Audio { .. } => Self::Audio, |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 694 | RumaMessageType::Emote { .. } => Self::Emote, |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 695 | RumaMessageType::File { .. } => Self::File, |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 696 | #[cfg(feature = "unstable-msc4274")] |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 697 | RumaMessageType::Gallery { .. } => Self::Gallery, |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 698 | RumaMessageType::Image { .. } => Self::Image, |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 699 | RumaMessageType::Location { .. } => Self::Location, |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 700 | RumaMessageType::Notice { .. } => Self::Notice, |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 701 | RumaMessageType::ServerNotice { .. } => Self::ServerNotice, |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 702 | RumaMessageType::Text { .. } => Self::Text, |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 703 | RumaMessageType::Video { .. } => Self::Video, |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 704 | RumaMessageType::VerificationRequest { .. } => Self::VerificationRequest, |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 705 | _ => Self::Other, |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 706 | } |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 707 | } |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 708 | } |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 709 | |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 710 | /// Contains the 2 possible identifiers of an event, either it has a remote |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 711 | /// event id or a local transaction id, never both or none. |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 712 | #[derive(Clone, uniffi::Enum)] |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 713 | pub enum EventOrTransactionId { |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 714 | EventId { event_id: String }, |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 715 | TransactionId { transaction_id: String }, |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 716 | } |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 717 | |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 718 | impl From<TimelineEventItemId> for EventOrTransactionId { |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 719 | fn from(value: TimelineEventItemId) -> Self { |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 720 | match value { |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 721 | TimelineEventItemId::EventId(event_id) => { |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 722 | EventOrTransactionId::EventId { event_id: event_id.to_string() } |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 723 | } |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 724 | TimelineEventItemId::TransactionId(transaction_id) => { |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 725 | EventOrTransactionId::TransactionId { transaction_id: transaction_id.to_string() } |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 726 | } |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 727 | } |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 728 | } |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 729 | } |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 730 | |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 731 | impl TryFrom<EventOrTransactionId> for TimelineEventItemId { |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 732 | type Error = IdParseError; |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 733 | fn try_from(value: EventOrTransactionId) -> Result<Self, Self::Error> { |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 734 | match value { |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 735 | EventOrTransactionId::EventId { event_id } => { |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 736 | Ok(TimelineEventItemId::EventId(EventId::parse(event_id)?)) |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 737 | } |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 738 | EventOrTransactionId::TransactionId { transaction_id } => { |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 739 | Ok(TimelineEventItemId::TransactionId(transaction_id.into())) |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 740 | } |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 741 | } |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 742 | } |
7ff8adafe9e4 | atagen | 2026-10-22 12:30 UTC | 743 | } |