session-ios/SessionMessagingKit/Threads/TSContactThread.m
Morgan Pretty 78c0d000be Removed the OWSBlockingManager replacing it with the config sync
Fixed an issue where the "block" button would appear in the NoteToSelf swipe menu
Removed the OWSBlockingManager and supporting files
Removed a number of unused classes and methods
Refactored the BlockListUIUtils to Swift
2022-03-23 09:59:38 +11:00

130 lines
3.8 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)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)isBlocked {
NSString *sessionID = self.contactSessionID;
SNContact *contact = [LKStorage.shared getContactWithSessionID:sessionID];
return (contact.isBlocked == YES);
}
- (BOOL)isBlockedUsingTransaction:(YapDatabaseReadTransaction *)transaction {
NSString *sessionID = self.contactSessionID;
SNContact *contact = [LKStorage.shared getContactWithSessionID:sessionID using:transaction];
return (contact.isBlocked == YES);
}
- (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