New async [MXRoom state:]: Make Riot build

This commit is contained in:
manuroe 2018-07-20 10:34:54 +02:00
parent 81e7dd14ce
commit 2f90842345
7 changed files with 91 additions and 85 deletions

View file

@ -444,7 +444,7 @@ NSString *const kIntegrationManagerAddIntegrationScreen = @"add_integ";
- (void)canSendEvent:(NSString*)requestId data:(NSDictionary*)requestData - (void)canSendEvent:(NSString*)requestId data:(NSDictionary*)requestData
{ {
MXWeakify(self); MXWeakify(self);
[self roomCheckForRequest:requestId data:requestData onComplete:^(MXRoomState *room, MXRoomState *roomState) { [self roomCheckForRequest:requestId data:requestData onComplete:^(MXRoom *room, MXRoomState *roomState) {
MXStrongifyAndReturnIfNil(self); MXStrongifyAndReturnIfNil(self);
NSString *eventType; NSString *eventType;

View file

@ -271,7 +271,7 @@
for (MXReceiptData* data in receipts) for (MXReceiptData* data in receipts)
{ {
MXRoomMember * roomMember = [self.room.state.members memberWithUserId:data.userId]; MXRoomMember * roomMember = [self.roomState.members memberWithUserId:data.userId];
if (roomMember) if (roomMember)
{ {
[roomMembers addObject:roomMember]; [roomMembers addObject:roomMember];
@ -495,7 +495,7 @@
Widget *jitsiWidget; Widget *jitsiWidget;
// Note: Manage only one jitsi widget at a time for the moment // Note: Manage only one jitsi widget at a time for the moment
jitsiWidget = [[WidgetManager sharedManager] widgetsOfTypes:@[kWidgetTypeJitsi] inRoom:self.room].firstObject; jitsiWidget = [[WidgetManager sharedManager] widgetsOfTypes:@[kWidgetTypeJitsi] inRoom:self.room withRoomState:self.roomState].firstObject;
return jitsiWidget; return jitsiWidget;
} }

View file

@ -64,7 +64,7 @@
// The search result contains only room message events, no state events. // The search result contains only room message events, no state events.
// Thus, passing the current room state is not a huge problem. Only // Thus, passing the current room state is not a huge problem. Only
// the user display name and his avatar may be wrong. // the user display name and his avatar may be wrong.
RoomBubbleCellData *cellData = [[RoomBubbleCellData alloc] initWithEvent:result.result andRoomState:roomDataSource.room.state andRoomDataSource:roomDataSource]; RoomBubbleCellData *cellData = [[RoomBubbleCellData alloc] initWithEvent:result.result andRoomState:roomDataSource.roomState andRoomDataSource:roomDataSource];
if (cellData) if (cellData)
{ {
// Highlight the search pattern // Highlight the search pattern

View file

@ -477,7 +477,7 @@ NSString *const kRoomSettingsAdvancedE2eEnabledCellViewIdentifier = @"kRoomSetti
if (!eventTypeForSelectedField) if (!eventTypeForSelectedField)
return; return;
MXRoomPowerLevels *powerLevels = [mxRoom.state powerLevels]; MXRoomPowerLevels *powerLevels = [mxRoomState powerLevels];
NSInteger oneSelfPowerLevel = [powerLevels powerLevelOfUserWithUserID:self.mainSession.myUser.userId]; NSInteger oneSelfPowerLevel = [powerLevels powerLevelOfUserWithUserID:self.mainSession.myUser.userId];
if (oneSelfPowerLevel < [powerLevels minimumPowerLevelForSendingEventAsStateEvent:eventTypeForSelectedField]) if (oneSelfPowerLevel < [powerLevels minimumPowerLevelForSendingEventAsStateEvent:eventTypeForSelectedField])
@ -1973,7 +1973,7 @@ NSString *const kRoomSettingsAdvancedE2eEnabledCellViewIdentifier = @"kRoomSetti
if (self.mainSession) if (self.mainSession)
{ {
// Check user's power level to know whether the user is allowed to add room alias // Check user's power level to know whether the user is allowed to add room alias
MXRoomPowerLevels *powerLevels = [mxRoom.state powerLevels]; MXRoomPowerLevels *powerLevels = [mxRoomState powerLevels];
NSInteger oneSelfPowerLevel = [powerLevels powerLevelOfUserWithUserID:self.mainSession.myUser.userId]; NSInteger oneSelfPowerLevel = [powerLevels powerLevelOfUserWithUserID:self.mainSession.myUser.userId];
if (oneSelfPowerLevel >= [powerLevels minimumPowerLevelForSendingEventAsStateEvent:kMXEventTypeStringRoomAliases]) if (oneSelfPowerLevel >= [powerLevels minimumPowerLevelForSendingEventAsStateEvent:kMXEventTypeStringRoomAliases])
@ -1991,7 +1991,7 @@ NSString *const kRoomSettingsAdvancedE2eEnabledCellViewIdentifier = @"kRoomSetti
if (self.mainSession) if (self.mainSession)
{ {
// Check user's power level to know whether the user is allowed to add communities to this room // Check user's power level to know whether the user is allowed to add communities to this room
MXRoomPowerLevels *powerLevels = [mxRoom.state powerLevels]; MXRoomPowerLevels *powerLevels = [mxRoomState powerLevels];
NSInteger oneSelfPowerLevel = [powerLevels powerLevelOfUserWithUserID:self.mainSession.myUser.userId]; NSInteger oneSelfPowerLevel = [powerLevels powerLevelOfUserWithUserID:self.mainSession.myUser.userId];
if (oneSelfPowerLevel >= [powerLevels minimumPowerLevelForSendingEventAsStateEvent:kMXEventTypeStringRoomRelatedGroups]) if (oneSelfPowerLevel >= [powerLevels minimumPowerLevelForSendingEventAsStateEvent:kMXEventTypeStringRoomRelatedGroups])
@ -2128,7 +2128,7 @@ NSString *const kRoomSettingsAdvancedE2eEnabledCellViewIdentifier = @"kRoomSetti
UITableViewCell* cell; UITableViewCell* cell;
// Check user's power level to know which settings are editable. // Check user's power level to know which settings are editable.
MXRoomPowerLevels *powerLevels = [mxRoom.state powerLevels]; MXRoomPowerLevels *powerLevels = [mxRoomState powerLevels];
NSInteger oneSelfPowerLevel = [powerLevels powerLevelOfUserWithUserID:self.mainSession.myUser.userId]; NSInteger oneSelfPowerLevel = [powerLevels powerLevelOfUserWithUserID:self.mainSession.myUser.userId];
// general settings // general settings
@ -2742,7 +2742,7 @@ NSString *const kRoomSettingsAdvancedE2eEnabledCellViewIdentifier = @"kRoomSetti
else else
{ {
// Check user's power level to know whether the user is allowed to turn on the encryption mode // Check user's power level to know whether the user is allowed to turn on the encryption mode
MXRoomPowerLevels *powerLevels = [mxRoom.state powerLevels]; MXRoomPowerLevels *powerLevels = [mxRoomState powerLevels];
NSInteger oneSelfPowerLevel = [powerLevels powerLevelOfUserWithUserID:self.mainSession.myUser.userId]; NSInteger oneSelfPowerLevel = [powerLevels powerLevelOfUserWithUserID:self.mainSession.myUser.userId];
if (oneSelfPowerLevel >= [powerLevels minimumPowerLevelForSendingEventAsStateEvent:kMXEventTypeStringRoomEncryption]) if (oneSelfPowerLevel >= [powerLevels minimumPowerLevelForSendingEventAsStateEvent:kMXEventTypeStringRoomEncryption])

View file

@ -65,46 +65,49 @@
self.roomTopic.text = [MXTools stripNewlineCharacters:self.mxRoom.summary.topic]; self.roomTopic.text = [MXTools stripNewlineCharacters:self.mxRoom.summary.topic];
// Compute active members count // Compute active members count
NSArray *members = [self.mxRoom.state.members membersWithMembership:MXMembershipJoin includeConferenceUser:NO]; [self.mxRoom state:^(MXRoomState *roomState) {
NSUInteger activeCount = 0;
NSUInteger memberCount = 0;
for (MXRoomMember *mxMember in members)
{
memberCount ++;
// Get the user that corresponds to this member NSArray *members = [roomState.members membersWithMembership:MXMembershipJoin includeConferenceUser:NO];
MXUser *user = [self.mxRoom.mxSession userWithUserId:mxMember.userId]; NSUInteger activeCount = 0;
// existing user ? NSUInteger memberCount = 0;
if (user && user.presence == MXPresenceOnline) for (MXRoomMember *mxMember in members)
{ {
activeCount ++; memberCount ++;
}
}
if (memberCount) // Get the user that corresponds to this member
{ MXUser *user = [self.mxRoom.mxSession userWithUserId:mxMember.userId];
// Check whether the logged in user is alone in this room // existing user ?
if (memberCount == 1 && self.mxRoom.summary.membership == MXMembershipJoin) if (user && user.presence == MXPresenceOnline)
{
self.roomMembers.text = NSLocalizedStringFromTable(@"room_title_invite_members", @"Vector", nil);
}
else
{
if (activeCount > 1)
{ {
self.roomMembers.text = [NSString stringWithFormat:NSLocalizedStringFromTable(@"room_title_multiple_active_members", @"Vector", nil), @(activeCount), @(memberCount)]; activeCount ++;
}
}
if (memberCount)
{
// Check whether the logged in user is alone in this room
if (memberCount == 1 && self.mxRoom.summary.membership == MXMembershipJoin)
{
self.roomMembers.text = NSLocalizedStringFromTable(@"room_title_invite_members", @"Vector", nil);
} }
else else
{ {
self.roomMembers.text = [NSString stringWithFormat:NSLocalizedStringFromTable(@"room_title_one_active_member", @"Vector", nil), @(activeCount), @(memberCount)]; if (activeCount > 1)
{
self.roomMembers.text = [NSString stringWithFormat:NSLocalizedStringFromTable(@"room_title_multiple_active_members", @"Vector", nil), @(activeCount), @(memberCount)];
}
else
{
self.roomMembers.text = [NSString stringWithFormat:NSLocalizedStringFromTable(@"room_title_one_active_member", @"Vector", nil), @(activeCount), @(memberCount)];
}
} }
} }
} else
else {
{ // Should not happen
// Should not happen self.roomMembers.text = nil;
self.roomMembers.text = nil; }
} }];
} }
else else
{ {

View file

@ -182,51 +182,54 @@
self.roomTopic.text = [MXTools stripNewlineCharacters:self.mxRoom.summary.topic]; self.roomTopic.text = [MXTools stripNewlineCharacters:self.mxRoom.summary.topic];
// Compute active members count, and look for the inviter // Compute active members count, and look for the inviter
NSArray *members = self.mxRoom.state.members.members; [self.mxRoom state:^(MXRoomState *roomState) {
NSUInteger activeCount = 0;
NSUInteger memberCount = 0; NSArray *members = roomState.members.members;
NSString *inviter = nil; NSUInteger activeCount = 0;
NSUInteger memberCount = 0;
for (MXRoomMember *mxMember in members) NSString *inviter = nil;
{
if (mxMember.membership == MXMembershipJoin) for (MXRoomMember *mxMember in members)
{ {
memberCount ++; if (mxMember.membership == MXMembershipJoin)
// Get the user that corresponds to this member
MXUser *user = [self.mxRoom.mxSession userWithUserId:mxMember.userId];
// existing user ?
if (user && user.presence == MXPresenceOnline)
{ {
activeCount ++; memberCount ++;
// Get the user that corresponds to this member
MXUser *user = [self.mxRoom.mxSession userWithUserId:mxMember.userId];
// existing user ?
if (user && user.presence == MXPresenceOnline)
{
activeCount ++;
}
// Presently only one member is available from invited room data
// This is the inviter
inviter = mxMember.displayname.length ? mxMember.displayname : mxMember.userId;
} }
// Presently only one member is available from invited room data
// This is the inviter
inviter = mxMember.displayname.length ? mxMember.displayname : mxMember.userId;
} }
}
// FIXME: Display members status when it will be available
// FIXME: Display members status when it will be available self.roomMembers.text = nil;
self.roomMembers.text = nil; // if (memberCount)
// if (memberCount) // {
// { // if (activeCount > 1)
// if (activeCount > 1) // {
// { // self.roomMembers.text = [NSString stringWithFormat:NSLocalizedStringFromTable(@"room_title_multiple_active_members", @"Vector", nil), @(activeCount), @(memberCount)];
// self.roomMembers.text = [NSString stringWithFormat:NSLocalizedStringFromTable(@"room_title_multiple_active_members", @"Vector", nil), @(activeCount), @(memberCount)]; // }
// } // else
// else // {
// { // self.roomMembers.text = [NSString stringWithFormat:NSLocalizedStringFromTable(@"room_title_one_active_member", @"Vector", nil), @(activeCount), @(memberCount)];
// self.roomMembers.text = [NSString stringWithFormat:NSLocalizedStringFromTable(@"room_title_one_active_member", @"Vector", nil), @(activeCount), @(memberCount)]; // }
// } // }
// } // else
// else // {
// { // // Should not happen
// // Should not happen // self.roomMembers.text = nil;
// self.roomMembers.text = nil; // }
// }
self.previewLabel.text = [NSString stringWithFormat:NSLocalizedStringFromTable(@"room_preview_invitation_format", @"Vector", nil), inviter];
self.previewLabel.text = [NSString stringWithFormat:NSLocalizedStringFromTable(@"room_preview_invitation_format", @"Vector", nil), inviter]; }];
} }
else else
{ {

View file

@ -262,9 +262,9 @@ NSString *const kEventFormatterOnReRequestKeysLinkActionSeparator = @"/";
#pragma mark - MXRoomSummaryUpdating #pragma mark - MXRoomSummaryUpdating
- (BOOL)session:(MXSession *)session updateRoomSummary:(MXRoomSummary *)summary withStateEvents:(NSArray<MXEvent *> *)stateEvents - (BOOL)session:(MXSession *)session updateRoomSummary:(MXRoomSummary *)summary withStateEvents:(NSArray<MXEvent *> *)stateEvents roomState:(MXRoomState *)roomState
{ {
BOOL ret = [super session:session updateRoomSummary:summary withStateEvents:stateEvents]; BOOL ret = [super session:session updateRoomSummary:summary withStateEvents:stateEvents roomState:roomState];
// Check whether the room display name and/or the room avatar url should be updated at Riot level. // Check whether the room display name and/or the room avatar url should be updated at Riot level.
BOOL refreshRiotRoomDisplayName = NO; BOOL refreshRiotRoomDisplayName = NO;
@ -303,7 +303,7 @@ NSString *const kEventFormatterOnReRequestKeysLinkActionSeparator = @"/";
if (refreshRiotRoomDisplayName) if (refreshRiotRoomDisplayName)
{ {
NSString *riotRoomDisplayName = [self riotRoomDisplayNameFromRoomState:summary.room.state]; NSString *riotRoomDisplayName = [self riotRoomDisplayNameFromRoomState:roomState];
if (riotRoomDisplayName.length && ![summary.displayname isEqualToString:riotRoomDisplayName]) if (riotRoomDisplayName.length && ![summary.displayname isEqualToString:riotRoomDisplayName])
{ {
@ -313,7 +313,7 @@ NSString *const kEventFormatterOnReRequestKeysLinkActionSeparator = @"/";
} }
if (refreshRiotRoomAvatarURL) if (refreshRiotRoomAvatarURL)
{ {
NSString *riotRoomAvatarURL = [self riotRoomAvatarURLFromRoomState:summary.room.state]; NSString *riotRoomAvatarURL = [self riotRoomAvatarURLFromRoomState:roomState];
if (riotRoomAvatarURL.length && ![summary.avatar isEqualToString:riotRoomAvatarURL]) if (riotRoomAvatarURL.length && ![summary.avatar isEqualToString:riotRoomAvatarURL])
{ {