diff --git a/MatrixSDK/Data/MXRoomSummaryUpdater.m b/MatrixSDK/Data/MXRoomSummaryUpdater.m index 9bac65097..9e455fb19 100644 --- a/MatrixSDK/Data/MXRoomSummaryUpdater.m +++ b/MatrixSDK/Data/MXRoomSummaryUpdater.m @@ -516,8 +516,7 @@ - (BOOL)updateSummaryDisplayname:(MXRoomSummary *)summary session:(MXSession *)s } } - if (memberCount > 1 - && (!displayName || [displayName isEqualToString:_roomNameStringLocalizer.emptyRoom])) + if (!displayName || [displayName isEqualToString:_roomNameStringLocalizer.emptyRoom]) { // Data are missing to compute the display name MXLogDebug(@"[MXRoomSummaryUpdater] updateSummaryDisplayname: Warning: Computed an unexpected \"Empty Room\" name. memberCount: %@", @(memberCount)); @@ -565,10 +564,23 @@ - (NSString*)fixUnexpectedEmptyRoomDisplayname:(NSUInteger)memberCount session:( switch (memberNames.count) { case 0: - MXLogDebug(@"[MXRoomSummaryUpdater] fixUnexpectedEmptyRoomDisplayname: No luck"); + { displayname = _roomNameStringLocalizer.emptyRoom; + NSString *directUserId = [session roomWithRoomId: roomState.roomId].directUserId; + if (directUserId != nil && [MXTools isEmailAddress:directUserId]) + { + displayname = directUserId; + } + else if (roomState.thirdPartyInvites.firstObject.displayname != nil) + { + displayname = roomState.thirdPartyInvites.firstObject.displayname; + } + else + { + MXLogDebug(@"[MXRoomSummaryUpdater] fixUnexpectedEmptyRoomDisplayname: No luck"); + } break; - + } case 1: if (memberCount == 2) { diff --git a/MatrixSDK/MXSession.m b/MatrixSDK/MXSession.m index 9aa58b49d..11d3370e3 100644 --- a/MatrixSDK/MXSession.m +++ b/MatrixSDK/MXSession.m @@ -2509,8 +2509,12 @@ - (MXHTTPOperation*)createRoomWithParameters:(MXRoomCreationParameters*)paramete { // When the flag isDirect is turned on, only one user id is expected in the inviteArray. // The room is considered as direct only for the first mentioned user in case of several user ids. - // Note: It is not possible FTM to mark as direct a room with an invited third party. NSString *directUserId = (parameters.inviteArray.count ? parameters.inviteArray.firstObject : nil); + // Fall back on the first invite3PID address. + if (!directUserId && parameters.invite3PIDArray != nil && parameters.invite3PIDArray.count > 0) + { + directUserId = parameters.invite3PIDArray.firstObject.address; + } [self onCreatedDirectChat:response withUserId:directUserId success:success]; } else diff --git a/changelog.d/pr-1727.change b/changelog.d/pr-1727.change new file mode 100644 index 000000000..bf92eea31 --- /dev/null +++ b/changelog.d/pr-1727.change @@ -0,0 +1 @@ +Creating a direct room with a third party will now use their email as the m.direct ID and their obfuscated email as the room title.