// // Copyright (c) 2019 Open Whisper Systems. All rights reserved. // NS_ASSUME_NONNULL_BEGIN @class OWSLinkPreviewDraft; @class OWSQuotedReplyModel; @class OWSUnreadIndicator; @class SignalAttachment; @class TSContactThread; @class TSGroupThread; @class TSInteraction; @class TSOutgoingMessage; @class TSThread; @class YapDatabaseConnection; @class YapDatabaseReadTransaction; @class YapDatabaseReadWriteTransaction; @interface ThreadDynamicInteractions : NSObject // Represents the "reverse index" of the focus message, if any. // The "reverse index" is the distance of this interaction from // the last interaction in the thread. Therefore the last interaction // will have a "reverse index" of zero. // // We use "reverse indices" because (among other uses) we use this to // determine the initial load window size. @property (nonatomic, nullable, readonly) NSNumber *focusMessagePosition; @property (nonatomic, nullable, readonly) OWSUnreadIndicator *unreadIndicator; - (void)clearUnreadIndicatorState; @end #pragma mark - @interface ThreadUtil : NSObject #pragma mark - dynamic interactions // This method will create and/or remove any offers and indicators // necessary for this thread. This includes: // // * Block offers. // * "Add to contacts" offers. // * Unread indicators. // // Parameters: // // * hideUnreadMessagesIndicator: If YES, the "unread indicator" has // been cleared and should not be shown. // * firstUnseenInteractionTimestamp: A snapshot of unseen message state // when we entered the conversation view. See comments on // ThreadOffersAndIndicators. // * maxRangeSize: Loading a lot of messages in conversation view is // slow and unwieldy. This number represents the maximum current // size of the "load window" in that view. The unread indicator should // always be inserted within that window. + (ThreadDynamicInteractions *)ensureDynamicInteractionsForThread:(TSThread *)thread dbConnection:(YapDatabaseConnection *)dbConnection hideUnreadMessagesIndicator:(BOOL)hideUnreadMessagesIndicator lastUnreadIndicator:(nullable OWSUnreadIndicator *)lastUnreadIndicator focusMessageId:(nullable NSString *)focusMessageId maxRangeSize:(int)maxRangeSize; #pragma mark - Delete Content + (void)deleteAllContent; #pragma mark - Find Content + (nullable TSInteraction *)findInteractionInThreadByTimestamp:(uint64_t)timestamp authorId:(NSString *)authorId threadUniqueId:(NSString *)threadUniqueId transaction:(YapDatabaseReadTransaction *)transaction; @end NS_ASSUME_NONNULL_END