Room preview of room link: Try to get more information to display from the hs

This commit is contained in:
manuroe 2016-04-15 11:55:41 +02:00
parent b4e7537301
commit 21ee7b6454
3 changed files with 47 additions and 5 deletions

View file

@ -843,16 +843,17 @@
if (queryParams) if (queryParams)
{ {
roomPreviewData = [[RoomPreviewData alloc] initWithRoomId:roomIdOrAlias emailInvitationParams:queryParams andSession:account.mxSession]; roomPreviewData = [[RoomPreviewData alloc] initWithRoomId:roomIdOrAlias emailInvitationParams:queryParams andSession:account.mxSession];
[self showRoomPreview:roomPreviewData];
} }
else else
{ {
roomPreviewData = [[RoomPreviewData alloc] initWithRoomId:roomIdOrAlias andSession:account.mxSession]; roomPreviewData = [[RoomPreviewData alloc] initWithRoomId:roomIdOrAlias andSession:account.mxSession];
// TODO: Try to get more information about the room // Try to get more information about the room before opening its preview
// We could attempt to do a room initialSync on it [roomPreviewData fetchPreviewData:^(BOOL successed) {
[self showRoomPreview:roomPreviewData];
}];
} }
[self showRoomPreview:roomPreviewData];
} }
} }
else else

View file

@ -44,7 +44,8 @@
@property (nonatomic) MXSession *mxSession; @property (nonatomic) MXSession *mxSession;
/** /**
TODO Preview information.
They come from the `emailInvitationParams` or [self fetchPreviewData].
*/ */
@property (nonatomic, readonly) NSString *roomName; @property (nonatomic, readonly) NSString *roomName;
@property (nonatomic, readonly) NSString *roomAvatarUrl; @property (nonatomic, readonly) NSString *roomAvatarUrl;
@ -60,4 +61,15 @@
- (instancetype)initWithRoomId:(NSString*)roomId andSession:(MXSession*)mxSession; - (instancetype)initWithRoomId:(NSString*)roomId andSession:(MXSession*)mxSession;
- (instancetype)initWithRoomId:(NSString*)roomId emailInvitationParams:(NSDictionary*)emailInvitationParams andSession:(MXSession*)mxSession; - (instancetype)initWithRoomId:(NSString*)roomId emailInvitationParams:(NSDictionary*)emailInvitationParams andSession:(MXSession*)mxSession;
/**
Attempt to get more information from the homeserver about the room.
NOTE: This method is temporary while we do not support the full room preview
with preview of messages.
@param completion the block called when the request is complete. `successed` means
the homeserver provided some information.
*/
- (void)fetchPreviewData:(void (^)(BOOL successed))completion;
@end @end

View file

@ -43,4 +43,33 @@
return self; return self;
} }
- (void)fetchPreviewData:(void (^)(BOOL))completion
{
// Make an /initialSync request to get preview data
[_mxSession.matrixRestClient initialSyncOfRoom:_roomId withLimit:0 success:^(MXRoomInitialSync *roomInitialSync) {
MXRoomState *roomState = [[MXRoomState alloc] initWithRoomId:_roomId andMatrixSession:_mxSession andDirection:YES];
// Make roomState digest state events of the room
for (MXEvent *stateEvent in roomInitialSync.state)
{
// Skip members events as they are not not interesting here and can be numerous
if (stateEvent.eventType != MXEventTypeRoomMember)
{
[roomState handleStateEvent:stateEvent];
}
}
// Report retrieved data
_roomName = roomState.displayname;
_roomAvatarUrl = roomState.avatar;
_roomTopic = roomState.topic;
completion(YES);
} failure:^(NSError *error) {
completion(NO);
}];
}
@end @end