session-ios/SessionMessagingKit/Threads/TSContactThread.m

88 lines
2.6 KiB
Mathematica
Raw Normal View History

2020-11-11 00:58:56 +01:00
//
// Copyright (c) 2018 Open Whisper Systems. All rights reserved.
//
#import "TSContactThread.h"
2020-11-25 06:15:16 +01:00
#import <YapDatabase/YapDatabase.h>
#import <SessionMessagingKit/SessionMessagingKit-Swift.h>
2020-11-11 00:58:56 +01:00
NS_ASSUME_NONNULL_BEGIN
NSString *const TSContactThreadPrefix = @"c";
@implementation TSContactThread
- (instancetype)initWithContactSessionID:(NSString *)contactSessionID {
NSString *uniqueIdentifier = [[self class] threadIDFromContactSessionID:contactSessionID];
2020-11-11 00:58:56 +01:00
self = [super initWithUniqueId:uniqueIdentifier];
return self;
}
+ (instancetype)getOrCreateThreadWithContactSessionID:(NSString *)contactSessionID
2020-11-11 00:58:56 +01:00
transaction:(YapDatabaseReadWriteTransaction *)transaction {
TSContactThread *thread =
[self fetchObjectWithUniqueID:[self threadIDFromContactSessionID:contactSessionID] transaction:transaction];
2020-11-11 00:58:56 +01:00
if (!thread) {
thread = [[TSContactThread alloc] initWithContactSessionID:contactSessionID];
2020-11-11 00:58:56 +01:00
[thread saveWithTransaction:transaction];
}
return thread;
}
+ (instancetype)getOrCreateThreadWithContactSessionID:(NSString *)contactSessionID
2020-11-11 00:58:56 +01:00
{
__block TSContactThread *thread;
2021-07-29 06:54:14 +02:00
[LKStorage readWithBlock:^(YapDatabaseReadTransaction *transaction) {
thread = [self getThreadWithContactSessionID:contactSessionID transaction:transaction];
2020-11-11 00:58:56 +01:00
}];
2021-07-29 06:54:14 +02:00
if (thread == nil) {
[LKStorage writeSyncWithBlock:^(YapDatabaseReadWriteTransaction *transaction) {
thread = [self getOrCreateThreadWithContactSessionID:contactSessionID transaction:transaction];
}];
}
2020-11-11 00:58:56 +01:00
return thread;
}
+ (nullable instancetype)getThreadWithContactSessionID:(NSString *)contactSessionID transaction:(YapDatabaseReadTransaction *)transaction;
2020-11-11 00:58:56 +01:00
{
return [TSContactThread fetchObjectWithUniqueID:[self threadIDFromContactSessionID:contactSessionID] transaction:transaction];
2020-11-11 00:58:56 +01:00
}
- (NSString *)contactSessionID {
return [[self class] contactSessionIDFromThreadID:self.uniqueId];
2020-11-11 00:58:56 +01:00
}
- (NSArray<NSString *> *)recipientIdentifiers
{
return @[ self.contactSessionID ];
2020-11-11 00:58:56 +01:00
}
2021-05-05 01:53:18 +02:00
- (BOOL)isGroupThread
2020-11-11 00:58:56 +01:00
{
2021-01-04 01:18:04 +01:00
return NO;
2020-11-11 00:58:56 +01:00
}
2020-11-17 06:23:13 +01:00
- (NSString *)name
{
NSString *sessionID = self.contactSessionID;
2021-05-05 01:53:18 +02:00
SNContact *contact = [LKStorage.shared getContactWithSessionID:sessionID];
return [contact displayNameFor:SNContactContextRegular] ?: sessionID;
2020-11-17 06:23:13 +01:00
}
+ (NSString *)threadIDFromContactSessionID:(NSString *)contactSessionID {
return [TSContactThreadPrefix stringByAppendingString:contactSessionID];
2020-11-11 00:58:56 +01:00
}
+ (NSString *)contactSessionIDFromThreadID:(NSString *)threadId {
2020-11-11 00:58:56 +01:00
return [threadId substringWithRange:NSMakeRange(1, threadId.length - 1)];
}
@end
NS_ASSUME_NONNULL_END