TUIMessageBaseDataProvider.h 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257
  1. // Created by Tencent on 2023/06/09.
  2. // Copyright © 2023 Tencent. All rights reserved.
  3. #import <Foundation/Foundation.h>
  4. #import <TIMCommon/TIMDefine.h>
  5. #import <TIMCommon/TUIMessageCell.h>
  6. #import <TIMCommon/TUIMessageCellData.h>
  7. #import "TUIChatConversationModel.h"
  8. NS_ASSUME_NONNULL_BEGIN
  9. typedef NS_ENUM(NSUInteger, TUIMessageBaseDataProviderDataSourceChangeType) {
  10. TUIMessageBaseDataProviderDataSourceChangeTypeInsert,
  11. TUIMessageBaseDataProviderDataSourceChangeTypeDelete,
  12. TUIMessageBaseDataProviderDataSourceChangeTypeReload,
  13. };
  14. @class TUIMessageBaseDataProvider;
  15. @protocol TUIMessageBaseDataProviderDataSource <NSObject>
  16. @required
  17. - (void)dataProviderDataSourceWillChange:(TUIMessageBaseDataProvider *)dataProvider;
  18. - (void)dataProviderDataSourceChange:(TUIMessageBaseDataProvider *)dataProvider
  19. withType:(TUIMessageBaseDataProviderDataSourceChangeType)type
  20. atIndex:(NSUInteger)index
  21. animation:(BOOL)animation;
  22. - (void)dataProviderDataSourceDidChange:(TUIMessageBaseDataProvider *)dataProvider;
  23. - (void)dataProvider:(TUIMessageBaseDataProvider *)dataProvider onRemoveHeightCache:(TUIMessageCellData *)cellData;
  24. @optional
  25. /**
  26. * Message read event
  27. *
  28. * @param userID recevier of one-to-one message
  29. * @param timestamp Read receipt time, messages before this timestamp can be considered read by the other party
  30. */
  31. - (void)dataProvider:(TUIMessageBaseDataProvider *)dataProvider ReceiveReadMsgWithUserID:(NSString *)userId Time:(time_t)timestamp;
  32. /**
  33. * Group message read event
  34. *
  35. * @param groupID Group ID
  36. * @param msgID Message idenetifier
  37. * @param readCount Count of read message
  38. * @param unreadCount Count of unread message
  39. */
  40. - (void)dataProvider:(TUIMessageBaseDataProvider *)dataProvider
  41. ReceiveReadMsgWithGroupID:(NSString *)groupID
  42. msgID:(NSString *)msgID
  43. readCount:(NSUInteger)readCount
  44. unreadCount:(NSUInteger)unreadCount;
  45. /**
  46. * A new message is received, the data has been changed, refreshed, it has been processed internally, and subsequent processing can be done in this method
  47. *
  48. * @param uiMsg The new message
  49. */
  50. - (void)dataProvider:(TUIMessageBaseDataProvider *)dataProvider ReceiveNewUIMsg:(TUIMessageCellData *)uiMsg;
  51. /**
  52. *
  53. * Reveived a recalled message
  54. */
  55. - (void)dataProvider:(TUIMessageBaseDataProvider *)dataProvider ReceiveRevokeUIMsg:(TUIMessageCellData *)uiMsg;
  56. /**
  57. * This event is fired when a new message is received after the request for a new message is completed
  58. * External can use this method to modify the CellData to be displayed, add messages (such as time messages), and customize messages
  59. */
  60. - (nullable TUIMessageCellData *)dataProvider:(TUIMessageBaseDataProvider *)dataProvider CustomCellDataFromNewIMMessage:(V2TIMMessage *)msg;
  61. - (BOOL)isDataSourceConsistent;
  62. @end
  63. @protocol TUIMessageBaseDataProviderDataSource_Two <NSObject>
  64. - (nullable V2TIMMessage *)dataProvider_Two:(TUIMessageBaseDataProvider *)dataProvider CustomCellDataFromNewIMMessage:(V2TIMMessage *)msg;
  65. @end
  66. /**
  67. *
  68. * 【Module name】Chat message list view model (TUIMessageDataProvider)
  69. * 【Function description】Responsible for implementing the data processing and business logic of the message list in the chat page
  70. * 1. The view model can pull the message list data from the server through the interface provided by the IM SDK, and load the data.
  71. * 2. The view model can synchronously remove the message list data when the user needs to delete the session list.
  72. */
  73. @interface TUIMessageBaseDataProvider : NSObject
  74. @property(nonatomic, weak) id<TUIMessageBaseDataProviderDataSource> dataSource;
  75. @property(nonatomic, strong, readonly) TUIChatConversationModel *conversationModel;
  76. @property(nonatomic, strong, readonly) NSArray<TUIMessageCellData *> *uiMsgs;
  77. @property(nonatomic, strong, readonly) NSDictionary<NSString *, NSNumber *> *heightCache;
  78. @property(nonatomic, assign, readonly) BOOL isLoadingData;
  79. @property(nonatomic, assign, readonly) BOOL isNoMoreMsg;
  80. @property(nonatomic, assign, readonly) BOOL isFirstLoad;
  81. @property(nonatomic, weak) id<TUIMessageBaseDataProviderDataSource_Two> dataSource_Two;
  82. /**
  83. * ,
  84. *
  85. * If adjacent messages are sent by the same user, the messages will be merged for display.
  86. */
  87. @property(nonatomic, assign) BOOL mergeAdjacentMsgsFromTheSameSender;
  88. /**
  89. *
  90. * Count of per page, default is 20.
  91. */
  92. @property(nonatomic, assign) NSInteger pageCount;
  93. - (instancetype)initWithConversationModel:(TUIChatConversationModel *)conversationModel;
  94. - (void)loadMessageSucceedBlock:(void (^)(BOOL isFirstLoad, BOOL isNoMoreMsg, NSArray<TUIMessageCellData *> *newMsgs))succeedBlock
  95. FailBlock:(V2TIMFail)failBlock;
  96. - (void)sendUIMsg:(TUIMessageCellData *)uiMsg
  97. toConversation:(TUIChatConversationModel *)conversationData
  98. willSendBlock:(void (^)(BOOL isReSend, TUIMessageCellData *dateUIMsg))willSendBlock
  99. SuccBlock:(nullable V2TIMSucc)succ
  100. FailBlock:(nullable V2TIMFail)fail;
  101. - (void)revokeUIMsg:(TUIMessageCellData *)uiMsg SuccBlock:(nullable V2TIMSucc)succ FailBlock:(nullable V2TIMFail)fail;
  102. - (void)deleteUIMsgs:(NSArray<TUIMessageCellData *> *)uiMsgs SuccBlock:(nullable V2TIMSucc)succ FailBlock:(nullable V2TIMFail)fail;
  103. - (void)addUIMsg:(TUIMessageCellData *)cellData;
  104. - (void)removeUIMsg:(TUIMessageCellData *)cellData;
  105. - (void)insertUIMsgs:(NSArray<TUIMessageCellData *> *)uiMsgs atIndexes:(NSIndexSet *)indexes;
  106. - (void)sendPlaceHolderUIMessage:(TUIMessageCellData *)placeHolderCellData; //Only send PlaceHolder UI Message
  107. - (void)addUIMsgs:(NSArray<TUIMessageCellData *> *)uiMsgs;
  108. - (void)replaceUIMsg:(TUIMessageCellData *)cellData atIndex:(NSUInteger)index;
  109. /**
  110. * Preprocessing reply messages (asynchronously loading original messages and downloading corresponding thumbnails)
  111. */
  112. - (void)preProcessMessage:(NSArray<TUIMessageCellData *> *)uiMsgs callback:(void (^)(void))callback;
  113. - (NSArray<NSString *> *)getUserIDListForAdditionalUserInfo:(NSArray<TUIMessageCellData *> *)uiMsgs;
  114. - (void)requestForAdditionalUserInfo:(NSArray<TUIMessageCellData *> *)uiMsgs callback:(void (^)(void))callback;
  115. /**
  116. * Send read receipts for latest messages
  117. */
  118. - (void)sendLatestMessageReadReceipt;
  119. /**
  120. * Send a read receipt for the specified index message
  121. */
  122. - (void)sendMessageReadReceiptAtIndexes:(NSArray *)indexes;
  123. /**
  124. * Get the index of the message in the mesage data through msgID
  125. */
  126. - (NSInteger)getIndexOfMessage:(NSString *)msgID;
  127. - (NSMutableArray *)transUIMsgFromIMMsg:(NSArray *)msgs;
  128. - (void)clearUIMsgList;
  129. - (void)processQuoteMessage:(NSArray<TUIMessageCellData *> *)uiMsgs; // subclass override required
  130. + (void)updateUIMsgStatus:(TUIMessageCellData *)cellData uiMsgs:(NSArray *)uiMsgs;
  131. - (void)getPinMessageList;
  132. - (void)loadGroupInfo:(dispatch_block_t)callback;
  133. - (void)getSelfInfoInGroup:(dispatch_block_t)callback;
  134. - (void)pinGroupMessage:(NSString *)groupID
  135. message:(V2TIMMessage *)message
  136. isPinned:(BOOL)isPinned
  137. succ:(V2TIMSucc)succ
  138. fail:(V2TIMFail)fail;
  139. - (BOOL)isCurrentUserRoleSuperAdminInGroup;
  140. - (BOOL)isCurrentMessagePin:(NSString *)msgID;
  141. @property(nonatomic, copy) void (^groupRoleChanged)(V2TIMGroupMemberRole role);
  142. @property(nonatomic, copy) void (^pinGroupMessageChanged)(NSArray *);
  143. @end
  144. @interface TUIMessageBaseDataProvider (IMSDK)
  145. /// imsdk interface call
  146. + (NSString *)sendMessage:(V2TIMMessage *)message
  147. toConversation:(TUIChatConversationModel *)conversationData
  148. appendParams:(TUISendMessageAppendParams *)appendParams
  149. Progress:(nullable V2TIMProgress)progress
  150. SuccBlock:(nullable V2TIMSucc)succ
  151. FailBlock:(nullable V2TIMFail)fail;
  152. - (void)getLastMessage:(BOOL)isFromLocal succ:(void (^)(V2TIMMessage *message))succ fail:(V2TIMFail)fail;
  153. + (void)markC2CMessageAsRead:(NSString *)userID succ:(nullable V2TIMSucc)succ fail:(nullable V2TIMFail)fail;
  154. + (void)markGroupMessageAsRead:(NSString *)groupID succ:(nullable V2TIMSucc)succ fail:(nullable V2TIMFail)fail;
  155. + (void)markConversationAsUndead:(NSArray<NSString *> *)conversationIDList enableMark:(BOOL)enableMark;
  156. + (void)revokeMessage:(V2TIMMessage *)msg succ:(nullable V2TIMSucc)succ fail:(nullable V2TIMFail)fail;
  157. + (void)deleteMessages:(NSArray<V2TIMMessage *> *)msgList succ:(nullable V2TIMSucc)succ fail:(nullable V2TIMFail)fail;
  158. + (void)modifyMessage:(V2TIMMessage *)msg completion:(V2TIMMessageModifyCompletion)completion;
  159. /**
  160. * Send message read receipts
  161. */
  162. + (void)sendMessageReadReceipts:(NSArray *)msgs;
  163. /**
  164. * Getting the list of read and unread members of group messages
  165. */
  166. + (void)getReadMembersOfMessage:(V2TIMMessage *)msg
  167. filter:(V2TIMGroupMessageReadMembersFilter)filter
  168. nextSeq:(NSUInteger)nextSeq
  169. completion:(void (^)(int code, NSString *desc, NSArray *members, NSUInteger nextSeq, BOOL isFinished))block;
  170. /**
  171. * Getting the read receipt of the message
  172. */
  173. + (void)getMessageReadReceipt:(NSArray *)messages succ:(nullable V2TIMMessageReadReceiptsSucc)succ fail:(nullable V2TIMFail)fail;
  174. /// message -> cellData
  175. + (nullable TUIMessageCellData *)getCellData:(V2TIMMessage *)message;
  176. + (nullable TUIMessageCellData *)getSystemMsgFromDate:(NSDate *)date;
  177. + (nullable TUIMessageCellData *)getRevokeCellData:(V2TIMMessage *)message;
  178. /// message -> displayString
  179. + (nullable NSString *)getDisplayString:(V2TIMMessage *)message;
  180. + (nullable NSString *)getRevokeDispayString:(V2TIMMessage *)message;
  181. + (nullable NSString *)getRevokeDispayString:(V2TIMMessage *)message operateUser:(V2TIMUserFullInfo *)operateUser reason:(NSString *)reason;
  182. + (nullable NSString *)getGroupTipsDisplayString:(V2TIMMessage *)message;
  183. /// message <-> info
  184. + (V2TIMMessage *)getCustomMessageWithJsonData:(NSData *)data;
  185. + (V2TIMMessage *)getCustomMessageWithJsonData:(NSData *)data desc:(NSString *)desc extension:(NSString *)extension;
  186. + (NSMutableArray *)getUserIDList:(NSArray<V2TIMGroupMemberInfo *> *)infoList;
  187. + (NSString *)getShowName:(V2TIMMessage *)message;
  188. + (NSString *)getOpUserName:(V2TIMGroupMemberInfo *)info;
  189. + (NSMutableArray *)getUserNameList:(NSArray<V2TIMGroupMemberInfo *> *)infoList;
  190. + (NSString *)getUserName:(V2TIMGroupTipsElem *)tips with:(NSString *)userId;
  191. @end
  192. NS_ASSUME_NONNULL_END