mirror of
https://github.com/matrix-org/matrix-rust-sdk.git
synced 2026-05-19 14:19:06 -04:00
feat(sliding-sync): properly handle all timeline event types
This commit is contained in:
@@ -61,7 +61,7 @@ impl SlidingSyncState {
|
||||
{
|
||||
let current_timeline = self.current_timeline.clone();
|
||||
let handle = tokio::spawn(async move {
|
||||
let timeline = room.timeline().await;
|
||||
let timeline = room.timeline().await.unwrap();
|
||||
let listener = timeline.stream();
|
||||
pin_mut!(listener);
|
||||
while let Some(diff) = listener.next().await {
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
use std::collections::BTreeMap;
|
||||
|
||||
use chrono::{offset::Local, DateTime};
|
||||
use matrix_sdk::room::timeline::TimelineItemContent;
|
||||
use tuirealm::{
|
||||
command::{Cmd, CmdResult},
|
||||
event::{Key, KeyEvent, KeyModifiers},
|
||||
@@ -74,18 +75,56 @@ impl Details {
|
||||
.lock_ref()
|
||||
.iter()
|
||||
.filter_map(|t| t.as_event()) // we ignore virtual events
|
||||
.filter_map(|e| e.content().as_message().map(|m| (e, m)))
|
||||
.map(|(e, m)| {
|
||||
format!(
|
||||
"[{}] {}: {}",
|
||||
e.origin_server_ts()
|
||||
.and_then(|r| r.to_system_time())
|
||||
.map(|s| DateTime::<Local>::from(s).format("%Y-%m-%dT%T").to_string())
|
||||
.unwrap_or_default(),
|
||||
e.sender(),
|
||||
m.body()
|
||||
)
|
||||
})
|
||||
.map(|e|
|
||||
match e.content() {
|
||||
TimelineItemContent::Message(m) => format!(
|
||||
"[{}] {}: {}",
|
||||
e.origin_server_ts()
|
||||
.and_then(|r| r.to_system_time())
|
||||
.map(|s| DateTime::<Local>::from(s).format("%Y-%m-%dT%T").to_string())
|
||||
.unwrap_or_default(),
|
||||
e.sender(),
|
||||
m.body()
|
||||
),
|
||||
TimelineItemContent::RedactedMessage => format!(
|
||||
"[{}] {} - redacted -",
|
||||
e.origin_server_ts()
|
||||
.and_then(|r| r.to_system_time())
|
||||
.map(|s| DateTime::<Local>::from(s).format("%Y-%m-%dT%T").to_string())
|
||||
.unwrap_or_default(),
|
||||
e.sender(),
|
||||
),
|
||||
TimelineItemContent::UnableToDecrypt(_) => format!(
|
||||
"[{}] {} - unable to decrypt -",
|
||||
e.origin_server_ts()
|
||||
.and_then(|r| r.to_system_time())
|
||||
.map(|s| DateTime::<Local>::from(s).format("%Y-%m-%dT%T").to_string())
|
||||
.unwrap_or_default(),
|
||||
e.sender(),
|
||||
),
|
||||
TimelineItemContent::FailedToParseState { event_type, state_key, error }=> format!(
|
||||
"[{}] {} - failed to parse {}({}): {}",
|
||||
e.origin_server_ts()
|
||||
.and_then(|r| r.to_system_time())
|
||||
.map(|s| DateTime::<Local>::from(s).format("%Y-%m-%dT%T").to_string())
|
||||
.unwrap_or_default(),
|
||||
e.sender(),
|
||||
event_type,
|
||||
state_key,
|
||||
error,
|
||||
),
|
||||
TimelineItemContent::FailedToParseMessageLike { event_type, error } => format!(
|
||||
"[{}] {} - failed to parse {}: {}",
|
||||
e.origin_server_ts()
|
||||
.and_then(|r| r.to_system_time())
|
||||
.map(|s| DateTime::<Local>::from(s).format("%Y-%m-%dT%T").to_string())
|
||||
.unwrap_or_default(),
|
||||
e.sender(),
|
||||
event_type,
|
||||
error,
|
||||
),
|
||||
}
|
||||
)
|
||||
.collect();
|
||||
self.current_room_timeline = timeline;
|
||||
self.name = Some(name);
|
||||
|
||||
Reference in New Issue
Block a user