Messages display: Use local part of userId (instead of full userId) to apply 'bing' style on incoming messages.

This commit is contained in:
giomfo 2014-12-08 17:41:56 +01:00
parent 94e0014bde
commit 8b741725f4
4 changed files with 27 additions and 6 deletions

View file

@ -27,6 +27,7 @@ extern NSString *const kMatrixHandlerUnsupportedMessagePrefix;
@property (strong, nonatomic) NSString *homeServer;
@property (strong, nonatomic) NSString *userLogin;
@property (strong, nonatomic) NSString *userId;
@property (strong, nonatomic, readonly) NSString *localPartFromUserId;
@property (strong, nonatomic) NSString *accessToken;
// The type of events to display

View file

@ -238,6 +238,7 @@ static MatrixHandler *sharedHandler = nil;
- (void)logout {
// Reset access token (mxSession is closed by setter)
self.accessToken = nil;
self.userId = nil;
// Reset local storage of user's settings
self.userDisplayName = @"";
@ -358,12 +359,28 @@ static MatrixHandler *sharedHandler = nil;
- (void)setUserId:(NSString *)inUserId {
if (inUserId.length) {
[[NSUserDefaults standardUserDefaults] setObject:inUserId forKey:@"userid"];
// Deduce local userid
[[NSUserDefaults standardUserDefaults] removeObjectForKey:@"localuserid"];
NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:@"@(.*):\\w+" options:NSRegularExpressionCaseInsensitive error:nil];
NSTextCheckingResult *match = [regex firstMatchInString:inUserId options:0 range:NSMakeRange(0, [inUserId length])];
if (match.numberOfRanges == 2) {
NSString* localId = [inUserId substringWithRange:[match rangeAtIndex:1]];
if (localId) {
[[NSUserDefaults standardUserDefaults] setObject:localId forKey:@"localuserid"];
}
}
} else {
[[NSUserDefaults standardUserDefaults] removeObjectForKey:@"userid"];
[[NSUserDefaults standardUserDefaults] removeObjectForKey:@"localuserid"];
}
[[NSUserDefaults standardUserDefaults] synchronize];
}
- (NSString *)localPartFromUserId {
return [[NSUserDefaults standardUserDefaults] objectForKey:@"localuserid"];
}
- (NSString *)accessToken {
return [[NSUserDefaults standardUserDefaults] objectForKey:@"accesstoken"];
}

View file

@ -21,7 +21,7 @@ extern NSString *const kFailedEventId;
typedef enum : NSUInteger {
RoomMessageComponentStyleDefault,
RoomMessageComponentStyleHighlighted,
RoomMessageComponentStyleBing,
RoomMessageComponentStyleInProgress,
RoomMessageComponentStyleFailed,
RoomMessageComponentStyleUnsupported

View file

@ -43,21 +43,24 @@ NSString *const kFailedEventId = @"failedEventId";
_date = nil;
}
// Set state event flag
_isStateEvent = (event.eventType != MXEventTypeRoomMessage);
// Set style
BOOL isIncomingMsg = ([event.userId isEqualToString:mxHandler.userId] == NO);
if ([textMessage hasPrefix:kMatrixHandlerUnsupportedMessagePrefix]) {
_style = RoomMessageComponentStyleUnsupported;
} else if ([_eventId hasPrefix:kFailedEventId]) {
_style = RoomMessageComponentStyleFailed;
} else if (isIncomingMsg && ([textMessage rangeOfString:mxHandler.userDisplayName options:NSCaseInsensitiveSearch].location != NSNotFound || [textMessage rangeOfString:mxHandler.userId options:NSCaseInsensitiveSearch].location != NSNotFound)) {
_style = RoomMessageComponentStyleHighlighted;
} else if (isIncomingMsg && !_isStateEvent
&& ([textMessage rangeOfString:mxHandler.userDisplayName options:NSCaseInsensitiveSearch].location != NSNotFound
|| (mxHandler.localPartFromUserId && [textMessage rangeOfString:mxHandler.localPartFromUserId options:NSCaseInsensitiveSearch].location != NSNotFound))) {
_style = RoomMessageComponentStyleBing;
} else if (!isIncomingMsg && [_eventId hasPrefix:kLocalEchoEventIdPrefix]) {
_style = RoomMessageComponentStyleInProgress;
} else {
_style = RoomMessageComponentStyleDefault;
}
_isStateEvent = (event.eventType != MXEventTypeRoomMessage);
} else {
// Ignore this event
self = nil;
@ -74,7 +77,7 @@ NSString *const kFailedEventId = @"failedEventId";
case RoomMessageComponentStyleDefault:
textColor = [UIColor blackColor];
break;
case RoomMessageComponentStyleHighlighted:
case RoomMessageComponentStyleBing:
textColor = [UIColor blueColor];
break;
case RoomMessageComponentStyleInProgress: