session-ios/Signal/src/ViewControllers/ConversationView/ConversationViewItem.h

122 lines
3.8 KiB
C
Raw Normal View History

2017-10-10 22:13:54 +02:00
//
2018-02-23 21:44:46 +01:00
// Copyright (c) 2018 Open Whisper Systems. All rights reserved.
2017-10-10 22:13:54 +02:00
//
#import "ConversationViewLayout.h"
2018-02-23 21:44:46 +01:00
#import "OWSAudioPlayer.h"
2017-10-10 22:13:54 +02:00
NS_ASSUME_NONNULL_BEGIN
typedef NS_ENUM(NSInteger, OWSMessageCellType) {
OWSMessageCellType_Unknown,
2017-10-10 22:13:54 +02:00
OWSMessageCellType_TextMessage,
OWSMessageCellType_OversizeTextMessage,
OWSMessageCellType_StillImage,
OWSMessageCellType_AnimatedImage,
OWSMessageCellType_Audio,
OWSMessageCellType_Video,
OWSMessageCellType_GenericAttachment,
OWSMessageCellType_DownloadingAttachment,
};
2017-10-12 19:48:09 +02:00
NSString *NSStringForOWSMessageCellType(OWSMessageCellType cellType);
#pragma mark -
2017-10-10 22:13:54 +02:00
@class ConversationViewCell;
2017-10-26 18:09:36 +02:00
@class DisplayableText;
2017-10-10 22:13:54 +02:00
@class OWSAudioMessageView;
@class OWSQuotedReplyModel;
2017-10-10 22:13:54 +02:00
@class TSAttachmentPointer;
@class TSAttachmentStream;
@class TSInteraction;
@class YapDatabaseReadTransaction;
2017-10-10 22:13:54 +02:00
2017-10-11 15:44:10 +02:00
// This is a ViewModel for cells in the conversation view.
//
// The lifetime of this class is the lifetime of that cell
// in the load window of the conversation view.
//
// Critically, this class implements ConversationViewLayoutItem
// and does caching of the cell's size.
2018-02-23 21:44:46 +01:00
@interface ConversationViewItem : NSObject <ConversationViewLayoutItem, OWSAudioPlayerDelegate>
2017-10-10 22:13:54 +02:00
@property (nonatomic, readonly) TSInteraction *interaction;
@property (nonatomic, readonly, nullable) OWSQuotedReplyModel *quotedReply;
2017-10-10 22:13:54 +02:00
@property (nonatomic, readonly) BOOL isGroupThread;
2018-03-29 17:25:19 +02:00
@property (nonatomic, readonly) BOOL hasBodyText;
@property (nonatomic, readonly) BOOL isQuotedReply;
@property (nonatomic, readonly) BOOL hasQuotedAttachment;
@property (nonatomic, readonly) BOOL hasQuotedText;
2017-10-10 22:13:54 +02:00
@property (nonatomic) BOOL shouldShowDate;
@property (nonatomic) BOOL shouldHideRecipientStatus;
2018-03-29 17:49:02 +02:00
@property (nonatomic) BOOL shouldHideBubbleTail;
2017-10-10 22:13:54 +02:00
@property (nonatomic) NSInteger row;
2017-10-17 06:05:29 +02:00
// During updates, we sometimes need the previous row index
// (before this update) of this item.
2017-10-19 15:53:35 +02:00
//
// If NSNotFound, this view item was just created in the
// previous update.
2017-10-17 06:05:29 +02:00
@property (nonatomic) NSInteger previousRow;
2017-10-10 22:13:54 +02:00
- (instancetype)init NS_UNAVAILABLE;
- (instancetype)initWithInteraction:(TSInteraction *)interaction
isGroupThread:(BOOL)isGroupThread
transaction:(YapDatabaseReadTransaction *)transaction;
2017-10-10 22:13:54 +02:00
- (ConversationViewCell *)dequeueCellForCollectionView:(UICollectionView *)collectionView
indexPath:(NSIndexPath *)indexPath;
- (void)replaceInteraction:(TSInteraction *)interaction transaction:(YapDatabaseReadTransaction *)transaction;
2017-10-10 22:13:54 +02:00
- (void)clearCachedLayoutState;
#pragma mark - Audio Playback
@property (nonatomic, weak) OWSAudioMessageView *lastAudioMessageView;
2017-11-20 20:50:43 +01:00
@property (nonatomic, readonly) CGFloat audioDurationSeconds;
2017-10-10 22:13:54 +02:00
- (CGFloat)audioProgressSeconds;
#pragma mark - View State Caching
// These methods only apply to text & attachment messages.
- (OWSMessageCellType)messageCellType;
2018-03-29 17:25:19 +02:00
- (nullable DisplayableText *)displayableBodyText;
2017-10-10 22:13:54 +02:00
- (nullable TSAttachmentStream *)attachmentStream;
- (nullable TSAttachmentPointer *)attachmentPointer;
- (CGSize)mediaSize;
2017-10-10 22:13:54 +02:00
- (nullable DisplayableText *)displayableQuotedText;
- (nullable NSString *)quotedAttachmentMimetype;
2018-04-03 19:15:19 +02:00
- (nullable NSString *)quotedRecipientId;
2017-10-18 21:11:19 +02:00
// We don't want to try to load the media for this item (if any)
// if a load has previously failed.
@property (nonatomic) BOOL didCellMediaFailToLoad;
2017-10-10 22:13:54 +02:00
#pragma mark - UIMenuController
- (NSArray<UIMenuItem *> *)textMenuControllerItems;
- (NSArray<UIMenuItem *> *)mediaMenuControllerItems;
2018-04-11 17:25:28 +02:00
- (NSArray<UIMenuItem *> *)defaultMenuControllerItems;
2017-10-10 22:13:54 +02:00
- (BOOL)canPerformAction:(SEL)action;
- (void)copyMediaAction;
- (void)copyTextAction;
- (void)shareMediaAction;
- (void)shareTextAction;
- (void)saveMediaAction;
2017-10-10 22:13:54 +02:00
- (void)deleteAction;
- (SEL)metadataActionSelector;
@end
NS_ASSUME_NONNULL_END