NIMChatExtendManagerProtocol.h 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504
  1. //
  2. // NIMThreadTalkManagerProtocol.h
  3. // NIMLib
  4. //
  5. // Created by He on 2020/3/27.
  6. // Copyright © 2020 Netease. All rights reserved.
  7. //
  8. #import <Foundation/Foundation.h>
  9. #import "NIMChatManagerProtocol.h"
  10. @class NIMMessage;
  11. @class NIMSession;
  12. @class NIMRecentSession;
  13. @class NIMThreadTalkFetchOption;
  14. @class NIMThreadTalkFetchResult;
  15. @class NIMChatExtendBasicInfo;
  16. @class NIMQuickComment;
  17. @class NIMCollectInfo;
  18. @class NIMCollectQueryOptions;
  19. @class NIMAddCollectParams;
  20. @class NIMSyncMessagePinResponse;
  21. @class NIMMessagePinItem;
  22. @class NIMStickTopSessionInfo;
  23. @class NIMSyncStickTopSessionResponse;
  24. @class NIMAddStickTopSessionParams;
  25. @class NIMSyncMessagePinRequest;
  26. @class NIMLoadRecentSessionsOptions;
  27. NS_ASSUME_NONNULL_BEGIN
  28. /**
  29. * 获取Thread Talk子消息回调
  30. *
  31. * @param error 请求结果
  32. * @param result 请求结果数据
  33. */
  34. typedef void (^NIMThreadTalkFetchMessages) (NSError * _Nullable error, NIMThreadTalkFetchResult * _Nullable result);
  35. /**
  36. * 获取Thread Talk子消息回调
  37. *
  38. * @param error 错误结果
  39. * @param result 子消息列表
  40. */
  41. typedef void (^NIMFetchHistoryMessagesByIds) (NSError * _Nullable error, NSMapTable<NIMChatExtendBasicInfo *, NIMMessage *> * _Nullable result);
  42. /**
  43. * 完成回调
  44. *
  45. * @param error 错误码
  46. */
  47. typedef void (^NIMQuickCommentHandler) (NSError * _Nullable error);
  48. /**
  49. * 本地获取快捷评论结果
  50. *
  51. * @param error 错误结果
  52. * @param result 获取结果
  53. */
  54. typedef void (^NIMGetQuickCommentsByMsgHandler) (NSError * _Nullable error, NSMapTable<NSNumber *, NSArray<NIMQuickComment *> *> * _Nullable result);
  55. /**
  56. * 批量获取
  57. *
  58. * @param error 结果
  59. * @param result 评论列表
  60. * @param failedMessages 查询失败的列表
  61. */
  62. typedef void (^NIMFetchCommentsByMsgsHandler) (NSError * _Nullable error, NSMapTable<NIMMessage *, NSArray<NIMQuickComment *> * > * _Nullable result, NSArray<NIMMessage *> * _Nullable failedMessages);
  63. /**
  64. * 读取收藏列表回调block
  65. *
  66. * @param error 错误,如果成功则error为nil
  67. * @param collectInfos 读取的消息列表
  68. * @param totalCount 收藏总条数,用来判断是否还有更多
  69. */
  70. typedef void(^NIMCollectQueryBlock)(NSError * _Nullable error,
  71. NSArray<NIMCollectInfo *> * _Nullable collectInfos,
  72. NSInteger totalCount);
  73. /**
  74. * 添加收藏回调block
  75. *
  76. * @param error 错误,如果成功则error为nil
  77. * @param collectInfo 添加的收藏
  78. */
  79. typedef void(^NIMAddCollectBlock)(NSError * _Nullable error, NIMCollectInfo * _Nullable collectInfo);
  80. /**
  81. * 更新收藏回调block
  82. *
  83. * @param error 错误,如果成功则error为nil
  84. * @param total_removed 删除的数量
  85. */
  86. typedef void(^NIMRemoveCollectBlock)(NSError * _Nullable error, NSInteger total_removed);
  87. /**
  88. * 移除收藏回调block
  89. *
  90. * @param error 错误,如果成功则error为nil
  91. * @param collectInfo 更新后的收藏
  92. */
  93. typedef void(^NIMUpdateCollectBlock)(NSError * _Nullable error, NIMCollectInfo * _Nullable collectInfo);
  94. /**
  95. * 添加置顶会话回调block
  96. *
  97. * @param error 错误,如果成功则error为nil
  98. * @param newInfo 被添加的置顶会话
  99. */
  100. typedef void(^NIMAddStickTopSessionCompletion)(NSError * _Nullable error, NIMStickTopSessionInfo * _Nullable newInfo);
  101. /**
  102. * 移除置顶会话回调block
  103. *
  104. * @param error 错误,如果成功则error为nil
  105. * @param removedInfo 被删除的置顶信息
  106. */
  107. typedef void(^NIMRemoveStickTopSessionCompletion)(NSError * _Nullable error, NIMStickTopSessionInfo * _Nullable removedInfo);
  108. /**
  109. * 更新置顶会话回调block
  110. *
  111. * @param error 错误,如果成功则error为nil
  112. * @param updatedInfo 更新后的置顶会话
  113. */
  114. typedef void(^NIMUpdateStickTopSessionCompletion)(NSError * _Nullable error, NIMStickTopSessionInfo * _Nullable updatedInfo);
  115. /**
  116. * 本地查找置顶会话回调block
  117. *
  118. * @param infos 所有本地置顶会话信息
  119. */
  120. typedef void(^NIMLoadStickTopSessionInfosCompletion)(NSError * _Nullable error, NSDictionary<NIMSession*,NIMStickTopSessionInfo *> * _Nullable infos);
  121. /**
  122. * 添加PIN记录的回调
  123. * @param error 错误,如果成功则error为nil
  124. * @param item 新增的PIN记录
  125. */
  126. typedef void(^NIMAddMessagePinCompletion)(NSError * _Nullable error, NIMMessagePinItem * _Nullable item);
  127. /**
  128. * 移除Pin的回调
  129. * @param error 错误,如果成功则error为nil
  130. * @param item 被移除的PIN记录
  131. */
  132. typedef void(^NIMRemoveMessagePinCompletion)(NSError * _Nullable error, NIMMessagePinItem * _Nullable item);
  133. /**
  134. * 更新PIN记录的回调
  135. * @param error 错误,如果成功则error为nil
  136. * @param item 被更新的PIN记录
  137. */
  138. typedef void(^NIMUpdateMessagePinCompletion)(NSError * _Nullable error, NIMMessagePinItem * _Nullable item);
  139. /**
  140. * 增量更新PIN记录的回调
  141. * @param error 错误,如果成功则error为nil
  142. * @param response 更新成功后的响应对象
  143. */
  144. typedef void(^NIMSyncMessagePinCompletion)(NSError * _Nullable error, NIMSyncMessagePinResponse * _Nullable response);
  145. /**
  146. * 加载PIN记录的回调
  147. * @param error 错误,如果成功则error为nil
  148. * @param items 更新成功后的所有pin消息
  149. */
  150. typedef void(^NIMLoadMessagePinsCompletion)(NSError * _Nullable error, NSArray<NIMMessagePinItem *> * _Nullable items);
  151. /**
  152. * 查找最近会话回调
  153. * @param recentSessions 最近会话列表
  154. */
  155. typedef void(^NIMLoadRecentSessionsCompletion)(NSError * _Nullable error, NSArray<NIMRecentSession *> * _Nullable recentSessions);
  156. /**
  157. * Thread Talk 回调
  158. */
  159. @protocol NIMChatExtendManagerDelegate <NSObject>
  160. #pragma mark - 快捷回复
  161. @optional
  162. /**
  163. * 新增快捷评论
  164. *
  165. * @param comment 评论
  166. */
  167. - (void)onRecvQuickComment:(NIMQuickComment *)comment;
  168. /**
  169. * 移除快捷评论
  170. *
  171. * @param comment 被删评论
  172. */
  173. - (void)onRemoveQuickComment:(NIMQuickComment *)comment;
  174. /**
  175. * 一条PIN被增加的在线通知
  176. * @param item 新增的PIN记录
  177. */
  178. - (void)onNotifyAddMessagePin:(NIMMessagePinItem *)item;
  179. /**
  180. * 一条PIN被移除的在线通知
  181. * @param item 被移除的PIN记录
  182. */
  183. - (void)onNotifyRemoveMessagePin:(NIMMessagePinItem *)item;
  184. /**
  185. * 一条PIN被更新的在线通知
  186. * @param item 被更新的PIN记录
  187. */
  188. - (void)onNotifyUpdateMessagePin:(NIMMessagePinItem *)item;
  189. /**
  190. * 置顶会话同步完成的在线通知
  191. * @param response 置顶信息全量同步后的响应对象
  192. */
  193. - (void)onNotifySyncStickTopSessions:(NIMSyncStickTopSessionResponse *)response;
  194. /**
  195. * 一条置顶信息被增加的在线通知
  196. * @param newInfo 新增的置顶信息
  197. */
  198. - (void)onNotifyAddStickTopSession:(NIMStickTopSessionInfo *)newInfo;
  199. /**
  200. * 一条置顶信息被移除的在线通知
  201. * @param removedInfo 被移除的置顶信息
  202. */
  203. - (void)onNotifyRemoveStickTopSession:(NIMStickTopSessionInfo *)removedInfo;
  204. /**
  205. * 一条置顶会话被更新的在线通知
  206. * @param updatedInfo 被更新的置顶信息
  207. */
  208. - (void)onNotifyUpdateStickTopSession:(NIMStickTopSessionInfo *)updatedInfo;
  209. @end
  210. /**
  211. * 聊天扩展
  212. */
  213. @protocol NIMChatExtendManager <NSObject>
  214. #pragma mark - Thread Talk
  215. /**
  216. * 回复消息
  217. *
  218. * @param message 新生成的消息
  219. * @param target 被回复的消息
  220. * @param error 错误 如果在准备发送消息阶段发生错误,这个error会被填充相应的信息
  221. *
  222. * @return 是否调用成功,这里返回的 result 只是表示当前这个函数调用是否成功,需要后续的回调才能够判断消息是否已经发送至服务器
  223. */
  224. - (BOOL)reply:(NIMMessage *)message
  225. to:(NIMMessage *)target
  226. error:(NSError * __nullable *)error;
  227. /**
  228. * 异步回复消息
  229. *
  230. * @param message 新生成的消息
  231. * @param target 被回复的消息
  232. * @param block 发送完成后的回调,这里的回调完成只表示当前这个函数调用完成,需要后续的回调才能判断消息是否已经发送至服务器
  233. */
  234. - (void)reply:(NIMMessage *)message
  235. to:(NIMMessage *)target
  236. completion:(__nullable NIMChatManagerBlock)block;
  237. /**
  238. * 本地获取Thread Talk的消息列表
  239. *
  240. * @param message 父消息
  241. * @return 目标message的子消息列表
  242. */
  243. - (NSArray<NIMMessage *> * _Nullable)subMessages:(NIMMessage *)message;
  244. /**
  245. * 本地获取Thread Talk的消息列表
  246. *
  247. * @param message 父消息
  248. * @return 目标message的子消息数目
  249. */
  250. - (NSInteger)subMessagesCount:(NIMMessage *)message;
  251. /**
  252. * 获取指定消息的Thread Talk子消息
  253. *
  254. * @param info 目标消息
  255. * @param option 查询分页选项
  256. * @param block 完成回调
  257. */
  258. - (void)fetchSubMessages:(NIMChatExtendBasicInfo *)info
  259. option:(NIMThreadTalkFetchOption * _Nullable)option
  260. completion:(NIMThreadTalkFetchMessages)block;
  261. /**
  262. * 获取指定消息的Thread Talk子消息
  263. *
  264. * @param message 目标消息
  265. * @param option 查询分页选项
  266. * @param block 完成回调
  267. */
  268. - (void)fetchSubMessagesFrom:(NIMMessage *)message
  269. option:(NIMThreadTalkFetchOption * _Nullable)option
  270. completion:(NIMThreadTalkFetchMessages)block;
  271. /**
  272. * 根据MessageId等获取消息
  273. *
  274. * @param infos 请求信息
  275. * @param sync 是否同步到本地,注:DB标记状态删除的消息无法被同步覆盖
  276. * @param block 完成回调
  277. */
  278. - (void)fetchHistoryMessages:(NSArray<NIMChatExtendBasicInfo *> *)infos
  279. syncToDB:(BOOL)sync
  280. completion:(NIMFetchHistoryMessagesByIds)block;
  281. #pragma mark - 快捷回复
  282. /**
  283. * 发送快捷回复
  284. *
  285. * @param comment 回复内容
  286. * @param message 被回复消息
  287. * @param completion 完成回调
  288. */
  289. - (void)addQuickComment:(NIMQuickComment *)comment
  290. toMessage:(NIMMessage *)message
  291. completion:(NIMQuickCommentHandler _Nullable)completion;
  292. /**
  293. * 从服务端删除一条评论
  294. *
  295. * @param comment 目标评论
  296. * @param completion 完成回调
  297. */
  298. - (void)deleteQuickComment:(NIMQuickComment *)comment
  299. completion:(NIMQuickCommentHandler _Nullable)completion;
  300. /**
  301. * 批量获取快捷评论
  302. *
  303. * @param messages 目标消息, 最多批量20个
  304. * @param completion 完成回调
  305. */
  306. - (void)fetchQuickComments:(NSArray<NIMMessage *> *)messages
  307. completion:(NIMFetchCommentsByMsgsHandler)completion;
  308. /**
  309. * 本地获取消息对应的快捷评论结果
  310. *
  311. * @param message 目标消息
  312. * @param completion 完成回调
  313. */
  314. - (void)quickCommentsByMessage:(NIMMessage *)message
  315. completion:(NIMGetQuickCommentsByMsgHandler)completion;
  316. #pragma mark - 收藏
  317. /**
  318. * 分页查询收藏列表
  319. * @param option 分页查询选项
  320. * @param completion 查询完成的回调
  321. */
  322. - (void)queryCollect:(NIMCollectQueryOptions *)option completion:(nullable NIMCollectQueryBlock)completion;
  323. /**
  324. * 添加一个收藏
  325. * @param info 添加收藏的参数,必须字段:type、data、ext
  326. * @param completion 添加完成的回调
  327. */
  328. - (void)addCollect:(NIMAddCollectParams *)info completion:(nullable NIMAddCollectBlock)completion;
  329. /**
  330. * 批量移除收藏
  331. * @param collectList 批量移除的收藏对象,必须字段:id、createTime
  332. * @param completion 移除完成的回调
  333. */
  334. - (void)removeCollect:(NSArray<NIMCollectInfo *> *)collectList completion:(nullable NIMRemoveCollectBlock)completion;
  335. /**
  336. * 更新收藏ext
  337. * @param collectInfo 需要更新的收藏对象,需要id、createTime、ext字段,如果ext不传,表示删除ext字段
  338. */
  339. - (void)updateCollect:(NIMCollectInfo *)collectInfo completion:(nullable NIMUpdateCollectBlock)completion;
  340. #pragma mark - 置顶
  341. /**
  342. * 添加一条置顶记录
  343. * @param params 添加置顶的参数
  344. * @param completion 添加置顶记录完成的回调
  345. */
  346. - (void)addStickTopSession:(NIMAddStickTopSessionParams *)params completion:(nullable NIMAddStickTopSessionCompletion)completion;
  347. /**
  348. * 删除一条置顶记录
  349. * @param info 需要删除的置顶记录
  350. * @param completion 删除完成的回调
  351. */
  352. - (void)removeStickTopSession:(NIMStickTopSessionInfo *)info completion:(nullable NIMRemoveStickTopSessionCompletion)completion;
  353. /**
  354. * 更新一条置顶记录的扩展信息
  355. * @param info 需要更新的置顶记录
  356. * @param completion 删除完成的回调
  357. */
  358. - (void)udpateStickTopSession:(NIMStickTopSessionInfo *)info completion:(nullable NIMUpdateStickTopSessionCompletion)completion;
  359. /**
  360. * 查找所有的置顶记录
  361. * @param completion 查找完成的回调
  362. */
  363. - (void)loadStickTopSessionInfos:(nullable NIMLoadStickTopSessionInfosCompletion)completion;
  364. /**
  365. * 获取最近会话列表
  366. * @param options 查询选项(如按照置顶会话排序)
  367. */
  368. - (void)loadRecentSessionsWithOptions:(NIMLoadRecentSessionsOptions *)options completion:(nullable NIMLoadRecentSessionsCompletion)completion;
  369. /**
  370. * 根据置顶信息排序最近会话
  371. * @param recentSessions 需要排序的置顶会话,若传可变数组则进行in place排序
  372. * @param infos [会话:置顶信息] 映射
  373. * @return 排序后的最近会话列表,若传如可变数组,则返回其数组本身
  374. */
  375. - (NSArray<NIMRecentSession *> *)sortRecentSessions:(NSArray<NIMRecentSession *> *)recentSessions withStickTopInfos:(NSDictionary<NIMSession *,NIMStickTopSessionInfo *> *)infos;
  376. /**
  377. * 查询某个会话的置顶信息
  378. * @param session 需要查询的会话
  379. * @return 置顶信息
  380. */
  381. - (NIMStickTopSessionInfo *)stickTopInfoForSession:(NIMSession *)session;
  382. #pragma mark - Pin
  383. /**
  384. * 添加一条PIN记录
  385. * @param item 需要添加的PIN记录
  386. * @param completion 添加完成的回调
  387. */
  388. - (void)addMessagePin:(NIMMessagePinItem *)item completion:(nullable NIMAddMessagePinCompletion)completion;
  389. /**
  390. * 删除一条PIN记录
  391. * @param item 需要删除的PIN记录
  392. * @param completion 删除完成的回调
  393. */
  394. - (void)removeMessagePin:(NIMMessagePinItem *)item completion:(nullable NIMRemoveMessagePinCompletion)completion;
  395. /**
  396. * 更新一条PIN记录的扩展字段(ext)
  397. * @param item 需要更新的PIN记录,ext不传为删除
  398. * @param completion 更新完成的回调
  399. */
  400. - (void)updateMessagePin:(NIMMessagePinItem *)item completion:(nullable NIMUpdateMessagePinCompletion)completion;
  401. /**
  402. * 查询全部PIN记录(登录后首次查询该会话会触发一次网络同步)
  403. * @param session 会话
  404. * @param completion 加载完成的回调
  405. */
  406. - (void)loadMessagePinsForSession:(NIMSession *)session completion:(nullable NIMLoadMessagePinsCompletion)completion;
  407. /**
  408. * 查询某条消息的PIN记录
  409. * @param message 消息
  410. * @return 记录
  411. */
  412. - (NIMMessagePinItem *)pinItemForMessage:(NIMMessage *)message;
  413. #pragma mark - 其他
  414. /**
  415. * 添加Thread Talk委托
  416. *
  417. * @param delegate 聊天委托
  418. */
  419. - (void)addDelegate:(id<NIMChatExtendManagerDelegate>)delegate;
  420. /**
  421. * 移除Thread Talk委托
  422. *
  423. * @param delegate 聊天委托
  424. */
  425. - (void)removeDelegate:(id<NIMChatExtendManagerDelegate>)delegate;
  426. @end
  427. NS_ASSUME_NONNULL_END