Skip to content

Commit d05796d

Browse files
Hywanstefanceriu
authored andcommitted
task(base): Room::compute_display_name returns an UpdatedRoomDisplayName.
This patch updates `Room::compute_display_name` to return an `UpdatedRoomDisplayName`. This is useful to know if the display name has changed or not.
1 parent adb7cd3 commit d05796d

File tree

3 files changed

+49
-29
lines changed

3 files changed

+49
-29
lines changed

crates/matrix-sdk-base/src/client.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1325,7 +1325,7 @@ mod tests {
13251325
let room = client.get_room(room_id).expect("Room not found");
13261326
assert_eq!(room.state(), RoomState::Invited);
13271327
assert_eq!(
1328-
room.compute_display_name().await.expect("fetching display name failed"),
1328+
room.compute_display_name().await.expect("fetching display name failed").into_inner(),
13291329
RoomDisplayName::Calculated("Kyra".to_owned())
13301330
);
13311331
}

crates/matrix-sdk-base/src/rooms/normal.rs

Lines changed: 31 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,7 @@ use tracing::{debug, field::debug, info, instrument, trace, warn};
6262

6363
use super::{
6464
members::MemberRoomInfo, BaseRoomInfo, RoomCreateWithCreatorEventContent, RoomDisplayName,
65-
RoomMember, RoomNotableTags,
65+
RoomMember, RoomNotableTags, UpdatedRoomDisplayName,
6666
};
6767
use 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
}

crates/matrix-sdk-base/src/sliding_sync.rs

Lines changed: 17 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -416,7 +416,10 @@ mod tests {
416416
// No m.room.name event, no heroes, no members => considered an empty room!
417417
let client_room = client.get_room(room_id).expect("No room found");
418418
assert!(client_room.name().is_none());
419-
assert_eq!(client_room.compute_display_name().await.unwrap().to_string(), "Empty Room");
419+
assert_eq!(
420+
client_room.compute_display_name().await.unwrap().into_inner().to_string(),
421+
"Empty Room"
422+
);
420423
assert_eq!(client_room.state(), RoomState::Joined);
421424

422425
// And it is added to the list of joined rooms only.
@@ -448,7 +451,10 @@ mod tests {
448451
// The name is known.
449452
let client_room = client.get_room(room_id).expect("No room found");
450453
assert_eq!(client_room.name().as_deref(), Some("The Name"));
451-
assert_eq!(client_room.compute_display_name().await.unwrap().to_string(), "The Name");
454+
assert_eq!(
455+
client_room.compute_display_name().await.unwrap().into_inner().to_string(),
456+
"The Name"
457+
);
452458
}
453459

454460
#[async_test]
@@ -475,7 +481,7 @@ mod tests {
475481
assert!(client_room.name().is_none());
476482

477483
// No m.room.name event, no heroes => using the invited member.
478-
assert_eq!(client_room.compute_display_name().await.unwrap().to_string(), "w");
484+
assert_eq!(client_room.compute_display_name().await.unwrap().into_inner().to_string(), "w");
479485

480486
assert_eq!(client_room.state(), RoomState::Invited);
481487

@@ -512,7 +518,10 @@ mod tests {
512518
// The name is known.
513519
let client_room = client.get_room(room_id).expect("No room found");
514520
assert_eq!(client_room.name().as_deref(), Some("The Name"));
515-
assert_eq!(client_room.compute_display_name().await.unwrap().to_string(), "The Name");
521+
assert_eq!(
522+
client_room.compute_display_name().await.unwrap().into_inner().to_string(),
523+
"The Name"
524+
);
516525
}
517526

518527
#[async_test]
@@ -1063,7 +1072,10 @@ mod tests {
10631072

10641073
// Then the room's name is NOT overridden by the server-computed display name.
10651074
let client_room = client.get_room(room_id).expect("No room found");
1066-
assert_eq!(client_room.compute_display_name().await.unwrap().to_string(), "myroom");
1075+
assert_eq!(
1076+
client_room.compute_display_name().await.unwrap().into_inner().to_string(),
1077+
"myroom"
1078+
);
10671079
assert!(client_room.name().is_none());
10681080
}
10691081

0 commit comments

Comments
 (0)