| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469 |
- //
- // IMAContactManager+Group.m
- // TIMChat
- //
- // Created by AlexiChen on 16/3/2.
- // Copyright © 2016年 AlexiChen. All rights reserved.
- //
- #import "IMAContactManager+Group.h"
- @implementation IMAContactManager (Group)
- - (void)createGroupList:(NSArray *)array
- {
- if (array.count)
- {
- NSMutableArray *gidarray = [NSMutableArray array];
- for (TIMGroupInfo *group in array)
- {
- [gidarray addObject:[group group]];
- }
- // 同步群基本信息
-
- __weak IMAContactManager *ws = self;
- [[TIMGroupManager sharedInstance] getGroupInfo:gidarray succ:^(NSArray *array) {
- [ws asyncDetailGroupInfo:array];
- } fail:^(int code, NSString *err) {
- DebugLog(@"Fail:-->code=%d,msg=%@,fun=%s", code, err,__func__);
- [[BGHUDHelper sharedInstance] tipMessage:IMALocalizedError(code, err)];
- }];
- }
-
- }
- - (void)asyncDetailGroupInfo:(NSArray *)array
- {
- if (!_groupList)
- {
- _groupList = [[CLSafeMutableArray alloc] init];
- }
-
- for (TIMGroupInfo *group in array)
- {
- IMAGroup *sg = [[IMAGroup alloc] initWithInfo:group];
-
- [_groupList addObject:sg];
- }
-
- // [[IMAPlatform sharedInstance].conversationMgr asyncConversationList];
- }
- // 群列表
- - (void)asyncGroupList
- {
- __weak IMAContactManager *ws = self;
- [[TIMGroupManager sharedInstance] getGroupList:^(NSArray *array) {
- [ws createGroupList:array];
- } fail:^(int code, NSString *err) {
- DebugLog(@"Fail:-->code=%d,msg=%@,fun=%s", code, err,__func__);
- [[BGHUDHelper sharedInstance] tipMessage:IMALocalizedError(code, err)];
- DebugLog(@"code = %d, err = %@", code, err);
- }];
- }
- - (void)syncGroupList
- {
- NSArray *array = [[TIMGroupManager sharedInstance] getGroupInfo:nil];
- [self asyncDetailGroupInfo:array];
- }
- - (TIMGroupInfo *)syncGetGroupInfo:(NSString *)groupId
- {
- NSArray *infos = [[TIMGroupManager sharedInstance] getGroupInfo:@[groupId]];
- if (infos.count > 0)
- {
- return infos[0];
- }
- return nil;
- }
- - (void)createBlackList:(NSArray *)array
- {
- if (array.count)
- {
- NSMutableArray *ba = [NSMutableArray array];
- for (NSString *userid in array)
- {
- IMAUser *user = [[IMAUser alloc] initWith:userid];
- [ba addObject:user];
- }
-
- if (!_blackList)
- {
- _blackList = [[CLSafeMutableArray alloc] init];
- }
- [_blackList addObjectsFromArray:ba];
- }
- }
- // 黑名单
- - (void)asyncBlackList
- {
- __weak IMAContactManager *ws = self;
- [[TIMFriendshipManager sharedInstance] getBlackList:^(NSArray *array) {
- [ws createBlackList:array];
- } fail:^(int code, NSString *err) {
- DebugLog(@"Fail:-->code=%d,msg=%@,fun=%s", code, err,__func__);
- [[BGHUDHelper sharedInstance] tipMessage:IMALocalizedError(code, err)];
- DebugLog(@"code = %d, err = %@", code, err);
- }];
- }
- // 获取公开群
- - (NSMutableDictionary *)publicGroups
- {
- NSMutableArray *myOwn = [NSMutableArray array];
- NSMutableArray *myMgr = [NSMutableArray array];
- NSMutableArray *myBelongTo = [NSMutableArray array];
-
- for (NSInteger i = 0; i < _groupList.count; i++)
- {
- IMAGroup *group = [_groupList objectAtIndex:i];
- if ([group isPublicGroup])
- {
- if ([group isCreatedByMe])
- {
- [myOwn addObject:group];
- }
- else if ([group isManagedByMe])
- {
- [myMgr addObject:group];
- }
- else
- {
- [myBelongTo addObject:group];
- }
- }
- }
-
- NSMutableDictionary *dic = [NSMutableDictionary dictionary];
- if (myOwn.count > 0)
- {
- [dic setObject:myOwn forKey:ASLocalizedString(@"我创建的群")];
- }
- if (myMgr.count > 0)
- {
- [dic setObject:myMgr forKey:ASLocalizedString(@"我管理的群")];
- }
- if (myBelongTo.count > 0)
- {
- [dic setObject:myBelongTo forKey:ASLocalizedString(@"我加入的群")];
- }
-
- return dic;
- }
- // 获取聊天室
- - (NSMutableArray *)chatRooms
- {
- NSMutableArray *array = [NSMutableArray array];
- for (NSInteger i = 0; i < _groupList.count; i++)
- {
- IMAGroup *group = [_groupList objectAtIndex:i];
- if ([group isChatRoom])
- {
- [array addObject:group];
- }
- }
- return array;
-
- }
- // 获取讨论组
- - (NSMutableArray *)chatGroup
- {
- NSMutableArray *array = [NSMutableArray array];
- for (NSInteger i = 0; i < _groupList.count; i++)
- {
- IMAGroup *group = [_groupList objectAtIndex:i];
- if ([group isChatGroup])
- {
- [array addObject:group];
- }
- }
- return array;
- }
- // 30 字节长度
- #define kMaxGroupNameLength 30
- - (BOOL)checkGroupParams:(NSString *)name members:(NSArray *)array
- {
- if ([name isContainsEmoji])
- {
- [BGHUDHelper alert:ASLocalizedString(@"群名称不能包含表情")];
- return NO;
- }
-
- if (array.count == 0)
- {
- [BGHUDHelper alert:ASLocalizedString(@"未选择加入群组的好友")];
- return NO;
- }
- return YES;
- }
- - (void)asyncGroupInfo:(NSString *)groupId onCreateSucc:(void (^)(IMAGroup *group))succ fail:(TIMFail)fail
- {
- // 同步群信息
- // 添加成功
- [[TIMGroupManager sharedInstance] getGroupInfo:@[groupId] succ:^(NSArray *array) {
-
- if (array.count)
- {
- // 只会返回一个信息
- TIMGroupInfo *groupInfo = array[0];
- IMAGroup *sg = [[IMAGroup alloc] initWithInfo:groupInfo];
- [self.groupList addObject:sg];
-
- if (succ)
- {
- succ(sg);
- }
-
- }
- } fail:^(int code, NSString *err) {
- DebugLog(@"Fail:-->code=%d,msg=%@,fun=%s", code, err,__func__);
- [[BGHUDHelper sharedInstance] tipMessage:IMALocalizedError(code, err)];
- if (fail)
- {
- fail(code, err);
- }
- }];
- }
- typedef void (^IMACreateCompletion)(IMAGroup *group);
- typedef void (^CreateGroupOperation)(NSString *groupName, NSArray *memids, IMACreateCompletion succ, TIMFail fail);
- - (void)onWillCreateGroupWith:(NSString *)name members:(NSArray *)array operation:(CreateGroupOperation)op succ:(void (^)(IMAGroup *group))succ fail:(TIMFail)fail
- {
- if (![self checkGroupParams:name members:array])
- {
- return;
- }
-
- size_t length = strlen([name UTF8String]);
- if( length > kMaxGroupNameLength)
- {
- name = [name cutBeyondTextInLength:kMaxGroupNameLength];
- }
-
- NSMutableArray *mems = [NSMutableArray array];
- for (IMAUser *user in array)
- {
- TIMCreateGroupMemberInfo *mem = [[TIMCreateGroupMemberInfo alloc] init];
- mem.member = [user userId];
- mem.role = TIM_GROUP_MEMBER_ROLE_MEMBER;
- [mems addObject:mem];
- }
-
- if (op)
- {
- op(name, mems, succ, fail);
- }
- }
- - (void)asyncCreateChatGroupWith:(NSString *)name members:(NSArray *)array succ:(void (^)(IMAGroup *group))succ fail:(TIMFail)fail
- {
- // __weak IMAContactManager *ws = self;
- [self onWillCreateGroupWith:name members:array operation:^(NSString *groupName, NSArray *memids, IMACreateCompletion succ, TIMFail fail) {
-
- TIMCreateGroupInfo *cgi = [[TIMCreateGroupInfo alloc] init];
- cgi.group = nil;
- cgi.groupName = name;
- cgi.groupType = @"Private";
- cgi.maxMemberNum = 0;
- cgi.membersInfo = memids;
-
- [[TIMGroupManager sharedInstance] createGroup:cgi succ:^(NSString *groupId) {
- TIMGroupInfo *tgi = [TIMGroupInfo instanceFrom:cgi];
- tgi.group = groupId;
- tgi.owner = [[IMAPlatform sharedInstance].host userId];
-
- IMAGroup *g = [[IMAGroup alloc] initWithInfo:tgi];
-
- if (succ)
- {
- succ(g);
- }
- } fail:^(int code, NSString *err) {
- DebugLog(@"Fail:-->code=%d,msg=%@,fun=%s", code, err,__func__);
- [[BGHUDHelper sharedInstance] tipMessage:IMALocalizedError(code, err)];
- if (fail)
- {
- fail(code, err);
- }
- }];
- } succ:succ fail:fail];
-
- }
- - (void)asyncCreatePublicGroupWith:(NSString *)name members:(NSArray *)array succ:(void (^)(IMAGroup *group))succ fail:(TIMFail)fail
- {
- // __weak IMAContactManager *ws = self;
- [self onWillCreateGroupWith:name members:array operation:^(NSString *groupName, NSArray *memids, IMACreateCompletion succ, TIMFail fail) {
-
- TIMCreateGroupInfo *cgi = [[TIMCreateGroupInfo alloc] init];
- cgi.group = nil;
- cgi.groupName = name;
- cgi.groupType = @"Public";
- cgi.addOpt = TIM_GROUP_ADD_ANY;
- cgi.maxMemberNum = 0;
- cgi.membersInfo = memids;
-
- [[TIMGroupManager sharedInstance] createGroup:cgi succ:^(NSString *groupId) {
- //注:这里成功回调时,不能调用getGroupInfo,因为群信息还没有同步下来,必须是在onGroupAdd回调之后才能回去到详细的群信息
-
- TIMGroupInfo *tgi = [TIMGroupInfo instanceFrom:cgi];
- tgi.group = groupId;
- tgi.owner = [[IMAPlatform sharedInstance].host userId];
-
- IMAGroup *g = [[IMAGroup alloc] initWithInfo:tgi];
-
- if (succ)
- {
- succ(g);
- }
- } fail:^(int code, NSString *err) {
- DebugLog(@"Fail:-->code=%d,msg=%@,fun=%s", code, err,__func__);
- [[BGHUDHelper sharedInstance] tipMessage:IMALocalizedError(code, err)];
- if (fail)
- {
- fail(code, err);
- }
- }];
- } succ:succ fail:fail];
- }
- - (void)asyncCreateChatRoomWith:(NSString *)name members:(NSArray *)array succ:(void (^)(IMAGroup *group))succ fail:(TIMFail)fail
- {
- // __weak IMAContactManager *ws = self;
- [self onWillCreateGroupWith:name members:array operation:^(NSString *groupName, NSArray *memids, IMACreateCompletion succ, TIMFail fail) {
-
- TIMCreateGroupInfo *cgi = [[TIMCreateGroupInfo alloc] init];
- cgi.group = nil;
- cgi.groupName = name;
- cgi.groupType = @"ChatRoom";
- cgi.addOpt = TIM_GROUP_ADD_ANY;
- cgi.maxMemberNum = 0;
- cgi.membersInfo = memids;
-
- [[TIMGroupManager sharedInstance] createGroup:cgi succ:^(NSString *groupId) {
-
- TIMGroupInfo *tgi = [TIMGroupInfo instanceFrom:cgi];
- tgi.group = groupId;
- tgi.owner = [[IMAPlatform sharedInstance].host userId];
-
- IMAGroup *g = [[IMAGroup alloc] initWithInfo:tgi];
-
- if (succ)
- {
- succ(g);
- }
- } fail:^(int code, NSString *err) {
- DebugLog(@"Fail:-->code=%d,msg=%@,fun=%s", code, err,__func__);
- [[BGHUDHelper sharedInstance] tipMessage:IMALocalizedError(code, err)];
- if (fail)
- {
- fail(code, err);
- }
- }];
- } succ:succ fail:fail];
- }
- - (void)asyncGetGroupPendencyList:(TIMGetGroupPendencyListSucc)succ fail:(TIMFail)fail
- {
- TIMGroupPendencyOption *opt = [[TIMGroupPendencyOption alloc] init];
- opt.timestamp = 0;
- opt.numPerPage = 100;
-
- [[TIMGroupManager sharedInstance] getPendencyFromServer:opt succ:^(TIMGroupPendencyMeta *meta, NSArray *pendencies) {
- if (succ)
- {
- succ(meta, pendencies);
- }
- } fail:^(int code, NSString *msg) {
- [[BGHUDHelper sharedInstance] tipMessage:IMALocalizedError(code, msg)];
- if (fail)
- {
- fail(code, msg);
- }
- }];
- }
- - (void)asyncGroupPendencyReport:(uint64_t)timestamp succ:(TIMSucc)succ fail:(TIMFail)fail
- {
- [[TIMGroupManager sharedInstance] pendencyReport:timestamp succ:^{
- if (succ)
- {
- succ();
- }
- } fail:^(int code, NSString *msg) {
- DebugLog(@"group pendency report fail (code = %d, msg = %@)",code, msg);
-
- [[BGHUDHelper sharedInstance] tipMessage:IMALocalizedError(code, msg)];
- if (fail)
- {
- fail(code, msg);
- }
- }];
- }
- - (void)asyncAcceptAddGroup:(NSString*)msg pendencyItem:(TIMGroupPendencyItem *)item succ:(TIMSucc)succ fail:(TIMFail)fail
- {
- if (!item)
- {
- return;
- }
-
- [item accept:msg succ:^{
- if (succ)
- {
- succ();
- }
- } fail:^(int code, NSString *msg) {
-
- NSString *errInfo = [NSString stringWithFormat:@"accept fail code = %d,msg = %@", code, msg];
- DebugLog(@"%@", errInfo);
-
- [[BGHUDHelper sharedInstance] tipMessage:IMALocalizedError(code, msg)];
- if (fail)
- {
- fail(code, msg);
- }
- }];
- }
- - (void)asyncRefuseAddGroup:(NSString*)msg pendencyItem:(TIMGroupPendencyItem *)item succ:(TIMSucc)succ fail:(TIMFail)fail
- {
- if (!item)
- {
- return;
- }
-
- [item refuse:msg succ:^{
- if (succ)
- {
- succ();
- }
- } fail:^(int code, NSString *msg) {
- NSString *errInfo = [NSString stringWithFormat:@"refuse fail code = %d,msg = %@", code, msg];
- DebugLog(@"%@", errInfo);
-
- [[BGHUDHelper sharedInstance] tipMessage:IMALocalizedError(code, msg)];
- if (fail)
- {
- fail(code, msg);
- }
- }];
- }
- @end
|