Console: Recents - Set blue the background cell for room with unread bing message(s).

This commit is contained in:
giomfo 2015-02-20 09:35:19 +01:00
parent 0f93cbcd41
commit 914bccca3e
4 changed files with 19 additions and 4 deletions

View file

@ -26,6 +26,7 @@ extern NSString *const kRecentRoomUpdatedByBackPagination;
@property (nonatomic, readonly) NSString *lastEventDescription;
@property (nonatomic, readonly) uint64_t lastEventOriginServerTs;
@property (nonatomic, readonly) NSUInteger unreadCount;
@property (nonatomic, readonly) BOOL containsBingUnread;
- (id)initWithLastEvent:(MXEvent*)event andRoomState:(MXRoomState*)roomState markAsUnread:(BOOL)isUnread;
// Update the current last event description with the provided event, except if this description is empty (see unsupported/unexpected events).

View file

@ -39,6 +39,9 @@ NSString *const kRecentRoomUpdatedByBackPagination = @"kRecentRoomUpdatedByBackP
_lastEventOriginServerTs = event.originServerTs;
_unreadCount = isUnread ? 1 : 0;
// In case of unread, check whether the last event description contains bing words
_containsBingUnread = (isUnread && !event.isState && !event.redactedBecause && [mxHandler containsBingWord:_lastEventDescription]);
// Keep ref on event
lastEvent = event;
@ -51,8 +54,9 @@ NSString *const kRecentRoomUpdatedByBackPagination = @"kRecentRoomUpdatedByBackP
}
- (BOOL)updateWithLastEvent:(MXEvent*)event andRoomState:(MXRoomState*)roomState markAsUnread:(BOOL)isUnread {
MatrixSDKHandler *mxHandler = [MatrixSDKHandler sharedHandler];
// Check whether the description of the provided event is not empty
NSString *description = [[MatrixSDKHandler sharedHandler] displayTextForEvent:event withRoomState:roomState inSubtitleMode:YES];
NSString *description = [mxHandler displayTextForEvent:event withRoomState:roomState inSubtitleMode:YES];
if (description.length) {
[self cancelBackPagination];
// Update current last event
@ -61,6 +65,7 @@ NSString *const kRecentRoomUpdatedByBackPagination = @"kRecentRoomUpdatedByBackP
_lastEventOriginServerTs = event.originServerTs;
if (isUnread) {
_unreadCount ++;
_containsBingUnread = (_containsBingUnread || (!event.isState && !event.redactedBecause && [mxHandler containsBingWord:_lastEventDescription]));
}
return YES;
} else if (_lastEventDescription.length) {
@ -73,11 +78,15 @@ NSString *const kRecentRoomUpdatedByBackPagination = @"kRecentRoomUpdatedByBackP
MXEvent *redactedEvent = [lastEvent prune];
redactedEvent.redactedBecause = event.originalDictionary;
_lastEventDescription = [[MatrixSDKHandler sharedHandler] displayTextForEvent:redactedEvent withRoomState:nil inSubtitleMode:YES];
_lastEventDescription = [mxHandler displayTextForEvent:redactedEvent withRoomState:nil inSubtitleMode:YES];
if (!_lastEventDescription.length) {
// The current last event must be removed, decrement the unread count (if not null)
if (_unreadCount) {
_unreadCount--;
if (_unreadCount == 0) {
_containsBingUnread = NO;
} // else _containsBingUnread may be false, we should perhaps reset this flag here
}
// Trigger back pagination to get an event with a non empty description
[self triggerBackPagination];
@ -91,6 +100,7 @@ NSString *const kRecentRoomUpdatedByBackPagination = @"kRecentRoomUpdatedByBackP
- (void)resetUnreadCount {
_unreadCount = 0;
_containsBingUnread = NO;
}
- (void)dealloc {

View file

@ -42,7 +42,7 @@ NSString *const kFailedEventIdPrefix = @"failedEventId-";
}
// Set component flags
_isStateEvent = (event.eventType != MXEventTypeRoomMessage);
_isStateEvent = event.isState;
_isIncomingMsg = ([event.userId isEqualToString:mxHandler.userId] == NO);
_isRedactedEvent = (event.redactedBecause != nil);

View file

@ -642,7 +642,11 @@
// Set background color
if (recentRoom.unreadCount) {
cell.backgroundColor = [UIColor colorWithRed:1 green:0.9 blue:0.9 alpha:1.0];
if (recentRoom.containsBingUnread) {
cell.backgroundColor = [UIColor colorWithRed:0.9 green:0.9 blue:1 alpha:1.0];
} else {
cell.backgroundColor = [UIColor colorWithRed:1 green:0.9 blue:0.9 alpha:1.0];
}
cell.roomTitle.text = [NSString stringWithFormat:@"%@ (%tu)", cell.roomTitle.text, recentRoom.unreadCount];
} else {
cell.backgroundColor = [UIColor clearColor];