Developer Area

Changeset 395

Show
Ignore:
Timestamp:
06/15/09 17:56:35 (5 years ago)
Author:
henri
Message:

Phone numbers now properly compare if spaces, parens or dashes exist.

Location:
apps/iphone/superbook/trunk/Classes
Files:
2 modified

Legend:

Unmodified
Added
Removed
  • apps/iphone/superbook/trunk/Classes/DotTelABMapper.h

    r382 r395  
    5454- (NSError *)setField:(id)field; 
    5555 
     56- (BOOL)record:(NSString *)aRec isEqualToRecord:(NSString *)otherRec forProperty:(ABPropertyID)property; 
     57- (BOOL)phone:(NSString *)aPhone isEqualToPhone:(NSString *)otherPhone; 
     58 
    5659@end 
  • apps/iphone/superbook/trunk/Classes/DotTelABMapper.m

    r394 r395  
    4949                                                                                CFStringRef aVal = (CFStringRef)ABMultiValueCopyValueAtIndex(allupdated, i); \ 
    5050                                                                                if (aVal) { \ 
    51                                                                                         if (CFStringCompare(abValue, aVal, 0) == kCFCompareEqualTo) { \ 
     51                                                                                        if ([self record:(NSString *)abValue isEqualToRecord:(NSString *)aVal forProperty:kValType]) { \ 
    5252                                                                                                exists = YES; \ 
    5353                                                                                                CFRelease(aVal); \ 
     
    613613} 
    614614 
     615#pragma mark ---- utility methods ---- 
     616 
     617- (BOOL)record:(NSString *)aRec isEqualToRecord:(NSString *)otherRec forProperty:(ABPropertyID)property { 
     618        if (property == kABPersonPhoneProperty) 
     619                return [self phone:aRec isEqualToPhone:aRec]; 
     620        return [aRec isEqualToString:otherRec]; 
     621} 
     622 
     623- (BOOL)phone:(NSString *)aPhone isEqualToPhone:(NSString *)otherPhone { 
     624        char *p1 = (char *)[aPhone cStringUsingEncoding:NSUTF8StringEncoding]; 
     625        char *p2 = (char *)[otherPhone cStringUsingEncoding:NSUTF8StringEncoding]; 
     626        BOOL areEqual = TRUE; 
     627        int i = 0; 
     628        int j = 0; 
     629        while ((char)p1[i] != '\0') { 
     630                if ((p1[i] == ' ') || (p1[i] == '-') || (p1[i] == '(') || (p1[i] == ')')) { 
     631                        i++; 
     632                        //NSLog(@"Skipped p1 char '%c' at index %d", p1[i], i); 
     633                        continue; 
     634                } 
     635                if (p2[j] == '\0') { 
     636                        //NSLog(@"End of p2 at %d, shorter than p1 at %d", j, i); 
     637                        areEqual = FALSE; 
     638                        break; 
     639                } 
     640                while (p2[j] != '\0') { 
     641                        if ((p2[j] == ' ') || (p2[j] == '-') || (p2[j] == '(') || (p2[j] == ')')) { 
     642                                //NSLog(@"Skipped p2 char '%c' at index %d", p2[j], i); 
     643                                j++; 
     644                                continue; 
     645                        } 
     646                        if(p1[i] != p2[j]) { 
     647                                areEqual = FALSE; 
     648                                //NSLog(@"Failed compare of p1[%d] '%c' and p2[%d] '%c'", i, p1[i], j, p2[j]); 
     649                                break; 
     650                        } 
     651                        //NSLog(@"Success compare of p1[%d] '%c' and p2[%d] '%c'", i, p1[i], j, p2[j]); 
     652                        i++; 
     653                        j++; 
     654                        break; 
     655                } 
     656                if (!areEqual)  // we already have a miss 
     657                        break; 
     658        } 
     659        if (areEqual) { // we are equal up to end of p1. Check that p2 isn't longer 
     660                while (p2[j] != '\0') { 
     661                        if ((p2[j] == ' ') || (p2[j] == '-') || (p2[j] == '(') || (p2[j] == ')')) { 
     662                                //NSLog(@"Skipped p2 char '%c' at index %d, after p1 end", p1[i], i); 
     663                                j++; 
     664                                continue; 
     665                        } 
     666                        //NSLog(@"Extra character(s) for p2 starting at index %d: '%c'", j, p2[j]); 
     667                        areEqual = FALSE; 
     668                        break; 
     669                } 
     670        } 
     671        return areEqual; 
     672} 
     673 
    615674#pragma mark ---- cleanup ---- 
    616675 
Telnic
Search This Site
Partners
Neustar
ICANN
Main site | WHOIS | Sell .tel | FAQ | Archived Site | About Telnic | Contact Us