Recents-Room details: Handle correctly left rooms

This commit is contained in:
giomfo 2014-12-08 15:22:26 +01:00
parent d8c3cf8de9
commit 17aaf5e078
2 changed files with 9 additions and 8 deletions

View file

@ -199,14 +199,9 @@
recentsListener = [mxHandler.mxSession listenToEventsOfTypes:mxHandler.eventsFilterForMessages onEvent:^(MXEvent *event, MXEventDirection direction, id customObject) {
// Consider only live event
if (direction == MXEventDirectionForwards) {
// Check user's membership (We will remove left rooms from recents)
BOOL isLeft = NO;
if ([customObject isKindOfClass:[MXRoomState class]]) {
MXRoomState *roomState = (MXRoomState*)customObject;
if (roomState.membership == MXMembershipLeave || roomState.membership == MXMembershipBan) {
isLeft = YES;
}
}
// Check user's membership in live room state (We will remove left rooms from recents)
MXRoom *mxRoom = [mxHandler.mxSession roomWithRoomId:event.roomId];
BOOL isLeft = (mxRoom == nil || mxRoom.state.membership == MXMembershipLeave || mxRoom.state.membership == MXMembershipBan);
// Consider this new event as unread only if the sender is not the user and if the room is not visible
BOOL isUnread = (![event.userId isEqualToString:mxHandler.userId]

View file

@ -294,6 +294,12 @@ NSString *const kCmdResetUserPowerLevel = @"/deop";
// Handle first live events
if (direction == MXEventDirectionForwards) {
// Check user's membership in live room state (Indeed we have to go back on recents when user leaves, or is kicked/banned)
if (mxRoom.state.membership == MXMembershipLeave || mxRoom.state.membership == MXMembershipBan) {
[self.navigationController popViewControllerAnimated:NO];
return;
}
// We will scroll to bottom after updating tableView only if the most recent message is entirely visible.
CGFloat maxPositionY = self.messagesTableView.contentOffset.y + (self.messagesTableView.frame.size.height - self.messagesTableView.contentInset.bottom);
shouldScrollToBottom = (maxPositionY >= self.messagesTableView.contentSize.height);