session-ios/Signal/src/textsecure/Contacts/Threads/TSContactThread.m
Frederic Jacobs 9569a9b9c6 Multiple visual enhancements and repo cleanup.
- Revising iconography to stick to v2.0 design.
- Multiple bug fixes based on testers feedback
- Integration with system addressbook
- Removing unused assets.
2015-02-18 18:20:02 +01:00

93 lines
2.8 KiB
Objective-C

//
// TSContactThread.m
// TextSecureKit
//
// Created by Frederic Jacobs on 16/11/14.
// Copyright (c) 2014 Open Whisper Systems. All rights reserved.
//
#import "TSContactThread.h"
#import "Environment.h"
#import "IncomingPushMessageSignal.pb.h"
#import "TSStorageManager.h"
#import "ContactsManager.h"
#import "TSRecipient.h"
#define TSContactThreadPrefix @"c"
@implementation TSContactThread
- (instancetype)initWithContactId:(NSString*)contactId{
NSString *uniqueIdentifier = [[self class] threadIdFromContactId:contactId];
self = [super initWithUniqueId:uniqueIdentifier];
return self;
}
+ (instancetype)getOrCreateThreadWithContactId:(NSString*)contactId transaction:(YapDatabaseReadWriteTransaction*)transaction pushSignal:(IncomingPushMessageSignal*)pushSignal{
TSRecipient *recipient = [TSRecipient recipientWithTextSecureIdentifier:contactId withTransaction:transaction];
if (!recipient) {
recipient = [[TSRecipient alloc] initWithTextSecureIdentifier:contactId relay:pushSignal.hasRelay?pushSignal.relay:nil];
[recipient saveWithTransaction:transaction];
}
return [self getOrCreateThreadWithContactId:contactId transaction:transaction];
}
+ (instancetype)getOrCreateThreadWithContactId:(NSString*)contactId transaction:(YapDatabaseReadWriteTransaction*)transaction {
TSContactThread *thread = [self fetchObjectWithUniqueID:[self threadIdFromContactId:contactId] transaction:transaction];
if (!thread) {
thread = [[TSContactThread alloc] initWithContactId:contactId];
[thread saveWithTransaction:transaction];
}
return thread;
}
- (NSString*)contactIdentifier{
return [[self class]contactIdFromThreadId:self.uniqueId];
}
- (BOOL)isGroupThread{
return false;
}
- (NSString*)name{
NSString *contactId = [self contactIdentifier];
NSString *name = [[Environment getCurrent].contactsManager nameStringForPhoneIdentifier:contactId];
if (!name) {
name = contactId;
}
return name;
}
- (UIImage*)image{
UIImage *image = [[Environment getCurrent].contactsManager imageForPhoneIdentifier:self.contactIdentifier];
return image;
}
+ (NSString*)threadIdFromContactId:(NSString*)contactId{
return [TSContactThreadPrefix stringByAppendingString:contactId];
}
+ (NSString*)contactIdFromThreadId:(NSString*)threadId{
return [threadId substringWithRange:NSMakeRange(1, threadId.length-1)];
}
- (TSRecipient *)recipientWithTransaction:(YapDatabaseReadTransaction*)transaction{
TSRecipient *recipient = [TSRecipient recipientWithTextSecureIdentifier:self.contactIdentifier withTransaction:transaction];
if (!recipient){
recipient = [[TSRecipient alloc] initWithTextSecureIdentifier:self.contactIdentifier relay:nil];
}
return recipient;
}
@end