New async [MXRoom state:]: Create async factory methods for MXKRoomDataSource

This commit is contained in:
manuroe
2018-07-20 10:43:04 +02:00
parent 61a5bfcb06
commit 4c7e56c985
7 changed files with 185 additions and 140 deletions
+28 -20
View File
@@ -79,37 +79,45 @@
- (void)peekInRoom:(void (^)(BOOL succeeded))completion
{
MXWeakify(self);
[_mxSession peekInRoomWithRoomId:_roomId success:^(MXPeekingRoom *peekingRoom) {
MXStrongifyAndReturnIfNil(self);
// Create the room data source
_roomDataSource = [[RoomDataSource alloc] initWithPeekingRoom:peekingRoom andInitialEventId:_eventId];
[_roomDataSource finalizeInitialization];
_roomDataSource.markTimelineInitialEvent = YES;
MXWeakify(self);
[RoomDataSource loadRoomDataSourceWithPeekingRoom:peekingRoom andInitialEventId:self.eventId onComplete:^(id roomDataSource) {
MXStrongifyAndReturnIfNil(self);
_roomName = peekingRoom.summary.displayname;
_roomAvatarUrl = peekingRoom.summary.avatar;
_roomTopic = [MXTools stripNewlineCharacters:peekingRoom.summary.topic];;
_roomAliases = peekingRoom.state.aliases;
// Room members count
// Note that room members presence/activity is not available
_numJoinedMembers = 0;
for (MXRoomMember *mxMember in peekingRoom.state.members.members)
{
if (mxMember.membership == MXMembershipJoin)
self->_roomDataSource = roomDataSource;
[self.roomDataSource finalizeInitialization];
self.roomDataSource.markTimelineInitialEvent = YES;
self->_roomName = peekingRoom.summary.displayname;
self->_roomAvatarUrl = peekingRoom.summary.avatar;
self->_roomTopic = [MXTools stripNewlineCharacters:peekingRoom.summary.topic];;
self->_roomAliases = self.roomDataSource.roomState.aliases;
// Room members count
// Note that room members presence/activity is not available
self->_numJoinedMembers = 0;
for (MXRoomMember *mxMember in self.roomDataSource.roomState.members.members)
{
_numJoinedMembers ++;
if (mxMember.membership == MXMembershipJoin)
{
self->_numJoinedMembers ++;
}
}
}
completion(YES);
completion(YES);
}];
} failure:^(NSError *error) {
MXStrongifyAndReturnIfNil(self);
_roomName = _roomId;
self->_roomName = self->_roomId;
completion(NO);
}];
}