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.
145 lines
4.7 KiB
Objective-C
145 lines
4.7 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
|
|
openGroupServer:(NSString *)openGroupServer
|
|
openGroupPublicKey:(NSString *)openGroupPublicKey
|
|
transaction:(YapDatabaseReadWriteTransaction *)transaction
|
|
{
|
|
TSContactThread *thread = [self fetchObjectWithUniqueID:[self threadIDFromContactSessionID:contactSessionID] transaction:transaction];
|
|
|
|
if (!thread) {
|
|
thread = [[TSContactThread alloc] initWithContactSessionID:contactSessionID];
|
|
thread.originalOpenGroupServer = openGroupServer;
|
|
thread.originalOpenGroupPublicKey = openGroupPublicKey;
|
|
[thread saveWithTransaction:transaction];
|
|
}
|
|
|
|
return thread;
|
|
}
|
|
|
|
+ (instancetype)getOrCreateThreadWithContactSessionID:(NSString *)contactSessionID
|
|
{
|
|
__block TSContactThread *thread;
|
|
[LKStorage writeSyncWithBlock:^(YapDatabaseReadWriteTransaction *transaction) {
|
|
thread = [self getOrCreateThreadWithContactSessionID:contactSessionID transaction:transaction];
|
|
}];
|
|
|
|
return thread;
|
|
}
|
|
|
|
+ (instancetype)getOrCreateThreadWithContactSessionID:(NSString *)contactSessionID
|
|
openGroupServer:(NSString *)openGroupServer
|
|
openGroupPublicKey:(NSString *)openGroupPublicKey
|
|
{
|
|
__block TSContactThread *thread;
|
|
[LKStorage writeSyncWithBlock:^(YapDatabaseReadWriteTransaction *transaction) {
|
|
thread = [self getOrCreateThreadWithContactSessionID:contactSessionID openGroupServer:openGroupServer openGroupPublicKey:openGroupPublicKey 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)isMessageRequest {
|
|
NSString *sessionID = self.contactSessionID;
|
|
SNContact *contact = [LKStorage.shared getContactWithSessionID:sessionID];
|
|
|
|
return (
|
|
self.shouldBeVisible &&
|
|
!self.isNoteToSelf && (
|
|
contact == nil ||
|
|
!contact.isApproved
|
|
)
|
|
);
|
|
}
|
|
|
|
- (BOOL)isMessageRequestUsingTransaction:(YapDatabaseReadTransaction *)transaction {
|
|
NSString *sessionID = self.contactSessionID;
|
|
SNContact *contact = [LKStorage.shared getContactWithSessionID:sessionID using:transaction];
|
|
|
|
return (
|
|
self.shouldBeVisible &&
|
|
!self.isNoteToSelf && (
|
|
contact == nil ||
|
|
!contact.isApproved
|
|
)
|
|
);
|
|
}
|
|
|
|
- (BOOL)isGroupThread
|
|
{
|
|
return NO;
|
|
}
|
|
|
|
- (NSString *)name
|
|
{
|
|
NSString *sessionID = self.contactSessionID;
|
|
SNContact *contact = [LKStorage.shared getContactWithSessionID:sessionID];
|
|
return [contact displayNameFor:SNContactContextRegular] ?: sessionID;
|
|
}
|
|
|
|
- (NSString *)nameWithTransaction:(YapDatabaseReadTransaction *)transaction
|
|
{
|
|
NSString *sessionID = self.contactSessionID;
|
|
SNContact *contact = [LKStorage.shared getContactWithSessionID:sessionID using:transaction];
|
|
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
|