IMAContactManager.h 6.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186
  1. //
  2. // IMAContactManager.h
  3. // TIMAdapter
  4. //
  5. // Created by AlexiChen on 16/2/18.
  6. // Copyright © 2016年 AlexiChen. All rights reserved.
  7. //
  8. typedef NS_OPTIONS(NSUInteger, IMAContactChangedNotifyType) {
  9. // 联系人列表事件
  10. EIMAContact_AddNewSubGroup = 0x0001 , // 新建分组
  11. EIMAContact_DeleteSubGroup = 0x0001 << 1, // 删除分组
  12. EIMAContact_AddFriend = 0x0001 << 2, // 添加好友
  13. EIMAContact_DeleteFriend = 0x0001 << 3, // 删除好友
  14. EIMAContact_LoadDefaultFriends = 0x0001 << 4, // 加到在默认分组的好友完毕
  15. EIMAContact_FriendInfoChanged = 0x0001 << 5, // 用户信息信息
  16. // 黑名单事件
  17. EIMAContact_BlackListAddIn = 0x0001 << 6, // 加入黑名单
  18. EIMAContact_BlackListMoveOut = 0x0001 << 7, // 移除黑名单
  19. EIMAContact_SubGroupChanged = 0x0001 << 8, // 分组更新
  20. EIMAContact_FriendListEvents = EIMAContact_AddNewSubGroup | EIMAContact_DeleteSubGroup | EIMAContact_AddFriend | EIMAContact_DeleteFriend | EIMAContact_LoadDefaultFriends | EIMAContact_FriendInfoChanged | EIMAContact_SubGroupChanged,
  21. EIMAContact_BlackListEvents = EIMAContact_BlackListAddIn | EIMAContact_BlackListMoveOut,
  22. // EIMAContact_GroupListEvents = EIMAContact_JoinGroup | EIMAContact_ExitGroup,
  23. EIMAContact_MoveFriend = 0x0001 << 9, // 移动分组
  24. EIMAContact_SubGroupReloadAll = 0x0001 << 10,
  25. EIMAContact_AllEvents = EIMAContact_FriendListEvents | EIMAContact_BlackListEvents,
  26. };
  27. // 联系人变更通知
  28. @interface IMAContactChangedNotifyItem : NSObject
  29. @property (nonatomic, assign) IMAContactChangedNotifyType type; // 类型
  30. @property (nonatomic, strong) IMASubGroup *subGroup; // 被操作的分组
  31. @property (nonatomic, strong) IMAUser *user; // 被操作的用户
  32. @property (nonatomic, assign) NSUInteger index; // 被操对象的index
  33. @property (nonatomic, strong) IMAContactChangedNotifyItem *toItem; // 只在移动分组时使用
  34. - (instancetype)initWith:(IMAContactChangedNotifyType)type;
  35. - (NSString *)notificationName;
  36. @end
  37. typedef void (^IMAContactChangedCompletion)(IMAContactChangedNotifyItem *item);
  38. typedef void (^IMASubGroupCompletion)(IMASubGroup *sg);
  39. /**
  40. * 联系人管理类。包括好友,群的管理,这里的类与界面无关,只是对数据的操作,界面上对联系人的操作,调用这个类的接口即可。
  41. */
  42. @interface IMAContactManager : NSObject
  43. {
  44. @protected
  45. // 好友分组IMASubGroup列表
  46. CLSafeMutableArray *_subGroupList;
  47. @protected
  48. // 群列表IMAGroup
  49. CLSafeMutableArray *_groupList;
  50. // 黑名单列表
  51. CLSafeMutableArray *_blackList;
  52. }
  53. @property (nonatomic, readonly) CLSafeMutableArray *subGroupList;
  54. @property (nonatomic, readonly) CLSafeMutableArray *groupList;
  55. @property (nonatomic, readonly) CLSafeMutableArray *blackList;
  56. @property (nonatomic, copy) IMAContactChangedCompletion contactChangedCompletion;
  57. @property (nonatomic, assign) BOOL hasNewDependency;
  58. - (void)saveToLocal;
  59. // 异步配置联系人内容
  60. - (void)asyncConfigContact;
  61. // 异步配置群相关内容
  62. - (void)asyncConfigGroup;
  63. // 添空上次选中标记后的subGroupList
  64. - (CLSafeMutableArray *)clearPickedSubGroupList;
  65. // 通过分组旬查询分组
  66. - (IMASubGroup *)getSubGroupOf:(NSString *)sgNAme;
  67. // 查询用户的分组
  68. // 若user为C2CType,查找对应的分组,找到返回,未找到返回为空
  69. // 若user为Group,直接返回空(分组只处理好友,不处理群组)
  70. - (IMASubGroup *)subgroupOf:(IMAUser *)user;
  71. // 查询user对应内存的中对象
  72. // 若user为C2CType,返回_subGroupList中的分组与user.userid相同的对象,未找到返回空
  73. // 若user为Group,返回_groupList中与user.userid相同的对象,未找到返回为空
  74. - (IMAUser *)isContainUser:(IMAUser *)user;
  75. // 按用户id查找对应内存的中对象
  76. - (IMAUser *)getUserByUserId:(NSString *)userID;
  77. // 按群id查找对应内存的中对象
  78. - (IMAUser *)getUserByGroupId:(NSString *)groupID;
  79. // user是否为我的好友,YES,是, NO,则为陌生人
  80. - (BOOL)isMyFriend:(IMAUser *)user;
  81. // 用户是否在黑名单内
  82. - (BOOL)isInBlackListByID:(NSString *)userID;
  83. - (BOOL)isInBlackList:(IMAUser *)user;
  84. // 删除用户,并删除对应的会话
  85. // 若user为C2CType,删除_subGroupList中的对象,并删除相关的会话
  86. // 若user为Group,删除_groupList中的对象,并删除相关的会话
  87. - (void)removeUser:(IMAUser *)user;
  88. // 删除用户,并删除对应的会话,并将其移到黑名单中
  89. - (void)removeUserToBlackList:(IMAUser *)user;
  90. // 将用户从黑名单中移除
  91. - (void)removeUserOutBlackList:(IMAUser *)user;
  92. // 添加用户到分组
  93. - (void)addUser:(IMAUser *)user toSubGroup:(IMASubGroup *)sg;
  94. // 添加用户到默认分组
  95. - (void)addUserToDefaultSubGroup:(IMAUser *)user;
  96. // 添加事件监听
  97. - (void)addContactChangedObserver:(id)observer handler:(SEL)selector forEvent:(NSUInteger)eventID;
  98. // 移除事件监听
  99. - (void)removeContactChangedObser:(id)observer;
  100. @end
  101. // TIMAdpter内部方法
  102. // 外部用户不要调用(只供TIMAdapter内部调用,
  103. // 像本Demo中,不要在TIMChat目录下的代码调用以下方法)
  104. // 主要是一些事件通知,用于同步
  105. @interface IMAContactManager (Protected)
  106. // 添加了新的分组后,调用此方法
  107. - (void)onAddNewSubGroup:(IMASubGroup *)group;
  108. // 删除分组后,调用此方法
  109. - (void)onDeleteSubGroup:(IMASubGroup *)group;
  110. // 添加用户到分组后,调用此方法
  111. - (void)onAddUser:(IMAUser *)user toSubGroup:(IMASubGroup *)group;
  112. // 删除好友后,调用此方法
  113. - (void)onDeleteFriend:(IMAUser *)user;
  114. // 用户信息更新后,调用此方法
  115. - (void)onFriendInfoChanged:(IMAUser *)user remark:(NSString *)remark;
  116. // 默认分组加载完毕后调用(目前已废弃)
  117. - (void)onLoadDefaultSubGroup:(IMASubGroup *)group;
  118. // 添加到黑名单后调用
  119. - (void)onAddToBlackList:(IMAUser *)user;
  120. // 移除黑名单调用
  121. - (void)onRemoveOutBlackList:(IMAUser *)user;
  122. // 移动分组后调用
  123. - (void)onMove:(IMAUser *)user from:(IMASubGroup *)fromG to:(IMASubGroup *)toG;
  124. // 添加群后调用
  125. - (void)onAddGroup:(IMAGroup *)group;
  126. @end