Merge branch 'reza/empty-chat' into 'main'

fix: leaved direct chat name

Closes famedly-web#650

See merge request famedly/company/frontend/famedlysdk!1188
This commit is contained in:
Krille 2022-12-12 12:00:57 +00:00
commit f3e9226c1d
3 changed files with 54 additions and 5 deletions

View File

@ -59,6 +59,7 @@ const String fileSendingStatusKey =
'com.famedly.famedlysdk.file_sending_status';
const String sortOrderKey = 'com.famedly.famedlysdk.sort_order';
const String emptyRoomName = 'Empty chat';
/// Represents a Matrix room.
class Room {
@ -240,6 +241,20 @@ class Room {
return i18n.groupWith(displayname);
}
if (displayname.isNotEmpty) {
if (directChatMatrixID != null) {
final displayName =
unsafeGetUserFromMemoryOrFallback(directChatMatrixID!)
.calcDisplayname();
final dmPartnerMembership =
getState(EventTypes.RoomMember, directChatMatrixID!)
?.asUser
.membership;
if (dmPartnerMembership == null ||
dmPartnerMembership == Membership.leave) {
return i18n.wasDirectChatDisplayName(displayName);
}
return displayName;
}
return displayname;
}
return i18n.emptyChat;
@ -406,19 +421,35 @@ class Room {
if (canonicalAlias != null && canonicalAlias.isNotEmpty) {
return canonicalAlias;
}
final heroes = summary.mHeroes;
if (heroes != null && heroes.isNotEmpty) {
return heroes
final result = heroes
.where((hero) => hero.isNotEmpty)
.map((hero) =>
unsafeGetUserFromMemoryOrFallback(hero).calcDisplayname())
.join(', ');
if (directChatMatrixID != null) {
final dmPartnerMembership = getState(
EventTypes.RoomMember,
directChatMatrixID!,
)?.asUser.membership;
if (dmPartnerMembership == null ||
dmPartnerMembership == Membership.leave) {
return leavedDirectChatName(result);
}
return result;
} else {
return result;
}
}
if (isDirectChat) {
final user = directChatMatrixID;
if (user != null) {
return unsafeGetUserFromMemoryOrFallback(user).calcDisplayname();
final displayName =
unsafeGetUserFromMemoryOrFallback(user).calcDisplayname();
return membership == Membership.leave
? leavedDirectChatName(displayName)
: displayName;
}
}
if (membership == Membership.invite) {
@ -427,7 +458,20 @@ class Room {
.calcDisplayname();
if (sender != null) return sender;
}
return 'Empty chat';
if (membership == Membership.leave) {
final invitation = getState(EventTypes.RoomMember, client.userID!);
if (invitation != null && invitation.unsigned?['prev_sender'] != null) {
final name = unsafeGetUserFromMemoryOrFallback(
invitation.unsigned?['prev_sender'])
.calcDisplayname();
return leavedDirectChatName(name);
}
}
return emptyRoomName;
}
String leavedDirectChatName(String prevName) {
return '$emptyRoomName (was $prevName)';
}
/// When the last message received.
@ -1080,7 +1124,6 @@ class Room {
/// Call the Matrix API to leave this room. If this room is set as a direct
/// chat, this will be removed too.
Future<void> leave() async {
if (directChatMatrixID != '') await removeFromDirectChat();
try {
await client.leaveRoom(id);
} on MatrixException catch (exception) {

View File

@ -265,4 +265,8 @@ class MatrixDefaultLocalizations extends MatrixLocalizations {
@override
String youUnbannedUser(String targetName) => 'You unbanned $targetName';
@override
String wasDirectChatDisplayName(String oldDisplayName) =>
'Empty chat (was $oldDisplayName)';
}

View File

@ -157,6 +157,8 @@ abstract class MatrixLocalizations {
String answeredTheCall(String senderName);
String sentCallInformations(String senderName);
String wasDirectChatDisplayName(String oldDisplayName);
}
extension HistoryVisibilityDisplayString on HistoryVisibility {