[fractal] room: Move count_as_unread as a method of Event
- From: Julian Sparber <jsparber src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [fractal] room: Move count_as_unread as a method of Event
- Date: Thu, 15 Sep 2022 10:23:17 +0000 (UTC)
commit b884635efad6b767b428adbc316ad56bfff99484
Author: Kévin Commaille <zecakeh tedomum fr>
Date: Fri Jul 15 10:26:29 2022 +0200
room: Move count_as_unread as a method of Event
Reduce boilerplate when calling the method
src/session/room/event/mod.rs | 2 +-
src/session/room/event/supported_event.rs | 40 ++++++++++++++++++++++++++++
src/session/room/mod.rs | 44 +++++--------------------------
3 files changed, 47 insertions(+), 39 deletions(-)
---
diff --git a/src/session/room/event/mod.rs b/src/session/room/event/mod.rs
index e199baf66..0ce3daf7b 100644
--- a/src/session/room/event/mod.rs
+++ b/src/session/room/event/mod.rs
@@ -13,7 +13,7 @@ use super::{
mod supported_event;
mod unsupported_event;
-pub use supported_event::SupportedEvent;
+pub use supported_event::{count_as_unread, SupportedEvent};
pub use unsupported_event::UnsupportedEvent;
#[derive(Clone, Debug, glib::Boxed)]
diff --git a/src/session/room/event/supported_event.rs b/src/session/room/event/supported_event.rs
index b3549b4ff..367f55f74 100644
--- a/src/session/room/event/supported_event.rs
+++ b/src/session/room/event/supported_event.rs
@@ -619,4 +619,44 @@ impl SupportedEvent {
_ => true,
}
}
+
+ /// Whether this `SupportedEvent` can count as an unread message.
+ ///
+ /// This follows the algorithm in [MSC2654], excluding events that we don't
+ /// show in the timeline.
+ ///
+ /// [MSC2654]: https://github.com/matrix-org/matrix-spec-proposals/pull/2654
+ pub fn counts_as_unread(&self) -> bool {
+ count_as_unread(&self.matrix_event())
+ }
+}
+
+/// Whether the given event can count as an unread message.
+///
+/// This follows the algorithm in [MSC2654], excluding events that we don't
+/// show in the timeline.
+///
+/// [MSC2654]: https://github.com/matrix-org/matrix-spec-proposals/pull/2654
+pub fn count_as_unread(event: &AnySyncTimelineEvent) -> bool {
+ match event {
+ AnySyncTimelineEvent::MessageLike(message_event) => match message_event {
+ AnySyncMessageLikeEvent::RoomMessage(SyncMessageLikeEvent::Original(message)) => {
+ if matches!(message.content.msgtype, MessageType::Notice(_)) {
+ return false;
+ }
+
+ if matches!(message.content.relates_to, Some(Relation::Replacement(_))) {
+ return false;
+ }
+
+ true
+ }
+ AnySyncMessageLikeEvent::Sticker(SyncMessageLikeEvent::Original(_)) => true,
+ _ => false,
+ },
+ AnySyncTimelineEvent::State(AnySyncStateEvent::RoomTombstone(
+ SyncStateEvent::Original(_),
+ )) => true,
+ _ => false,
+ }
}
diff --git a/src/session/room/mod.rs b/src/session/room/mod.rs
index eb424c679..92f627d61 100644
--- a/src/session/room/mod.rs
+++ b/src/session/room/mod.rs
@@ -26,17 +26,15 @@ use matrix_sdk::{
receipt::{ReceiptEventContent, ReceiptType},
room::{
member::MembershipState,
- message::{MessageType, Relation},
name::RoomNameEventContent,
redaction::{OriginalSyncRoomRedactionEvent, RoomRedactionEventContent},
topic::RoomTopicEventContent,
},
room_key::ToDeviceRoomKeyEventContent,
tag::{TagInfo, TagName},
- AnyRoomAccountDataEvent, AnyStrippedStateEvent, AnySyncMessageLikeEvent,
- AnySyncStateEvent, AnySyncTimelineEvent, EventContent, MessageLikeEventType,
- MessageLikeUnsigned, OriginalSyncMessageLikeEvent, StateEventType,
- SyncMessageLikeEvent, SyncStateEvent, ToDeviceEvent,
+ AnyRoomAccountDataEvent, AnyStrippedStateEvent, AnySyncStateEvent,
+ AnySyncTimelineEvent, EventContent, MessageLikeEventType, MessageLikeUnsigned,
+ OriginalSyncMessageLikeEvent, StateEventType, SyncStateEvent, ToDeviceEvent,
},
serde::Raw,
EventId, MilliSecondsSinceUnixEpoch, OwnedEventId, OwnedRoomId, OwnedUserId, RoomId,
@@ -885,7 +883,7 @@ impl Room {
}
// The event is older than the read receipt so it has been read.
- if count_as_unread(&event.matrix_event())
+ if event.counts_as_unread()
&& event.origin_server_ts() <= read_receipt.origin_server_ts()
{
return Some(event.to_owned());
@@ -981,7 +979,7 @@ impl Room {
}
// The user hasn't read the latest message.
- if count_as_unread(&event.matrix_event()) {
+ if event.counts_as_unread() {
return false;
}
}
@@ -1664,7 +1662,7 @@ impl Room {
let mut latest_unread = self.latest_unread();
for event in events {
- if count_as_unread(event) {
+ if event::count_as_unread(event) {
latest_unread = latest_unread.max(event.origin_server_ts().get().into());
break;
}
@@ -1744,33 +1742,3 @@ impl Room {
Pill::for_room(self)
}
}
-
-/// Whether the given event can count as an unread message.
-///
-/// This follows the algorithm in [MSC2654], excluding events that we don't
-/// show in the timeline.
-///
-/// [MSC2654]: https://github.com/matrix-org/matrix-spec-proposals/pull/2654
-fn count_as_unread(event: &AnySyncTimelineEvent) -> bool {
- match event {
- AnySyncTimelineEvent::MessageLike(message_event) => match message_event {
- AnySyncMessageLikeEvent::RoomMessage(SyncMessageLikeEvent::Original(message)) => {
- if matches!(message.content.msgtype, MessageType::Notice(_)) {
- return false;
- }
-
- if matches!(message.content.relates_to, Some(Relation::Replacement(_))) {
- return false;
- }
-
- true
- }
- AnySyncMessageLikeEvent::Sticker(SyncMessageLikeEvent::Original(_)) => true,
- _ => false,
- },
- AnySyncTimelineEvent::State(AnySyncStateEvent::RoomTombstone(
- SyncStateEvent::Original(_),
- )) => true,
- _ => false,
- }
-}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]