| | 1302 | |
|---|
| | 1303 | #pragma mark - |
|---|
| | 1304 | |
|---|
| | 1305 | - (MVChatRoomMemberMode) _modeForNicknamePrefixCharacter:(unichar) character { |
|---|
| | 1306 | switch( character ) { |
|---|
| | 1307 | case '+': return MVChatRoomMemberVoicedMode; |
|---|
| | 1308 | case '%': return MVChatRoomMemberHalfOperatorMode; |
|---|
| | 1309 | case '@': return MVChatRoomMemberOperatorMode; |
|---|
| | 1310 | case '&': return MVChatRoomMemberAdministratorMode; |
|---|
| | 1311 | case '!': return MVChatRoomMemberAdministratorMode; |
|---|
| | 1312 | case '*': return MVChatRoomMemberFounderMode; |
|---|
| | 1313 | case '~': return MVChatRoomMemberFounderMode; |
|---|
| | 1314 | case '.': return MVChatRoomMemberFounderMode; |
|---|
| | 1315 | } |
|---|
| | 1316 | |
|---|
| | 1317 | return MVChatRoomMemberNoModes; |
|---|
| | 1318 | } |
|---|
| | 1319 | |
|---|
| | 1320 | - (MVChatRoomMemberMode) _stripModePrefixesFromNickname:(NSString **) nicknamePtr { |
|---|
| | 1321 | NSString *nickname = *nicknamePtr; |
|---|
| | 1322 | MVChatRoomMemberMode modes = MVChatRoomMemberNoModes; |
|---|
| | 1323 | NSMutableDictionary *prefixes = [_serverInformation objectForKey:@"roomMemberPrefixTable"]; |
|---|
| | 1324 | |
|---|
| | 1325 | unsigned i = 0; |
|---|
| | 1326 | unsigned length = [nickname length]; |
|---|
| | 1327 | for( i = 0; i < length; ++i ) { |
|---|
| | 1328 | if( [prefixes count] ) { |
|---|
| | 1329 | NSNumber *prefix = [prefixes objectForKey:[NSString stringWithFormat:@"%c", [nickname characterAtIndex:i]]]; |
|---|
| | 1330 | if( prefix ) modes |= [prefix unsignedLongValue]; |
|---|
| | 1331 | else break; |
|---|
| | 1332 | } else { |
|---|
| | 1333 | MVChatRoomMemberMode mode = [self _modeForNicknamePrefixCharacter:[nickname characterAtIndex:i]]; |
|---|
| | 1334 | if( mode != MVChatRoomMemberNoModes ) modes |= mode; |
|---|
| | 1335 | else break; |
|---|
| | 1336 | } |
|---|
| | 1337 | } |
|---|
| | 1338 | |
|---|
| | 1339 | if( i ) *nicknamePtr = [nickname substringFromIndex:i]; |
|---|
| | 1340 | return modes; |
|---|
| | 1341 | } |
|---|
| 1434 | | MVChatRoomMemberMode mode = MVChatRoomMemberNoModes; |
|---|
| 1435 | | switch( [prefixes characterAtIndex:i] ) { |
|---|
| 1436 | | case '+': mode = MVChatRoomMemberVoicedMode; break; |
|---|
| 1437 | | case '%': mode = MVChatRoomMemberHalfOperatorMode; break; |
|---|
| 1438 | | case '@': mode = MVChatRoomMemberOperatorMode; break; |
|---|
| 1439 | | case '&': mode = MVChatRoomMemberAdministratorMode; break; |
|---|
| 1440 | | case '!': mode = MVChatRoomMemberAdministratorMode; break; |
|---|
| 1441 | | case '*': mode = MVChatRoomMemberFounderMode; break; |
|---|
| 1442 | | case '~': mode = MVChatRoomMemberFounderMode; break; |
|---|
| 1443 | | case '.': mode = MVChatRoomMemberFounderMode; break; |
|---|
| 1444 | | default: break; |
|---|
| 1445 | | } |
|---|
| 1446 | | |
|---|
| | 1474 | MVChatRoomMemberMode mode = [self _modeForNicknamePrefixCharacter:[prefixes characterAtIndex:i]]; |
|---|
| 2499 | | MVChatRoomMemberMode modes = MVChatRoomMemberNoModes; |
|---|
| 2500 | | NSMutableDictionary *prefixes = [_serverInformation objectForKey:@"roomMemberPrefixTable"]; |
|---|
| 2501 | | if( [prefixes count] ) { |
|---|
| 2502 | | NSString *key = [[NSString allocWithZone:nil] initWithFormat:@"%c", [memberName characterAtIndex:0]]; |
|---|
| 2503 | | modes = [[prefixes objectForKey:key] unsignedLongValue]; |
|---|
| 2504 | | [key release]; |
|---|
| 2505 | | } else { |
|---|
| 2506 | | switch( [memberName characterAtIndex:0] ) { |
|---|
| 2507 | | case '+': modes = MVChatRoomMemberVoicedMode; break; |
|---|
| 2508 | | case '@': modes = MVChatRoomMemberOperatorMode; break; |
|---|
| 2509 | | default: break; |
|---|
| 2510 | | } |
|---|
| 2511 | | } |
|---|
| 2512 | | |
|---|
| 2513 | | if( modes != MVChatRoomMemberNoModes ) |
|---|
| 2514 | | memberName = [memberName substringFromIndex:1]; |
|---|
| 2515 | | |
|---|
| | 2527 | MVChatRoomMemberMode modes = [self _stripModePrefixesFromNickname:&memberName]; |
|---|