@@ -62,7 +62,7 @@ use tracing::{debug, field::debug, info, instrument, trace, warn};
6262
6363use super :: {
6464 members:: MemberRoomInfo , BaseRoomInfo , RoomCreateWithCreatorEventContent , RoomDisplayName ,
65- RoomMember , RoomNotableTags ,
65+ RoomMember , RoomNotableTags , UpdatedRoomDisplayName ,
6666} ;
6767use crate :: {
6868 deserialized_responses:: {
@@ -636,7 +636,7 @@ impl Room {
636636 if let Some ( name) = self . cached_display_name ( ) {
637637 Ok ( name)
638638 } else {
639- self . compute_display_name ( ) . await
639+ Ok ( self . compute_display_name ( ) . await ? . into_inner ( ) )
640640 }
641641 }
642642
@@ -651,7 +651,7 @@ impl Room {
651651 /// be preferred in general.
652652 ///
653653 /// [spec]: <https://matrix.org/docs/spec/client_server/latest#calculating-the-display-name-for-a-room>
654- pub ( crate ) async fn compute_display_name ( & self ) -> StoreResult < RoomDisplayName > {
654+ pub ( crate ) async fn compute_display_name ( & self ) -> StoreResult < UpdatedRoomDisplayName > {
655655 enum DisplayNameOrSummary {
656656 Summary ( RoomSummary ) ,
657657 DisplayName ( RoomDisplayName ) ,
@@ -685,16 +685,24 @@ impl Room {
685685 } ;
686686
687687 // Update the cached display name before we return the newly computed value.
688+ let mut updated = false ;
689+
688690 self . inner . update_if ( |info| {
689691 if info. cached_display_name . as_ref ( ) != Some ( & display_name) {
690692 info. cached_display_name = Some ( display_name. clone ( ) ) ;
693+ updated = true ;
694+
691695 true
692696 } else {
693697 false
694698 }
695699 } ) ;
696700
697- Ok ( display_name)
701+ Ok ( if updated {
702+ UpdatedRoomDisplayName :: New ( display_name)
703+ } else {
704+ UpdatedRoomDisplayName :: Same ( display_name)
705+ } )
698706 }
699707
700708 /// Compute a [`RoomDisplayName`] from the given [`RoomSummary`].
@@ -2751,7 +2759,7 @@ mod tests {
27512759 #[ async_test]
27522760 async fn test_display_name_for_joined_room_is_empty_if_no_info ( ) {
27532761 let ( _, room) = make_room_test_helper ( RoomState :: Joined ) ;
2754- assert_eq ! ( room. compute_display_name( ) . await . unwrap( ) , RoomDisplayName :: Empty ) ;
2762+ assert_eq ! ( room. compute_display_name( ) . await . unwrap( ) . into_inner ( ) , RoomDisplayName :: Empty ) ;
27552763 }
27562764
27572765 #[ async_test]
@@ -2760,7 +2768,7 @@ mod tests {
27602768 room. inner
27612769 . update ( |info| info. base_info . canonical_alias = Some ( make_canonical_alias_event ( ) ) ) ;
27622770 assert_eq ! (
2763- room. compute_display_name( ) . await . unwrap( ) ,
2771+ room. compute_display_name( ) . await . unwrap( ) . into_inner ( ) ,
27642772 RoomDisplayName :: Aliased ( "test" . to_owned( ) )
27652773 ) ;
27662774 }
@@ -2771,21 +2779,21 @@ mod tests {
27712779 room. inner
27722780 . update ( |info| info. base_info . canonical_alias = Some ( make_canonical_alias_event ( ) ) ) ;
27732781 assert_eq ! (
2774- room. compute_display_name( ) . await . unwrap( ) ,
2782+ room. compute_display_name( ) . await . unwrap( ) . into_inner ( ) ,
27752783 RoomDisplayName :: Aliased ( "test" . to_owned( ) )
27762784 ) ;
27772785 room. inner . update ( |info| info. base_info . name = Some ( make_name_event ( ) ) ) ;
27782786 // Display name wasn't cached when we asked for it above, and name overrides
27792787 assert_eq ! (
2780- room. compute_display_name( ) . await . unwrap( ) ,
2788+ room. compute_display_name( ) . await . unwrap( ) . into_inner ( ) ,
27812789 RoomDisplayName :: Named ( "Test Room" . to_owned( ) )
27822790 ) ;
27832791 }
27842792
27852793 #[ async_test]
27862794 async fn test_display_name_for_invited_room_is_empty_if_no_info ( ) {
27872795 let ( _, room) = make_room_test_helper ( RoomState :: Invited ) ;
2788- assert_eq ! ( room. compute_display_name( ) . await . unwrap( ) , RoomDisplayName :: Empty ) ;
2796+ assert_eq ! ( room. compute_display_name( ) . await . unwrap( ) . into_inner ( ) , RoomDisplayName :: Empty ) ;
27892797 }
27902798
27912799 #[ async_test]
@@ -2798,7 +2806,7 @@ mod tests {
27982806 } ) ;
27992807 room. inner . update ( |info| info. base_info . name = Some ( room_name) ) ;
28002808
2801- assert_eq ! ( room. compute_display_name( ) . await . unwrap( ) , RoomDisplayName :: Empty ) ;
2809+ assert_eq ! ( room. compute_display_name( ) . await . unwrap( ) . into_inner ( ) , RoomDisplayName :: Empty ) ;
28022810 }
28032811
28042812 #[ async_test]
@@ -2807,7 +2815,7 @@ mod tests {
28072815 room. inner
28082816 . update ( |info| info. base_info . canonical_alias = Some ( make_canonical_alias_event ( ) ) ) ;
28092817 assert_eq ! (
2810- room. compute_display_name( ) . await . unwrap( ) ,
2818+ room. compute_display_name( ) . await . unwrap( ) . into_inner ( ) ,
28112819 RoomDisplayName :: Aliased ( "test" . to_owned( ) )
28122820 ) ;
28132821 }
@@ -2818,13 +2826,13 @@ mod tests {
28182826 room. inner
28192827 . update ( |info| info. base_info . canonical_alias = Some ( make_canonical_alias_event ( ) ) ) ;
28202828 assert_eq ! (
2821- room. compute_display_name( ) . await . unwrap( ) ,
2829+ room. compute_display_name( ) . await . unwrap( ) . into_inner ( ) ,
28222830 RoomDisplayName :: Aliased ( "test" . to_owned( ) )
28232831 ) ;
28242832 room. inner . update ( |info| info. base_info . name = Some ( make_name_event ( ) ) ) ;
28252833 // Display name wasn't cached when we asked for it above, and name overrides
28262834 assert_eq ! (
2827- room. compute_display_name( ) . await . unwrap( ) ,
2835+ room. compute_display_name( ) . await . unwrap( ) . into_inner ( ) ,
28282836 RoomDisplayName :: Named ( "Test Room" . to_owned( ) )
28292837 ) ;
28302838 }
@@ -2866,7 +2874,7 @@ mod tests {
28662874
28672875 room. inner . update_if ( |info| info. update_from_ruma_summary ( & summary) ) ;
28682876 assert_eq ! (
2869- room. compute_display_name( ) . await . unwrap( ) ,
2877+ room. compute_display_name( ) . await . unwrap( ) . into_inner ( ) ,
28702878 RoomDisplayName :: Calculated ( "Matthew" . to_owned( ) )
28712879 ) ;
28722880 }
@@ -2888,7 +2896,7 @@ mod tests {
28882896 store. save_changes ( & changes) . await . unwrap ( ) ;
28892897
28902898 assert_eq ! (
2891- room. compute_display_name( ) . await . unwrap( ) ,
2899+ room. compute_display_name( ) . await . unwrap( ) . into_inner ( ) ,
28922900 RoomDisplayName :: Calculated ( "Matthew" . to_owned( ) )
28932901 ) ;
28942902 }
@@ -2921,7 +2929,7 @@ mod tests {
29212929
29222930 room. inner . update_if ( |info| info. update_from_ruma_summary ( & summary) ) ;
29232931 assert_eq ! (
2924- room. compute_display_name( ) . await . unwrap( ) ,
2932+ room. compute_display_name( ) . await . unwrap( ) . into_inner ( ) ,
29252933 RoomDisplayName :: Calculated ( "Matthew" . to_owned( ) )
29262934 ) ;
29272935 }
@@ -2968,7 +2976,7 @@ mod tests {
29682976 room. inner . update_if ( |info| info. update_from_ruma_summary ( & summary) ) ;
29692977 // Bot should not contribute to the display name.
29702978 assert_eq ! (
2971- room. compute_display_name( ) . await . unwrap( ) ,
2979+ room. compute_display_name( ) . await . unwrap( ) . into_inner ( ) ,
29722980 RoomDisplayName :: Calculated ( "Matthew" . to_owned( ) )
29732981 ) ;
29742982 }
@@ -3012,7 +3020,7 @@ mod tests {
30123020
30133021 room. inner . update_if ( |info| info. update_from_ruma_summary ( & summary) ) ;
30143022 // Bot should not contribute to the display name.
3015- assert_eq ! ( room. compute_display_name( ) . await . unwrap( ) , RoomDisplayName :: Empty ) ;
3023+ assert_eq ! ( room. compute_display_name( ) . await . unwrap( ) . into_inner ( ) , RoomDisplayName :: Empty ) ;
30163024 }
30173025
30183026 #[ async_test]
@@ -3037,7 +3045,7 @@ mod tests {
30373045 store. save_changes ( & changes) . await . unwrap ( ) ;
30383046
30393047 assert_eq ! (
3040- room. compute_display_name( ) . await . unwrap( ) ,
3048+ room. compute_display_name( ) . await . unwrap( ) . into_inner ( ) ,
30413049 RoomDisplayName :: Calculated ( "Matthew" . to_owned( ) )
30423050 ) ;
30433051 }
@@ -3078,7 +3086,7 @@ mod tests {
30783086 store. save_changes ( & changes) . await . unwrap ( ) ;
30793087
30803088 assert_eq ! (
3081- room. compute_display_name( ) . await . unwrap( ) ,
3089+ room. compute_display_name( ) . await . unwrap( ) . into_inner ( ) ,
30823090 RoomDisplayName :: Calculated ( "Matthew" . to_owned( ) )
30833091 ) ;
30843092 }
@@ -3135,7 +3143,7 @@ mod tests {
31353143 room. inner . update_if ( |info| info. update_from_ruma_summary ( & summary) ) ;
31363144
31373145 assert_eq ! (
3138- room. compute_display_name( ) . await . unwrap( ) ,
3146+ room. compute_display_name( ) . await . unwrap( ) . into_inner ( ) ,
31393147 RoomDisplayName :: Calculated ( "Bob, Carol, Denis, Erica, and 3 others" . to_owned( ) )
31403148 ) ;
31413149 }
@@ -3187,7 +3195,7 @@ mod tests {
31873195 }
31883196
31893197 assert_eq ! (
3190- room. compute_display_name( ) . await . unwrap( ) ,
3198+ room. compute_display_name( ) . await . unwrap( ) . into_inner ( ) ,
31913199 RoomDisplayName :: Calculated ( "Alice, Bob, Carol, Denis, Erica, and 2 others" . to_owned( ) )
31923200 ) ;
31933201 }
@@ -3219,7 +3227,7 @@ mod tests {
32193227
32203228 room. inner . update_if ( |info| info. update_from_ruma_summary ( & summary) ) ;
32213229 assert_eq ! (
3222- room. compute_display_name( ) . await . unwrap( ) ,
3230+ room. compute_display_name( ) . await . unwrap( ) . into_inner ( ) ,
32233231 RoomDisplayName :: EmptyWas ( "Matthew" . to_owned( ) )
32243232 ) ;
32253233 }
0 commit comments