mirror of
https://github.com/vector-im/element-ios.git
synced 2024-09-29 07:42:40 +00:00
Make Riot build with new async [MXRoom liveTimeline:]
This commit is contained in:
parent
01182b8ab7
commit
bbaca0e3df
3 changed files with 117 additions and 80 deletions
|
@ -216,8 +216,13 @@
|
|||
|
||||
if (membersListener)
|
||||
{
|
||||
[self.mxRoom.liveTimeline removeListener:membersListener];
|
||||
membersListener = nil;
|
||||
MXWeakify(self);
|
||||
[self.mxRoom liveTimeline:^(MXEventTimeline *liveTimeline) {
|
||||
MXStrongifyAndReturnIfNil(self);
|
||||
|
||||
[liveTimeline removeListener:self->membersListener];
|
||||
self->membersListener = nil;
|
||||
}];
|
||||
}
|
||||
|
||||
if (currentAlert)
|
||||
|
@ -331,6 +336,9 @@
|
|||
// Cancel any pending search
|
||||
[self searchBarCancelButtonClicked:_searchBarView];
|
||||
|
||||
// @TODO(async-state): Need to expose [MXSession preloadRoomsData] to avoid race
|
||||
// between _mxRoom & mxRoom
|
||||
|
||||
// Remove previous room registration (if any).
|
||||
if (_mxRoom)
|
||||
{
|
||||
|
@ -347,8 +355,13 @@
|
|||
}
|
||||
if (membersListener)
|
||||
{
|
||||
[_mxRoom.liveTimeline removeListener:membersListener];
|
||||
membersListener = nil;
|
||||
MXWeakify(self);
|
||||
[self.mxRoom liveTimeline:^(MXEventTimeline *liveTimeline) {
|
||||
MXStrongifyAndReturnIfNil(self);
|
||||
|
||||
[liveTimeline removeListener:self->membersListener];
|
||||
self->membersListener = nil;
|
||||
}];
|
||||
}
|
||||
|
||||
[self removeMatrixSession:_mxRoom.mxSession];
|
||||
|
@ -394,66 +407,71 @@
|
|||
|
||||
// Register a listener for events that concern room members
|
||||
NSArray *mxMembersEvents = @[kMXEventTypeStringRoomMember, kMXEventTypeStringRoomThirdPartyInvite, kMXEventTypeStringRoomPowerLevels];
|
||||
membersListener = [_mxRoom.liveTimeline listenToEventsOfTypes:mxMembersEvents onEvent:^(MXEvent *event, MXTimelineDirection direction, id customObject) {
|
||||
|
||||
// Consider only live event
|
||||
if (direction == MXTimelineDirectionForwards)
|
||||
{
|
||||
switch (event.eventType)
|
||||
MXWeakify(self);
|
||||
[self.mxRoom liveTimeline:^(MXEventTimeline *liveTimeline) {
|
||||
MXStrongifyAndReturnIfNil(self);
|
||||
|
||||
self->membersListener = [liveTimeline listenToEventsOfTypes:mxMembersEvents onEvent:^(MXEvent *event, MXTimelineDirection direction, id customObject) {
|
||||
|
||||
// Consider only live event
|
||||
if (direction == MXTimelineDirectionForwards)
|
||||
{
|
||||
case MXEventTypeRoomMember:
|
||||
switch (event.eventType)
|
||||
{
|
||||
// Take into account updated member
|
||||
// Ignore here change related to the current user (this change is handled by leaveRoomNotificationObserver)
|
||||
if ([event.stateKey isEqualToString:self.mxRoom.mxSession.myUser.userId] == NO)
|
||||
case MXEventTypeRoomMember:
|
||||
{
|
||||
MXRoomMember *mxMember = [self.mxRoom.state.members memberWithUserId:event.stateKey];
|
||||
if (mxMember)
|
||||
// Take into account updated member
|
||||
// Ignore here change related to the current user (this change is handled by leaveRoomNotificationObserver)
|
||||
if ([event.stateKey isEqualToString:self.mxRoom.mxSession.myUser.userId] == NO)
|
||||
{
|
||||
// Remove previous occurrence of this member (if any)
|
||||
[self removeParticipantByKey:mxMember.userId];
|
||||
|
||||
// If any, remove 3pid invite corresponding to this room member
|
||||
if (mxMember.thirdPartyInviteToken)
|
||||
MXRoomMember *mxMember = [self.mxRoom.state.members memberWithUserId:event.stateKey];
|
||||
if (mxMember)
|
||||
{
|
||||
[self removeParticipantByKey:mxMember.thirdPartyInviteToken];
|
||||
}
|
||||
// Remove previous occurrence of this member (if any)
|
||||
[self removeParticipantByKey:mxMember.userId];
|
||||
|
||||
[self handleRoomMember:mxMember];
|
||||
// If any, remove 3pid invite corresponding to this room member
|
||||
if (mxMember.thirdPartyInviteToken)
|
||||
{
|
||||
[self removeParticipantByKey:mxMember.thirdPartyInviteToken];
|
||||
}
|
||||
|
||||
[self handleRoomMember:mxMember];
|
||||
|
||||
[self finalizeParticipantsList];
|
||||
|
||||
[self refreshTableView];
|
||||
}
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
case MXEventTypeRoomThirdPartyInvite:
|
||||
{
|
||||
MXRoomThirdPartyInvite *thirdPartyInvite = [self.mxRoom.state thirdPartyInviteWithToken:event.stateKey];
|
||||
if (thirdPartyInvite)
|
||||
{
|
||||
[self addRoomThirdPartyInviteToParticipants:thirdPartyInvite];
|
||||
|
||||
[self finalizeParticipantsList];
|
||||
|
||||
[self refreshTableView];
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
case MXEventTypeRoomThirdPartyInvite:
|
||||
{
|
||||
MXRoomThirdPartyInvite *thirdPartyInvite = [self.mxRoom.state thirdPartyInviteWithToken:event.stateKey];
|
||||
if (thirdPartyInvite)
|
||||
case MXEventTypeRoomPowerLevels:
|
||||
{
|
||||
[self addRoomThirdPartyInviteToParticipants:thirdPartyInvite];
|
||||
|
||||
[self finalizeParticipantsList];
|
||||
[self refreshParticipantsFromRoomMembers];
|
||||
|
||||
[self refreshTableView];
|
||||
break;
|
||||
}
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
case MXEventTypeRoomPowerLevels:
|
||||
{
|
||||
[self refreshParticipantsFromRoomMembers];
|
||||
|
||||
[self refreshTableView];
|
||||
break;
|
||||
}
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
}];
|
||||
}];
|
||||
}
|
||||
else
|
||||
|
|
|
@ -3555,8 +3555,13 @@
|
|||
// Remove the previous live listener
|
||||
if (typingNotifListener)
|
||||
{
|
||||
[self.roomDataSource.room.liveTimeline removeListener:typingNotifListener];
|
||||
typingNotifListener = nil;
|
||||
MXWeakify(self);
|
||||
[self.roomDataSource.room liveTimeline:^(MXEventTimeline *liveTimeline) {
|
||||
MXStrongifyAndReturnIfNil(self);
|
||||
|
||||
[liveTimeline removeListener:self->typingNotifListener];
|
||||
self->typingNotifListener = nil;
|
||||
}];
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -3568,28 +3573,32 @@
|
|||
if (self.roomDataSource)
|
||||
{
|
||||
// Add typing notification listener
|
||||
typingNotifListener = [self.roomDataSource.room.liveTimeline listenToEventsOfTypes:@[kMXEventTypeStringTypingNotification] onEvent:^(MXEvent *event, MXTimelineDirection direction, MXRoomState *roomState) {
|
||||
MXWeakify(self);
|
||||
[self.roomDataSource.room liveTimeline:^(MXEventTimeline *liveTimeline) {
|
||||
MXStrongifyAndReturnIfNil(self);
|
||||
|
||||
// Handle only live events
|
||||
if (direction == MXTimelineDirectionForwards)
|
||||
{
|
||||
// Retrieve typing users list
|
||||
NSMutableArray *typingUsers = [NSMutableArray arrayWithArray:self.roomDataSource.room.typingUsers];
|
||||
// Remove typing info for the current user
|
||||
NSUInteger index = [typingUsers indexOfObject:self.mainSession.myUser.userId];
|
||||
if (index != NSNotFound)
|
||||
self->typingNotifListener = [liveTimeline listenToEventsOfTypes:@[kMXEventTypeStringTypingNotification] onEvent:^(MXEvent *event, MXTimelineDirection direction, MXRoomState *roomState) {
|
||||
|
||||
// Handle only live events
|
||||
if (direction == MXTimelineDirectionForwards)
|
||||
{
|
||||
[typingUsers removeObjectAtIndex:index];
|
||||
}
|
||||
// Retrieve typing users list
|
||||
NSMutableArray *typingUsers = [NSMutableArray arrayWithArray:self.roomDataSource.room.typingUsers];
|
||||
// Remove typing info for the current user
|
||||
NSUInteger index = [typingUsers indexOfObject:self.mainSession.myUser.userId];
|
||||
if (index != NSNotFound)
|
||||
{
|
||||
[typingUsers removeObjectAtIndex:index];
|
||||
}
|
||||
|
||||
// Ignore this notification if both arrays are empty
|
||||
if (currentTypingUsers.count || typingUsers.count)
|
||||
{
|
||||
currentTypingUsers = typingUsers;
|
||||
[self refreshActivitiesViewDisplay];
|
||||
// Ignore this notification if both arrays are empty
|
||||
if (currentTypingUsers.count || typingUsers.count)
|
||||
{
|
||||
currentTypingUsers = typingUsers;
|
||||
[self refreshActivitiesViewDisplay];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}];
|
||||
}];
|
||||
|
||||
// Retrieve the current typing users list
|
||||
|
|
|
@ -190,12 +190,17 @@ NSString *const kRoomSettingsAdvancedE2eEnabledCellViewIdentifier = @"kRoomSetti
|
|||
[super initWithSession:session andRoomId:roomId];
|
||||
|
||||
// Add an additional listener to update banned users
|
||||
extraEventsListener = [mxRoom.liveTimeline listenToEventsOfTypes:@[kMXEventTypeStringRoomMember] onEvent:^(MXEvent *event, MXTimelineDirection direction, MXRoomState *roomState) {
|
||||
MXWeakify(self);
|
||||
[mxRoom liveTimeline:^(MXEventTimeline *liveTimeline) {
|
||||
MXStrongifyAndReturnIfNil(self);
|
||||
|
||||
if (direction == MXTimelineDirectionForwards)
|
||||
{
|
||||
[self updateRoomState:roomState];
|
||||
}
|
||||
self->extraEventsListener = [liveTimeline listenToEventsOfTypes:@[kMXEventTypeStringRoomMember] onEvent:^(MXEvent *event, MXTimelineDirection direction, MXRoomState *roomState) {
|
||||
|
||||
if (direction == MXTimelineDirectionForwards)
|
||||
{
|
||||
[self updateRoomState:roomState];
|
||||
}
|
||||
}];
|
||||
}];
|
||||
}
|
||||
|
||||
|
@ -399,8 +404,13 @@ NSString *const kRoomSettingsAdvancedE2eEnabledCellViewIdentifier = @"kRoomSetti
|
|||
|
||||
if (extraEventsListener)
|
||||
{
|
||||
[mxRoom.liveTimeline removeListener:extraEventsListener];
|
||||
extraEventsListener = nil;
|
||||
MXWeakify(self);
|
||||
[mxRoom liveTimeline:^(MXEventTimeline *liveTimeline) {
|
||||
MXStrongifyAndReturnIfNil(self);
|
||||
|
||||
[liveTimeline removeListener:self->extraEventsListener];
|
||||
self->extraEventsListener = nil;
|
||||
}];
|
||||
}
|
||||
|
||||
[super destroy];
|
||||
|
|
Loading…
Reference in a new issue