// // Copyright 2018 Signal Messenger, LLC // SPDX-License-Identifier: AGPL-3.0-only // #import "TSContactThread.h" #import NS_ASSUME_NONNULL_BEGIN #pragma mark - @implementation TSContactThread // --- CODE GENERATION MARKER // This snippet is generated by /Scripts/sds_codegen/sds_generate.py. Do not manually edit it, instead run // `sds_codegen.sh`. // clang-format off - (instancetype)initWithGrdbId:(int64_t)grdbId uniqueId:(NSString *)uniqueId conversationColorNameObsolete:(NSString *)conversationColorNameObsolete creationDate:(nullable NSDate *)creationDate editTargetTimestamp:(nullable NSNumber *)editTargetTimestamp isArchivedObsolete:(BOOL)isArchivedObsolete isMarkedUnreadObsolete:(BOOL)isMarkedUnreadObsolete lastDraftInteractionRowId:(uint64_t)lastDraftInteractionRowId lastDraftUpdateTimestamp:(uint64_t)lastDraftUpdateTimestamp lastInteractionRowId:(uint64_t)lastInteractionRowId lastSentStoryTimestamp:(nullable NSNumber *)lastSentStoryTimestamp lastVisibleSortIdObsolete:(uint64_t)lastVisibleSortIdObsolete lastVisibleSortIdOnScreenPercentageObsolete:(double)lastVisibleSortIdOnScreenPercentageObsolete mentionNotificationMode:(TSThreadMentionNotificationMode)mentionNotificationMode messageDraft:(nullable NSString *)messageDraft messageDraftBodyRanges:(nullable MessageBodyRanges *)messageDraftBodyRanges mutedUntilDateObsolete:(nullable NSDate *)mutedUntilDateObsolete mutedUntilTimestampObsolete:(uint64_t)mutedUntilTimestampObsolete shouldThreadBeVisible:(BOOL)shouldThreadBeVisible storyViewMode:(TSThreadStoryViewMode)storyViewMode contactPhoneNumber:(nullable NSString *)contactPhoneNumber contactUUID:(nullable NSString *)contactUUID hasDismissedOffers:(BOOL)hasDismissedOffers { self = [super initWithGrdbId:grdbId uniqueId:uniqueId conversationColorNameObsolete:conversationColorNameObsolete creationDate:creationDate editTargetTimestamp:editTargetTimestamp isArchivedObsolete:isArchivedObsolete isMarkedUnreadObsolete:isMarkedUnreadObsolete lastDraftInteractionRowId:lastDraftInteractionRowId lastDraftUpdateTimestamp:lastDraftUpdateTimestamp lastInteractionRowId:lastInteractionRowId lastSentStoryTimestamp:lastSentStoryTimestamp lastVisibleSortIdObsolete:lastVisibleSortIdObsolete lastVisibleSortIdOnScreenPercentageObsolete:lastVisibleSortIdOnScreenPercentageObsolete mentionNotificationMode:mentionNotificationMode messageDraft:messageDraft messageDraftBodyRanges:messageDraftBodyRanges mutedUntilDateObsolete:mutedUntilDateObsolete mutedUntilTimestampObsolete:mutedUntilTimestampObsolete shouldThreadBeVisible:shouldThreadBeVisible storyViewMode:storyViewMode]; if (!self) { return self; } _contactPhoneNumber = contactPhoneNumber; _contactUUID = contactUUID; _hasDismissedOffers = hasDismissedOffers; return self; } // clang-format on // --- CODE GENERATION MARKER - (NSUInteger)hash { NSUInteger result = [super hash]; result ^= self.contactPhoneNumber.hash; result ^= self.contactUUID.hash; result ^= self.hasDismissedOffers; return result; } - (BOOL)isEqual:(id)other { if (![super isEqual:other]) { return NO; } TSContactThread *typedOther = (TSContactThread *)other; if (![NSObject isObject:self.contactPhoneNumber equalToObject:typedOther.contactPhoneNumber]) { return NO; } if (![NSObject isObject:self.contactUUID equalToObject:typedOther.contactUUID]) { return NO; } if (self.hasDismissedOffers != typedOther.hasDismissedOffers) { return NO; } return YES; } - (instancetype)initWithContactUUID:(nullable NSString *)contactUUID contactPhoneNumber:(nullable NSString *)contactPhoneNumber { NSString *uniqueId = [[self class] generateUniqueId]; if (self = [super initWithUniqueId:uniqueId]) { _contactUUID = [contactUUID copy]; _contactPhoneNumber = [contactPhoneNumber copy]; } return self; } - (SignalServiceAddress *)contactAddress { return [[SignalServiceAddress alloc] initWithServiceIdString:self.contactUUID phoneNumber:self.contactPhoneNumber]; } - (NSArray *)recipientAddressesWithTransaction:(DBReadTransaction *)transaction { return @[ self.contactAddress ]; } - (BOOL)isNoteToSelf { return self.contactAddress.isLocalAddress; } - (BOOL)hasSafetyNumbers { return [OWSIdentityManagerObjCBridge identityKeyForAddress:self.contactAddress] != nil; } + (nullable SignalServiceAddress *)contactAddressFromThreadId:(NSString *)threadId transaction:(DBReadTransaction *)transaction { return [TSContactThread anyFetchContactThreadWithUniqueId:threadId transaction:transaction].contactAddress; } - (void)anyDidInsertWithTransaction:(DBWriteTransaction *)transaction { [super anyDidInsertWithTransaction:transaction]; OWSLogInfo(@"Inserted contact thread: %@", self.contactAddress); } @end NS_ASSUME_NONNULL_END