mirror of
https://github.com/matrix-org/matrix-rust-sdk.git
synced 2026-05-15 19:45:34 -04:00
refactor(sdk): Move timeline event origin_server_ts and raw_event fields
… from TimelineEventMetadata to Flow because they always exist for remote events, and never for local echoes.
This commit is contained in:
committed by
Jonas Platte
parent
6ce23b17a6
commit
333c4f0644
@@ -58,8 +58,6 @@ impl TimelineInner {
|
||||
) {
|
||||
let meta = TimelineEventMetadata {
|
||||
sender: own_user_id.to_owned(),
|
||||
origin_server_ts: None,
|
||||
raw_event: None,
|
||||
is_own_event: true,
|
||||
relations: None,
|
||||
// FIXME: Should we supply something here for encrypted rooms?
|
||||
@@ -100,15 +98,15 @@ impl TimelineInner {
|
||||
let is_own_event = sender == own_user_id;
|
||||
|
||||
let meta = TimelineEventMetadata {
|
||||
raw_event: Some(raw),
|
||||
sender,
|
||||
origin_server_ts: Some(event.origin_server_ts()),
|
||||
is_own_event,
|
||||
relations: event.relations().cloned(),
|
||||
encryption_info,
|
||||
};
|
||||
let flow = Flow::Remote {
|
||||
event_id: event.event_id().to_owned(),
|
||||
origin_server_ts: event.origin_server_ts(),
|
||||
raw_event: raw,
|
||||
txn_id: event.transaction_id().map(ToOwned::to_owned),
|
||||
position,
|
||||
};
|
||||
@@ -124,6 +122,8 @@ enum Flow {
|
||||
Remote {
|
||||
event_id: OwnedEventId,
|
||||
txn_id: Option<OwnedTransactionId>,
|
||||
origin_server_ts: MilliSecondsSinceUnixEpoch,
|
||||
raw_event: Raw<AnySyncTimelineEvent>,
|
||||
position: TimelineItemPosition,
|
||||
},
|
||||
}
|
||||
@@ -135,12 +135,24 @@ impl Flow {
|
||||
Self::Local { txn_id } => TimelineKey::TransactionId(txn_id.to_owned()),
|
||||
}
|
||||
}
|
||||
|
||||
fn origin_server_ts(&self) -> Option<MilliSecondsSinceUnixEpoch> {
|
||||
match self {
|
||||
Flow::Local { .. } => None,
|
||||
Flow::Remote { origin_server_ts, .. } => Some(*origin_server_ts),
|
||||
}
|
||||
}
|
||||
|
||||
fn raw_event(&self) -> Option<&Raw<AnySyncTimelineEvent>> {
|
||||
match self {
|
||||
Flow::Local { .. } => None,
|
||||
Flow::Remote { raw_event, .. } => Some(raw_event),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
struct TimelineEventMetadata {
|
||||
raw_event: Option<Raw<AnySyncTimelineEvent>>,
|
||||
sender: OwnedUserId,
|
||||
origin_server_ts: Option<MilliSecondsSinceUnixEpoch>,
|
||||
is_own_event: bool,
|
||||
relations: Option<Relations>,
|
||||
encryption_info: Option<EncryptionInfo>,
|
||||
@@ -382,10 +394,10 @@ impl<'a> TimelineEventHandler<'a> {
|
||||
sender: self.meta.sender.to_owned(),
|
||||
content,
|
||||
reactions,
|
||||
origin_server_ts: self.meta.origin_server_ts,
|
||||
origin_server_ts: self.flow.origin_server_ts(),
|
||||
is_own: self.meta.is_own_event,
|
||||
encryption_info: self.meta.encryption_info.clone(),
|
||||
raw: self.meta.raw_event.clone(),
|
||||
raw: self.flow.raw_event().cloned(),
|
||||
};
|
||||
|
||||
let item = Arc::new(TimelineItem::Event(item));
|
||||
@@ -398,7 +410,7 @@ impl<'a> TimelineEventHandler<'a> {
|
||||
Flow::Remote { position: TimelineItemPosition::Start, txn_id: None, .. } => {
|
||||
lock.insert_cloned(0, item);
|
||||
}
|
||||
Flow::Remote { txn_id: Some(txn_id), event_id, position } => {
|
||||
Flow::Remote { txn_id: Some(txn_id), event_id, position, .. } => {
|
||||
if let Some((idx, _old_item)) = find_event(&lock, txn_id) {
|
||||
// TODO: Check whether anything is different about the old and new item?
|
||||
lock.set_cloned(idx, item);
|
||||
|
||||
Reference in New Issue
Block a user