blob: 41cd912efe08f1b71a8782264ca469f12aac5a77 [file] [log] [blame]
//
// Created by Jesse Squires
// http://www.jessesquires.com
//
//
// Documentation
// http://cocoadocs.org/docsets/JSQMessagesViewController
//
//
// GitHub
// https://github.com/jessesquires/JSQMessagesViewController
//
//
// License
// Copyright (c) 2014 Jesse Squires
// Released under an MIT license: http://opensource.org/licenses/MIT
//
#import <Foundation/Foundation.h>
#import "JSQMessageMediaData.h"
/**
* The `JSQMessageData` protocol defines the common interface through which
* a `JSQMessagesViewController` and `JSQMessagesCollectionView` interact with message model objects.
*
* It declares the required and optional methods that a class must implement so that instances of that class
* can be displayed properly within a `JSQMessagesCollectionViewCell`.
*
* The class that conforms to this protocol is provided in the library. See `JSQMessage`.
*
* @see JSQMessage.
*/
@protocol JSQMessageData <NSObject>
@required
/**
* @return A string identifier that uniquely identifies the user who sent the message.
*
* @discussion If you need to generate a unique identifier, consider using
* `[[NSProcessInfo processInfo] globallyUniqueString]`
*
* @warning You must not return `nil` from this method. This value must be unique.
*/
- (NSString *)senderId;
/**
* @return The display name for the user who sent the message.
*
* @warning You must not return `nil` from this method.
*/
- (NSString *)senderDisplayName;
/**
* @return The date that the message was sent.
*
* @warning You must not return `nil` from this method.
*/
- (NSDate *)date;
/**
* This method is used to determine if the message data item contains text or media.
* If this method returns `YES`, an instance of `JSQMessagesViewController` will ignore
* the `text` method of this protocol when dequeuing a `JSQMessagesCollectionViewCell`
* and only call the `media` method.
*
* Similarly, if this method returns `NO` then the `media` method will be ignored and
* and only the `text` method will be called.
*
* @return A boolean value specifying whether or not this is a media message or a text message.
* Return `YES` if this item is a media message, and `NO` if it is a text message.
*/
- (BOOL)isMediaMessage;
/**
* @return An integer that can be used as a table address in a hash table structure.
*
* @discussion This value must be unique for each message with distinct contents.
* This value is used to cache layout information in the collection view.
*/
- (NSUInteger)messageHash;
@optional
/**
* @return The body text of the message.
*
* @warning You must not return `nil` from this method.
*/
- (NSString *)text;
/**
* @return The media item of the message.
*
* @warning You must not return `nil` from this method.
*/
- (id<JSQMessageMediaData>)media;
@end