session-ios/Signal/src/contact/Contact.m

135 lines
4.1 KiB
Objective-C

#import "Contact.h"
#import "ContactsManager.h"
#import "Environment.h"
#import "SignalRecipient.h"
static NSString *const DEFAULTS_KEY_CONTACT = @"DefaultsKeyContact";
static NSString *const DEFAULTS_KEY_PHONE_NUMBER = @"DefaultsKeyPhoneNumber";
static NSString *const DEFAULTS_KEY_CALL_TYPE = @"DefaultsKeycallType";
static NSString *const DEFAULTS_KEY_DATE = @"DefaultsKeyDate";
@implementation Contact
@synthesize firstName, lastName, emails, image, recordID, notes, parsedPhoneNumbers, userTextPhoneNumbers;
+ (Contact*)contactWithFirstName:(NSString*)firstName
andLastName:(NSString *)lastName
andUserTextPhoneNumbers:(NSArray*)phoneNumbers
andEmails:(NSArray*)emails
andContactID:(ABRecordID)record {
Contact* contact = [Contact new];
contact->firstName = firstName;
contact->lastName = lastName;
contact->userTextPhoneNumbers = phoneNumbers;
contact->emails = emails;
contact->recordID = record;
NSMutableArray *parsedPhoneNumbers = [NSMutableArray array];
for (NSString *phoneNumberString in phoneNumbers) {
PhoneNumber *phoneNumber = [PhoneNumber tryParsePhoneNumberFromUserSpecifiedText:phoneNumberString];
if (phoneNumber) {
[parsedPhoneNumbers addObject:phoneNumber];
}
}
contact->parsedPhoneNumbers = parsedPhoneNumbers.copy;
return contact;
}
+ (Contact*)contactWithFirstName:(NSString*)firstName
andLastName:(NSString *)lastName
andUserTextPhoneNumbers:(NSArray*)numbers
andEmails:(NSArray*)emails
andImage:(UIImage *)image
andContactID:(ABRecordID)record
andNotes:(NSString *)notes {
Contact* contact = [Contact contactWithFirstName:firstName
andLastName:lastName
andUserTextPhoneNumbers:numbers
andEmails:emails
andContactID:record];
contact->image = image;
contact->notes = notes;
return contact;
}
- (NSString *)fullName {
NSMutableString *fullName = [NSMutableString string];
if (firstName) [fullName appendString:firstName];
if (lastName) {
[fullName appendString:[NSString stringWithFormat:@" %@",lastName]];
}
return fullName;
}
- (NSString *)allPhoneNumbers {
NSString * allNumbers = @"";
for (PhoneNumber *number in self.parsedPhoneNumbers) {
allNumbers = [allNumbers stringByAppendingString:number.toE164];
allNumbers = [allNumbers stringByAppendingString:@";"];
}
return allNumbers;
}
-(NSString *)description {
return [NSString stringWithFormat:@"%@ %@: %@", firstName, lastName, userTextPhoneNumbers];
}
- (UIImage *)image {
return image;
}
- (BOOL)isTextSecureContact{
NSArray *identifiers = [self textSecureIdentifiers];
if ([identifiers count] > 0) {
return YES;
}
return NO;
}
- (NSArray*)textSecureIdentifiers{
__block NSMutableArray *identifiers = [NSMutableArray array];
[[TSStorageManager sharedManager].dbConnection readWithBlock:^(YapDatabaseReadTransaction *transaction) {
for (PhoneNumber *number in self.parsedPhoneNumbers) {
if ([SignalRecipient recipientWithTextSecureIdentifier:number.toE164 withTransaction:transaction]) {
[identifiers addObject:number.toE164];
}
}
}];
return identifiers;
}
- (BOOL)isRedPhoneContact{
NSArray *identifiers = [self redPhoneIdentifiers];
if ([identifiers count] > 0) {
return YES;
}
return NO;
}
- (NSArray *)redPhoneIdentifiers{
__block NSMutableArray *identifiers = [NSMutableArray array];
[[TSStorageManager sharedManager].dbConnection readWithBlock:^(YapDatabaseReadTransaction *transaction) {
for (PhoneNumber *number in self.parsedPhoneNumbers) {
SignalRecipient *recipient = [SignalRecipient recipientWithTextSecureIdentifier:number.toE164 withTransaction:transaction];
if (recipient && recipient.supportsVoice) {
[identifiers addObject:number.toE164];
}
}
}];
return identifiers;
}
@end