[fractal] room: Simplify use of TimelineItemImpl



commit a6653be085e96a202324ffe72f597ffa63320ff3
Author: Kévin Commaille <zecakeh tedomum fr>
Date:   Tue Apr 12 19:45:50 2022 +0200

    room: Simplify use of TimelineItemImpl

 src/session/room/event.rs                  | 21 +++++++--------------
 src/session/room/timeline/timeline_item.rs | 24 ++++++++++++------------
 2 files changed, 19 insertions(+), 26 deletions(-)
---
diff --git a/src/session/room/event.rs b/src/session/room/event.rs
index 8252e36c3..63167e190 100644
--- a/src/session/room/event.rs
+++ b/src/session/room/event.rs
@@ -135,15 +135,12 @@ mod imp {
     }
 
     impl TimelineItemImpl for Event {
-        fn selectable(&self, _obj: &TimelineItem) -> bool {
+        fn selectable(&self, _obj: &Self::Type) -> bool {
             true
         }
 
-        fn activatable(&self, obj: &TimelineItem) -> bool {
-            match obj
-                .downcast_ref::<super::Event>()
-                .and_then(|event| event.message_content())
-            {
+        fn activatable(&self, obj: &Self::Type) -> bool {
+            match obj.message_content() {
                 // The event can be activated to open the media viewer if it's an image or a video.
                 Some(AnyMessageLikeEventContent::RoomMessage(message)) => {
                     matches!(
@@ -155,11 +152,8 @@ mod imp {
             }
         }
 
-        fn can_hide_header(&self, obj: &TimelineItem) -> bool {
-            match obj
-                .downcast_ref::<super::Event>()
-                .and_then(|event| event.message_content())
-            {
+        fn can_hide_header(&self, obj: &Self::Type) -> bool {
+            match obj.message_content() {
                 Some(AnyMessageLikeEventContent::RoomMessage(message)) => {
                     matches!(
                         message.msgtype,
@@ -177,9 +171,8 @@ mod imp {
             }
         }
 
-        fn sender(&self, obj: &TimelineItem) -> Option<Member> {
-            obj.downcast_ref::<super::Event>()
-                .map(|event| event.room().members().member_by_id(event.matrix_sender()))
+        fn sender(&self, obj: &Self::Type) -> Option<Member> {
+            Some(obj.room().members().member_by_id(obj.matrix_sender()))
         }
     }
 }
diff --git a/src/session/room/timeline/timeline_item.rs b/src/session/room/timeline/timeline_item.rs
index d1c5f8b24..55ef72656 100644
--- a/src/session/room/timeline/timeline_item.rs
+++ b/src/session/room/timeline/timeline_item.rs
@@ -205,19 +205,19 @@ impl<O: IsA<TimelineItem>> TimelineItemExt for O {
 /// Overriding a method from this Trait overrides also its behavior in
 /// `TimelineItemExt`.
 pub trait TimelineItemImpl: ObjectImpl {
-    fn selectable(&self, _obj: &TimelineItem) -> bool {
+    fn selectable(&self, _obj: &Self::Type) -> bool {
         false
     }
 
-    fn activatable(&self, _obj: &TimelineItem) -> bool {
+    fn activatable(&self, _obj: &Self::Type) -> bool {
         false
     }
 
-    fn can_hide_header(&self, _obj: &TimelineItem) -> bool {
+    fn can_hide_header(&self, _obj: &Self::Type) -> bool {
         false
     }
 
-    fn sender(&self, _obj: &TimelineItem) -> Option<Member> {
+    fn sender(&self, _obj: &Self::Type) -> Option<Member> {
         None
     }
 }
@@ -246,8 +246,8 @@ where
     T: ObjectSubclass + TimelineItemImpl,
     T::Type: IsA<TimelineItem>,
 {
-    let imp = this.downcast_ref::<T::Type>().unwrap().imp();
-    imp.selectable(this)
+    let this = this.downcast_ref::<T::Type>().unwrap();
+    this.imp().selectable(this)
 }
 
 fn activatable_trampoline<T>(this: &TimelineItem) -> bool
@@ -255,8 +255,8 @@ where
     T: ObjectSubclass + TimelineItemImpl,
     T::Type: IsA<TimelineItem>,
 {
-    let imp = this.downcast_ref::<T::Type>().unwrap().imp();
-    imp.activatable(this)
+    let this = this.downcast_ref::<T::Type>().unwrap();
+    this.imp().activatable(this)
 }
 
 fn can_hide_header_trampoline<T>(this: &TimelineItem) -> bool
@@ -264,8 +264,8 @@ where
     T: ObjectSubclass + TimelineItemImpl,
     T::Type: IsA<TimelineItem>,
 {
-    let imp = this.downcast_ref::<T::Type>().unwrap().imp();
-    imp.can_hide_header(this)
+    let this = this.downcast_ref::<T::Type>().unwrap();
+    this.imp().can_hide_header(this)
 }
 
 fn sender_trampoline<T>(this: &TimelineItem) -> Option<Member>
@@ -273,6 +273,6 @@ where
     T: ObjectSubclass + TimelineItemImpl,
     T::Type: IsA<TimelineItem>,
 {
-    let imp = this.downcast_ref::<T::Type>().unwrap().imp();
-    imp.sender(this)
+    let this = this.downcast_ref::<T::Type>().unwrap();
+    this.imp().sender(this)
 }


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]