Merge branch 'mkirk/cache-phone-number-parsing'

pull/1/head
Michael Kirk 9 years ago
commit 57a799ef92

@ -16,20 +16,20 @@ static NSString *const RPDefaultsKeyPhoneNumberCanonical = @"RPDefaultsKeyPhoneN
OWSAssert(text != nil);
OWSAssert(regionCode != nil);
NBPhoneNumberUtil *phoneUtil = [PhoneNumberUtil sharedUtil].nbPhoneNumberUtil;
PhoneNumberUtil *phoneUtil = [PhoneNumberUtil sharedUtil];
NSError *parseError = nil;
NBPhoneNumber *number = [phoneUtil parse:text defaultRegion:regionCode error:&parseError];
if (parseError) {
DDLogWarn(@"Issue while parsing number: %@", [parseError description]);
DDLogDebug(@"Issue while parsing number: %@", [parseError description]);
return nil;
}
NSError *toE164Error;
NSString *e164 = [phoneUtil format:number numberFormat:NBEPhoneNumberFormatE164 error:&toE164Error];
if (toE164Error) {
DDLogWarn(@"Issue while parsing number: %@", [toE164Error description]);
DDLogDebug(@"Issue while formatting number: %@", [toE164Error description]);
return nil;
}

@ -26,4 +26,9 @@
+ (instancetype)sharedUtil;
- (NBPhoneNumber *)parse:(NSString *)numberToParse defaultRegion:(NSString *)defaultRegion error:(NSError **)error;
- (NSString *)format:(NBPhoneNumber *)phoneNumber
numberFormat:(NBEPhoneNumberFormat)numberFormat
error:(NSError **)error;
@end

@ -6,10 +6,12 @@
#import "ContactsManagerProtocol.h"
#import "FunctionalUtil.h"
#import "Util.h"
#import <libPhoneNumber-iOS/NBPhoneNumber.h>
@interface PhoneNumberUtil ()
@property (nonatomic, readonly) NSMutableDictionary *countryCodesFromCallingCodeCache;
@property (nonatomic, readonly) NSCache *parsedPhoneNumberCache;
@end
@ -32,6 +34,7 @@
if (self) {
_nbPhoneNumberUtil = [[NBPhoneNumberUtil alloc] init];
_countryCodesFromCallingCodeCache = [NSMutableDictionary new];
_parsedPhoneNumberCache = [NSCache new];
OWSSingletonAssert();
}
@ -39,6 +42,44 @@
return self;
}
- (nullable NBPhoneNumber *)parse:(NSString *)numberToParse
defaultRegion:(NSString *)defaultRegion
error:(NSError **)error
{
NSString *hashKey = [NSString stringWithFormat:@"numberToParse:%@defaultRegion:%@", numberToParse, defaultRegion];
NBPhoneNumber *result = [self.parsedPhoneNumberCache objectForKey:hashKey];
if (!result) {
result = [self.nbPhoneNumberUtil parse:numberToParse defaultRegion:defaultRegion error:error];
if (error && *error) {
OWSAssert(!result);
return nil;
}
OWSAssert(result);
if (result) {
[self.parsedPhoneNumberCache setObject:result forKey:hashKey];
} else {
[self.parsedPhoneNumberCache setObject:[NSNull null] forKey:hashKey];
}
}
if ([result class] == [NSNull class]) {
return nil;
} else {
return result;
}
}
- (NSString *)format:(NBPhoneNumber *)phoneNumber
numberFormat:(NBEPhoneNumberFormat)numberFormat
error:(NSError **)error
{
return [self.nbPhoneNumberUtil format:phoneNumber numberFormat:numberFormat error:error];
}
// country code -> country name
+ (NSString *)countryNameFromCountryCode:(NSString *)countryCode {
NSDictionary *countryCodeComponent = @{NSLocaleCountryCode : countryCode};

Loading…
Cancel
Save