mirror of https://github.com/oxen-io/session-ios
				
				
				
			
			You cannot select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
	
	
		
			83 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			Objective-C
		
	
			
		
		
	
	
			83 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			Objective-C
		
	
//
 | 
						|
//  Copyright (c) 2018 Open Whisper Systems. All rights reserved.
 | 
						|
//
 | 
						|
 | 
						|
#import "TSContactThread.h"
 | 
						|
#import <YapDatabase/YapDatabase.h>
 | 
						|
#import <SessionMessagingKit/SessionMessagingKit-Swift.h>
 | 
						|
 | 
						|
NS_ASSUME_NONNULL_BEGIN
 | 
						|
 | 
						|
NSString *const TSContactThreadPrefix = @"c";
 | 
						|
 | 
						|
@implementation TSContactThread
 | 
						|
 | 
						|
- (instancetype)initWithContactSessionID:(NSString *)contactSessionID {
 | 
						|
    NSString *uniqueIdentifier = [[self class] threadIDFromContactSessionID:contactSessionID];
 | 
						|
 | 
						|
    self = [super initWithUniqueId:uniqueIdentifier];
 | 
						|
 | 
						|
    return self;
 | 
						|
}
 | 
						|
 | 
						|
+ (instancetype)getOrCreateThreadWithContactSessionID:(NSString *)contactSessionID
 | 
						|
                                   transaction:(YapDatabaseReadWriteTransaction *)transaction {
 | 
						|
    TSContactThread *thread =
 | 
						|
        [self fetchObjectWithUniqueID:[self threadIDFromContactSessionID:contactSessionID] transaction:transaction];
 | 
						|
 | 
						|
    if (!thread) {
 | 
						|
        thread = [[TSContactThread alloc] initWithContactSessionID:contactSessionID];
 | 
						|
        [thread saveWithTransaction:transaction];
 | 
						|
    }
 | 
						|
 | 
						|
    return thread;
 | 
						|
}
 | 
						|
 | 
						|
+ (instancetype)getOrCreateThreadWithContactSessionID:(NSString *)contactSessionID
 | 
						|
{
 | 
						|
    __block TSContactThread *thread;
 | 
						|
    [LKStorage writeSyncWithBlock:^(YapDatabaseReadWriteTransaction *transaction) {
 | 
						|
        thread = [self getOrCreateThreadWithContactSessionID:contactSessionID transaction:transaction];
 | 
						|
    }];
 | 
						|
 | 
						|
    return thread;
 | 
						|
}
 | 
						|
 | 
						|
+ (nullable instancetype)getThreadWithContactSessionID:(NSString *)contactSessionID transaction:(YapDatabaseReadTransaction *)transaction;
 | 
						|
{
 | 
						|
    return [TSContactThread fetchObjectWithUniqueID:[self threadIDFromContactSessionID:contactSessionID] transaction:transaction];
 | 
						|
}
 | 
						|
 | 
						|
- (NSString *)contactSessionID {
 | 
						|
    return [[self class] contactSessionIDFromThreadID:self.uniqueId];
 | 
						|
}
 | 
						|
 | 
						|
- (NSArray<NSString *> *)recipientIdentifiers
 | 
						|
{
 | 
						|
    return @[ self.contactSessionID ];
 | 
						|
}
 | 
						|
 | 
						|
- (BOOL)isGroupThread
 | 
						|
{
 | 
						|
    return NO;
 | 
						|
}
 | 
						|
 | 
						|
- (NSString *)name
 | 
						|
{
 | 
						|
    NSString *sessionID = self.contactSessionID;
 | 
						|
    SNContact *contact = [LKStorage.shared getContactWithSessionID:sessionID];
 | 
						|
    return [contact displayNameFor:SNContactContextRegular] ?: sessionID;
 | 
						|
}
 | 
						|
 | 
						|
+ (NSString *)threadIDFromContactSessionID:(NSString *)contactSessionID {
 | 
						|
    return [TSContactThreadPrefix stringByAppendingString:contactSessionID];
 | 
						|
}
 | 
						|
 | 
						|
+ (NSString *)contactSessionIDFromThreadID:(NSString *)threadId {
 | 
						|
    return [threadId substringWithRange:NSMakeRange(1, threadId.length - 1)];
 | 
						|
}
 | 
						|
 | 
						|
@end
 | 
						|
 | 
						|
NS_ASSUME_NONNULL_END
 |