diff --git a/Riot/Model/Room/RoomPreviewData.h b/Riot/Model/Room/RoomPreviewData.h index c10295617..f6f51bdca 100644 --- a/Riot/Model/Room/RoomPreviewData.h +++ b/Riot/Model/Room/RoomPreviewData.h @@ -97,6 +97,14 @@ */ - (instancetype)initWithPublicRoom:(MXPublicRoom*)publicRoom andSession:(MXSession*)mxSession; +/** + Contructors. + + @param childInfo MXSpaceChildInfo instance that describes the child. + @param mxSession the session to open the room preview with. + */ +- (instancetype)initWithSpaceChildInfo:(MXSpaceChildInfo*)childInfo andSession:(MXSession*)mxSession; + /** Attempt to peek into the room to get room data (state, messages history, etc). diff --git a/Riot/Model/Room/RoomPreviewData.m b/Riot/Model/Room/RoomPreviewData.m index 74738367a..07ece4510 100644 --- a/Riot/Model/Room/RoomPreviewData.m +++ b/Riot/Model/Room/RoomPreviewData.m @@ -16,6 +16,7 @@ */ #import "RoomPreviewData.h" +#import @implementation RoomPreviewData @@ -79,6 +80,21 @@ return self; } +- (instancetype)initWithSpaceChildInfo:(MXSpaceChildInfo*)childInfo andSession:(MXSession*)mxSession +{ + self = [self init]; + if (self) + { + _roomId = childInfo.childRoomId; + _roomName = childInfo.name; + _roomAvatarUrl = childInfo.avatarUrl; + _roomTopic = childInfo.topic; + _numJoinedMembers = childInfo.activeMemberCount; + _mxSession = mxSession; + } + return self; +} + - (void)dealloc { if (_roomDataSource) diff --git a/Riot/Modules/Common/Recents/DataSources/RecentsDataSource.m b/Riot/Modules/Common/Recents/DataSources/RecentsDataSource.m index 963ca2703..dbb26f8bc 100644 --- a/Riot/Modules/Common/Recents/DataSources/RecentsDataSource.m +++ b/Riot/Modules/Common/Recents/DataSources/RecentsDataSource.m @@ -57,7 +57,6 @@ NSString *const kRecentsDataSourceTapOnDirectoryServerChange = @"kRecentsDataSou @property (nonatomic, assign, readwrite) CrossSigningBannerDisplay crossSigningBannerDisplay; @property (nonatomic, strong) CrossSigningService *crossSigningService; -@property (nonatomic, strong) NSArray *lastSuggestedRooms; @end @@ -1301,7 +1300,12 @@ NSString *const kRecentsDataSourceTapOnDirectoryServerChange = @"kRecentsDataSou } else if (recentCellDataStoring.spaceChildInfo != nil) { - [suggestedRoomCellDataArray addObject:recentCellDataStoring]; + MXRoomSummary *roomSummary = [mxSession roomSummaryWithRoomId:recentCellDataStoring.spaceChildInfo.childRoomId]; + BOOL isJoined = roomSummary.membership == MXMembershipJoin || roomSummary.membershipTransitionState == MXMembershipTransitionStateJoined; + if (!isJoined) + { + [suggestedRoomCellDataArray addObject:recentCellDataStoring]; + } } else { @@ -1343,7 +1347,12 @@ NSString *const kRecentsDataSourceTapOnDirectoryServerChange = @"kRecentsDataSou { if (recentCellDataStoring.spaceChildInfo) { - [suggestedRoomCellDataArray addObject:recentCellDataStoring]; + MXRoomSummary *roomSummary = [mxSession roomSummaryWithRoomId:recentCellDataStoring.spaceChildInfo.childRoomId]; + BOOL isJoined = roomSummary.membership == MXMembershipJoin || roomSummary.membershipTransitionState == MXMembershipTransitionStateJoined; + if (!isJoined) + { + [suggestedRoomCellDataArray addObject:recentCellDataStoring]; + } } // Consider only non direct rooms. else if (!room.isDirect) diff --git a/Riot/Modules/Common/Recents/RecentsViewController.m b/Riot/Modules/Common/Recents/RecentsViewController.m index e76a83cab..72de7f836 100644 --- a/Riot/Modules/Common/Recents/RecentsViewController.m +++ b/Riot/Modules/Common/Recents/RecentsViewController.m @@ -2051,6 +2051,18 @@ [self dispayRoomWithRoomId:roomId inMatrixSession:matrixSession]; } +- (void)recentListViewController:(MXKRecentListViewController *)recentListViewController didSelectSuggestedRoom:(MXSpaceChildInfo *)childInfo +{ + RoomPreviewData *previewData = [[RoomPreviewData alloc] initWithSpaceChildInfo:childInfo andSession:self.mainSession]; + [self startActivityIndicator]; + MXWeakify(self); + [previewData peekInRoom:^(BOOL succeeded) { + MXStrongifyAndReturnIfNil(self); + [self stopActivityIndicator]; + [[AppDelegate theDelegate].masterTabBarController showRoomPreview:previewData]; + }]; +} + #pragma mark - UISearchBarDelegate - (void)scrollViewWillEndDragging:(UIScrollView *)scrollView withVelocity:(CGPoint)velocity targetContentOffset:(inout CGPoint *)targetContentOffset diff --git a/Riot/Modules/Home/HomeViewController.m b/Riot/Modules/Home/HomeViewController.m index d86313b39..c1c89ba4e 100644 --- a/Riot/Modules/Home/HomeViewController.m +++ b/Riot/Modules/Home/HomeViewController.m @@ -557,7 +557,14 @@ id renderedCellData = (id)roomCollectionViewCell.renderedCellData; - [self.delegate recentListViewController:self didSelectRoom:renderedCellData.roomSummary.roomId inMatrixSession:renderedCellData.roomSummary.room.mxSession]; + if (renderedCellData.spaceChildInfo) + { + [self.delegate recentListViewController:self didSelectSuggestedRoom:renderedCellData.spaceChildInfo]; + } + else + { + [self.delegate recentListViewController:self didSelectRoom:renderedCellData.roomSummary.roomId inMatrixSession:renderedCellData.roomSummary.room.mxSession]; + } } // Hide the keyboard when user select a room