增加换肤功能
This commit is contained in:
@@ -0,0 +1,17 @@
|
||||
//
|
||||
// TUIContactExtensionObserver.h
|
||||
// TUIContact
|
||||
//
|
||||
// Created by harvy on 2023/3/29.
|
||||
// Copyright © 2023 Tencent. All rights reserved.
|
||||
//
|
||||
|
||||
#import <Foundation/Foundation.h>
|
||||
|
||||
NS_ASSUME_NONNULL_BEGIN
|
||||
|
||||
@interface TUIContactExtensionObserver : NSObject
|
||||
|
||||
@end
|
||||
|
||||
NS_ASSUME_NONNULL_END
|
||||
@@ -0,0 +1,326 @@
|
||||
//
|
||||
// TUIContactExtensionObserver.m
|
||||
// TUIContact
|
||||
//
|
||||
// Created by harvy on 2023/3/29.
|
||||
// Copyright © 2023 Tencent. All rights reserved.
|
||||
//
|
||||
|
||||
#import "TUIContactExtensionObserver.h"
|
||||
#import <TIMCommon/TIMCommonModel.h>
|
||||
#import <TUICore/TUICore.h>
|
||||
#import "TUIGroupManageController.h"
|
||||
#import "TUIGroupMemberController.h"
|
||||
#import "TUIGroupMembersCell.h"
|
||||
#import "TUISelectGroupMemberViewController.h"
|
||||
|
||||
@interface TUIContactExtensionObserver () <TUIExtensionProtocol,TUIGroupMembersCellDelegate>
|
||||
//TUICore_TUIChatExtension_GroupProfileMemberListExtension_ClassicExtensionID
|
||||
//pargm start
|
||||
@property(nonatomic, assign) NSInteger tag;
|
||||
@property(nonatomic,strong) UINavigationController *pushVC;
|
||||
@property(nonatomic,copy) NSString *groupId;
|
||||
@property(nonatomic, strong) UIViewController *showContactSelectVC;
|
||||
@property(nonatomic, strong) NSMutableArray<TUIGroupMemberCellData *> *membersData;
|
||||
@property(nonatomic, strong) TUIGroupMembersCellData *groupMembersCellData;
|
||||
//pargm end
|
||||
|
||||
@end
|
||||
|
||||
@implementation TUIContactExtensionObserver
|
||||
|
||||
+ (void)load {
|
||||
[TUICore registerExtension:TUICore_TUIChatExtension_NavigationMoreItem_ClassicExtensionID object:TUIContactExtensionObserver.shareInstance];
|
||||
|
||||
[TUICore registerExtension:TUICore_TUIChatExtension_GroupProfileMemberListExtension_ClassicExtensionID
|
||||
object:TUIContactExtensionObserver.shareInstance];
|
||||
|
||||
[TUICore registerExtension:TUICore_TUIChatExtension_GroupProfileSettingsItemExtension_ClassicExtensionID
|
||||
object:TUIContactExtensionObserver.shareInstance];
|
||||
|
||||
[TUICore registerExtension:TUICore_TUIChatExtension_GroupProfileBottomItemExtension_ClassicExtensionID
|
||||
object:TUIContactExtensionObserver.shareInstance];
|
||||
|
||||
}
|
||||
|
||||
+ (instancetype)shareInstance {
|
||||
static dispatch_once_t onceToken;
|
||||
static id instance = nil;
|
||||
dispatch_once(&onceToken, ^{
|
||||
instance = [[self alloc] init];
|
||||
});
|
||||
return instance;
|
||||
}
|
||||
|
||||
#pragma mark - TUIExtensionProtocol
|
||||
|
||||
|
||||
- (BOOL)onRaiseExtension:(NSString *)extensionID parentView:(UIView *)parentView param:(nullable NSDictionary *)param {
|
||||
if ([extensionID isEqualToString:TUICore_TUIChatExtension_GroupProfileMemberListExtension_ClassicExtensionID]) {
|
||||
TUIGroupMembersCellData * data = [param objectForKey:@"data"];
|
||||
self.groupId = [param objectForKey:@"groupID"];
|
||||
self.pushVC = [param tui_objectForKey:@"pushVC" asClass:UINavigationController.class];
|
||||
self.membersData = [param tui_objectForKey:@"membersData" asClass:NSMutableArray.class];
|
||||
self.groupMembersCellData = [param tui_objectForKey:@"groupMembersCellData" asClass:TUIGroupMembersCellData.class];
|
||||
if (![parentView isKindOfClass:UIView.class]) {
|
||||
return NO;
|
||||
}
|
||||
TUIGroupMembersCell *cell = [[TUIGroupMembersCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:nil];
|
||||
[parentView addSubview:cell];
|
||||
parentView.userInteractionEnabled = YES;
|
||||
[cell mas_makeConstraints:^(MASConstraintMaker *make) {
|
||||
make.edges.mas_equalTo(parentView);
|
||||
}];
|
||||
cell.backgroundColor = TUIChatDynamicColor(@"chat_pop_menu_bg_color", @"#FFFFFF");
|
||||
[cell setData:data];
|
||||
cell.delegate = (id)self;
|
||||
return YES;
|
||||
}
|
||||
return NO;
|
||||
|
||||
}
|
||||
- (NSArray<TUIExtensionInfo *> *)onGetExtension:(NSString *)extensionID param:(NSDictionary *)param {
|
||||
if (![extensionID isKindOfClass:NSString.class]) {
|
||||
return nil;
|
||||
}
|
||||
if ([extensionID isEqualToString:TUICore_TUIChatExtension_NavigationMoreItem_ClassicExtensionID]) {
|
||||
return [self getNavigationMoreItemExtensionForClassicChat:param];
|
||||
}
|
||||
else if ([extensionID
|
||||
isEqualToString:TUICore_TUIChatExtension_GroupProfileSettingsItemExtension_ClassicExtensionID]) {
|
||||
return [self getGroupProfileSettingsItemExtensionForClassicChat:param];
|
||||
}
|
||||
else if ([extensionID isEqualToString:TUICore_TUIChatExtension_GroupProfileBottomItemExtension_ClassicExtensionID]) {
|
||||
return [self getGroupProfileBottomItemExtensionForClassicChat:param];
|
||||
}
|
||||
else {
|
||||
return nil;
|
||||
}
|
||||
}
|
||||
|
||||
- (NSArray<TUIExtensionInfo *> *)getNavigationMoreItemExtensionForClassicChat:(NSDictionary *)param {
|
||||
if (![param isKindOfClass:NSDictionary.class]) {
|
||||
return nil;
|
||||
}
|
||||
NSString *userID = [param tui_objectForKey:TUICore_TUIChatExtension_NavigationMoreItem_UserID asClass:NSString.class];
|
||||
if (userID.length > 0) {
|
||||
TUIExtensionInfo *info = [[TUIExtensionInfo alloc] init];
|
||||
info.icon = TIMCommonBundleThemeImage(@"chat_nav_more_menu_img", @"chat_nav_more_menu");
|
||||
info.weight = 100;
|
||||
info.onClicked = ^(NSDictionary *_Nonnull param) {
|
||||
UINavigationController *pushVC = [param tui_objectForKey:TUICore_TUIChatExtension_NavigationMoreItem_PushVC asClass:UINavigationController.class];
|
||||
if (pushVC) {
|
||||
NSDictionary *param = @{TUICore_TUIContactObjectFactory_GetUserOrFriendProfileVCMethod_UserIDKey : userID ?: @"",
|
||||
TUICore_TUIContactObjectFactory_GetUserOrFriendProfileVCMethod_SuccKey : ^(UIViewController *vc){
|
||||
[pushVC pushViewController:vc animated:YES];
|
||||
}
|
||||
, TUICore_TUIContactObjectFactory_GetUserOrFriendProfileVCMethod_FailKey : ^(int code, NSString *desc) {
|
||||
}
|
||||
};
|
||||
[TUICore createObject:TUICore_TUIContactObjectFactory key:TUICore_TUIContactObjectFactory_GetUserOrFriendProfileVCMethod param:param];
|
||||
}
|
||||
};
|
||||
return @[ info ];
|
||||
}
|
||||
else {
|
||||
return nil;
|
||||
}
|
||||
}
|
||||
|
||||
- (NSArray<TUIExtensionInfo *> *)getGroupProfileSettingsItemExtensionForClassicChat:(NSDictionary *)param {
|
||||
if (![param isKindOfClass:NSDictionary.class]) {
|
||||
return nil;
|
||||
}
|
||||
NSString *groupID = [param tui_objectForKey:@"groupID" asClass:NSString.class];
|
||||
if (groupID.length > 0) {
|
||||
UINavigationController *pushVC = [param tui_objectForKey:@"pushVC" asClass:UINavigationController.class];
|
||||
TUIExtensionInfo *info = [[TUIExtensionInfo alloc] init];
|
||||
info.icon = nil;
|
||||
info.weight = 100;
|
||||
info.text = TIMCommonLocalizableString(TUIKitGroupProfileManage);
|
||||
info.onClicked = ^(NSDictionary *_Nonnull clickParam) {
|
||||
if (pushVC) {
|
||||
TUIGroupManageController *vc = [[TUIGroupManageController alloc] init];
|
||||
vc.groupID = groupID;
|
||||
[pushVC pushViewController:vc animated:YES];
|
||||
}
|
||||
};
|
||||
return @[ info ];
|
||||
}
|
||||
|
||||
|
||||
return nil;
|
||||
}
|
||||
- (NSArray<TUIExtensionInfo *> *)getGroupProfileBottomItemExtensionForClassicChat:(NSDictionary *)param {
|
||||
if (![param isKindOfClass:NSDictionary.class]) {
|
||||
return nil;
|
||||
}
|
||||
|
||||
NSString *groupID = [param tui_objectForKey:@"groupID" asClass:NSString.class];
|
||||
if (groupID.length > 0) {
|
||||
void (^updateGroupInfoCallback)(void) = param[@"updateGroupInfoCallback"];
|
||||
UINavigationController *pushVC = [param tui_objectForKey:@"pushVC" asClass:UINavigationController.class];
|
||||
|
||||
TUIExtensionInfo *info = [[TUIExtensionInfo alloc] init];
|
||||
info.icon = nil;
|
||||
info.weight = 100;
|
||||
info.text = TIMCommonLocalizableString(TUIKitGroupTransferOwner);
|
||||
info.onClicked = ^(NSDictionary *_Nonnull clickparam) {
|
||||
TUISelectGroupMemberViewController *vc = [[TUISelectGroupMemberViewController alloc] init];
|
||||
vc.optionalStyle = TUISelectMemberOptionalStyleTransferOwner;
|
||||
vc.groupId = groupID;
|
||||
vc.name = TIMCommonLocalizableString(TUIKitGroupTransferOwner);
|
||||
@weakify(self);
|
||||
vc.selectedFinished = ^(NSMutableArray<TUIUserModel *> *_Nonnull modelList) {
|
||||
@strongify(self);
|
||||
TUIUserModel *userModel = modelList[0];
|
||||
NSString *groupId = groupID;
|
||||
NSString *member = userModel.userId;
|
||||
if (userModel && [userModel isKindOfClass:[TUIUserModel class]]) {
|
||||
@weakify(self);
|
||||
[self transferGroupOwner:groupId
|
||||
member:member
|
||||
succ:^{
|
||||
@strongify(self);
|
||||
if (updateGroupInfoCallback) {
|
||||
updateGroupInfoCallback();
|
||||
}
|
||||
[TUITool makeToast:TIMCommonLocalizableString(TUIKitGroupTransferOwnerSuccess)];
|
||||
}
|
||||
fail:^(int code, NSString *desc) {
|
||||
[TUITool makeToastError:code msg:desc];
|
||||
}];
|
||||
}
|
||||
};
|
||||
[pushVC pushViewController:vc animated:YES];
|
||||
};
|
||||
return @[ info ];
|
||||
|
||||
}
|
||||
|
||||
return nil;
|
||||
}
|
||||
|
||||
- (void)transferGroupOwner:(NSString *)groupID member:(NSString *)userID succ:(V2TIMSucc)succ fail:(V2TIMFail)fail {
|
||||
[V2TIMManager.sharedInstance transferGroupOwner:groupID
|
||||
member:userID
|
||||
succ:^{
|
||||
succ();
|
||||
}
|
||||
fail:^(int code, NSString *desc) {
|
||||
fail(code, desc);
|
||||
}];
|
||||
}
|
||||
|
||||
#pragma TUIGroupMembersCellDelegate
|
||||
- (void)groupMembersCell:(TUIGroupMembersCell *)cell didSelectItemAtIndex:(NSInteger)index {
|
||||
TUIGroupMemberCellData *mem = self.groupMembersCellData.members[index];
|
||||
NSMutableArray *ids = [NSMutableArray array];
|
||||
NSMutableDictionary *displayNames = [NSMutableDictionary dictionary];
|
||||
for (TUIGroupMemberCellData *cd in self.membersData) {
|
||||
if (![cd.identifier isEqualToString:[[V2TIMManager sharedInstance] getLoginUser]]) {
|
||||
[ids addObject:cd.identifier];
|
||||
[displayNames setObject:cd.name ?: @"" forKey:cd.identifier ?: @""];
|
||||
}
|
||||
}
|
||||
|
||||
@weakify(self);
|
||||
void (^selectContactCompletion)(NSArray<TUICommonContactSelectCellData *> *) = ^(NSArray<TUICommonContactSelectCellData *> *array) {
|
||||
@strongify(self);
|
||||
if (self.tag == 1) {
|
||||
// add
|
||||
NSMutableArray *list = @[].mutableCopy;
|
||||
for (TUICommonContactSelectCellData *data in array) {
|
||||
[list addObject:data.identifier];
|
||||
}
|
||||
[self.pushVC popViewControllerAnimated:YES];
|
||||
[self addGroupId:self.groupId memebers:list];
|
||||
} else if (self.tag == 2) {
|
||||
// delete
|
||||
NSMutableArray *list = @[].mutableCopy;
|
||||
for (TUICommonContactSelectCellData *data in array) {
|
||||
[list addObject:data.identifier];
|
||||
}
|
||||
[self.pushVC popViewControllerAnimated:YES];
|
||||
[self deleteGroupId:self.groupId memebers:list];
|
||||
}
|
||||
};
|
||||
|
||||
self.tag = mem.tag;
|
||||
if (self.tag == 1) {
|
||||
// add
|
||||
NSMutableDictionary *param = [NSMutableDictionary dictionary];
|
||||
param[TUICore_TUIContactObjectFactory_GetContactSelectControllerMethod_TitleKey] = TIMCommonLocalizableString(GroupAddFirend);
|
||||
param[TUICore_TUIContactObjectFactory_GetContactSelectControllerMethod_DisableIdsKey] = ids;
|
||||
param[TUICore_TUIContactObjectFactory_GetContactSelectControllerMethod_DisplayNamesKey] = displayNames;
|
||||
param[TUICore_TUIContactObjectFactory_GetContactSelectControllerMethod_CompletionKey] = selectContactCompletion;
|
||||
self.showContactSelectVC = [TUICore createObject:TUICore_TUIContactObjectFactory
|
||||
key:TUICore_TUIContactObjectFactory_GetContactSelectControllerMethod
|
||||
param:param];
|
||||
[self.pushVC pushViewController:self.showContactSelectVC animated:YES];
|
||||
} else if (self.tag == 2) {
|
||||
// delete
|
||||
NSMutableDictionary *param = [NSMutableDictionary dictionary];
|
||||
param[TUICore_TUIContactObjectFactory_GetContactSelectControllerMethod_TitleKey] = TIMCommonLocalizableString(GroupDeleteFriend);
|
||||
param[TUICore_TUIContactObjectFactory_GetContactSelectControllerMethod_SourceIdsKey] = ids;
|
||||
param[TUICore_TUIContactObjectFactory_GetContactSelectControllerMethod_DisplayNamesKey] = displayNames;
|
||||
param[TUICore_TUIContactObjectFactory_GetContactSelectControllerMethod_CompletionKey] = selectContactCompletion;
|
||||
self.showContactSelectVC = [TUICore createObject:TUICore_TUIContactObjectFactory
|
||||
key:TUICore_TUIContactObjectFactory_GetContactSelectControllerMethod
|
||||
param:param];
|
||||
[self.pushVC pushViewController:self.showContactSelectVC animated:YES];
|
||||
} else {
|
||||
[self didCurrentMemberAtCellData:mem];
|
||||
}
|
||||
}
|
||||
- (void)didCurrentMemberAtCellData:(TUIGroupMemberCellData *)mem {
|
||||
NSString *userID = mem.identifier;
|
||||
@weakify(self);
|
||||
[self getUserOrFriendProfileVCWithUserID:userID
|
||||
succBlock:^(UIViewController *vc) {
|
||||
@strongify(self);
|
||||
[self.pushVC pushViewController:vc animated:YES];
|
||||
}
|
||||
failBlock:^(int code, NSString *desc){
|
||||
|
||||
}];
|
||||
}
|
||||
|
||||
- (void)getUserOrFriendProfileVCWithUserID:(NSString *)userID succBlock:(void (^)(UIViewController *vc))succ failBlock:(nullable V2TIMFail)fail {
|
||||
NSDictionary *param = @{
|
||||
TUICore_TUIContactObjectFactory_GetUserOrFriendProfileVCMethod_UserIDKey: userID ? : @"",
|
||||
TUICore_TUIContactObjectFactory_GetUserOrFriendProfileVCMethod_SuccKey: succ ? : ^(UIViewController *vc){},
|
||||
TUICore_TUIContactObjectFactory_GetUserOrFriendProfileVCMethod_FailKey: fail ? : ^(int code, NSString * desc){}
|
||||
};
|
||||
[TUICore createObject:TUICore_TUIContactObjectFactory key:TUICore_TUIContactObjectFactory_GetUserOrFriendProfileVCMethod param:param];
|
||||
}
|
||||
|
||||
- (void)addGroupId:(NSString *)groupId memebers:(NSArray *)members {
|
||||
@weakify(self);
|
||||
[[V2TIMManager sharedInstance] inviteUserToGroup:_groupId
|
||||
userList:members
|
||||
succ:^(NSArray<V2TIMGroupMemberOperationResult *> *resultList) {
|
||||
@strongify(self);
|
||||
// [self updateData];
|
||||
[TUITool makeToast:TIMCommonLocalizableString(add_success)];
|
||||
}
|
||||
fail:^(int code, NSString *desc) {
|
||||
[TUITool makeToastError:code msg:desc];
|
||||
}];
|
||||
}
|
||||
|
||||
- (void)deleteGroupId:(NSString *)groupId memebers:(NSArray *)members {
|
||||
@weakify(self);
|
||||
[[V2TIMManager sharedInstance] kickGroupMember:groupId
|
||||
memberList:members
|
||||
reason:@""
|
||||
succ:^(NSArray<V2TIMGroupMemberOperationResult *> *resultList) {
|
||||
@strongify(self);
|
||||
// [self updateData];
|
||||
[TUITool makeToast:TIMCommonLocalizableString(delete_success)];
|
||||
}
|
||||
fail:^(int code, NSString *desc) {
|
||||
[TUITool makeToastError:code msg:desc];
|
||||
}];
|
||||
}
|
||||
@end
|
||||
@@ -0,0 +1,51 @@
|
||||
//
|
||||
// TUIContactObjectFactory.h
|
||||
// TUIContact
|
||||
//
|
||||
// Created by wyl on 2023/3/29.
|
||||
// Copyright © 2023 Tencent. All rights reserved.
|
||||
//
|
||||
|
||||
#import <Foundation/Foundation.h>
|
||||
#import <TIMCommon/TIMDefine.h>
|
||||
#import <TUICore/TUICore.h>
|
||||
|
||||
NS_ASSUME_NONNULL_BEGIN
|
||||
|
||||
/**
|
||||
* TUIContactService currently provides the following services:
|
||||
* 1. Create a contact list
|
||||
* 2. Create a contact selector
|
||||
* 3. Create friend profile view controller
|
||||
* 4. Create user profile view controller
|
||||
* 5. Get friend or user profile view controller based on userID
|
||||
*
|
||||
* You can call the service through the [TUICore createObject:..] method. Different service parameters are as follows:
|
||||
*
|
||||
* > Create a contact list:
|
||||
* factoryName: TUICore_TUIContactObjectFactory
|
||||
* key: TUICore_TUIContactObjectFactory_GetContactControllerMethod
|
||||
*
|
||||
* > Create Contact Picker:
|
||||
* factoryName: TUICore_TUIContactObjectFactory
|
||||
* key: TUICore_TUIContactObjectFactory_GetContactSelectControllerMethod
|
||||
*
|
||||
* > Create friend profile view controller:
|
||||
* factoryName: TUICore_TUIContactObjectFactory
|
||||
* key: TUICore_TUIContactObjectFactory_GetFriendProfileControllerMethod
|
||||
*
|
||||
* > Create user profile view controller:
|
||||
* factoryName: TUICore_TUIContactObjectFactory
|
||||
* key: TUICore_TUIContactObjectFactory_UserProfileController_Classic
|
||||
*
|
||||
* > Get friend or user profile view controller based on userID:
|
||||
* factoryName: TUICore_TUIContactObjectFactory
|
||||
* key: TUICore_TUIContactObjectFactory_GetUserOrFriendProfileVCMethod
|
||||
*
|
||||
*/
|
||||
|
||||
@interface TUIContactObjectFactory : NSObject
|
||||
+ (TUIContactObjectFactory *)shareInstance;
|
||||
@end
|
||||
|
||||
NS_ASSUME_NONNULL_END
|
||||
282
TUIKit/TUIContact/UI_Classic/Service/TUIContactObjectFactory.m
Normal file
282
TUIKit/TUIContact/UI_Classic/Service/TUIContactObjectFactory.m
Normal file
@@ -0,0 +1,282 @@
|
||||
//
|
||||
// TUIContactObjectFactory.m
|
||||
// TUIContact
|
||||
//
|
||||
// Created by wyl on 2023/3/29.
|
||||
// Copyright © 2023 Tencent. All rights reserved.
|
||||
//
|
||||
|
||||
#import "TUIContactObjectFactory.h"
|
||||
#import <TUICore/TUIThemeManager.h>
|
||||
#import "TUIContactController.h"
|
||||
#import "TUIContactSelectController.h"
|
||||
#import "TUIFriendProfileController.h"
|
||||
#import "TUIGroupCreateController.h"
|
||||
#import "TUIUserProfileController.h"
|
||||
#import "TUIGroupMemberController.h"
|
||||
#import <TIMCommon/TIMDefine.h>
|
||||
#import <TUICore/NSDictionary+TUISafe.h>
|
||||
#import <TUICore/TUIGlobalization.h>
|
||||
#import <TUICore/TUIThemeManager.h>
|
||||
#import "TUIGroupRequestViewController.h"
|
||||
#import "TUISelectGroupMemberViewController.h"
|
||||
|
||||
@interface TUIContactObjectFactory () <TUIObjectProtocol>
|
||||
@end
|
||||
|
||||
@implementation TUIContactObjectFactory
|
||||
+ (void)load {
|
||||
[TUICore registerObjectFactory:TUICore_TUIContactObjectFactory objectFactory:[TUIContactObjectFactory shareInstance]];
|
||||
}
|
||||
+ (TUIContactObjectFactory *)shareInstance {
|
||||
static dispatch_once_t onceToken;
|
||||
static TUIContactObjectFactory *g_sharedInstance = nil;
|
||||
dispatch_once(&onceToken, ^{
|
||||
g_sharedInstance = [[TUIContactObjectFactory alloc] init];
|
||||
});
|
||||
return g_sharedInstance;
|
||||
}
|
||||
|
||||
#pragma mark - TUIObjectProtocol
|
||||
- (id)onCreateObject:(NSString *)method param:(nullable NSDictionary *)param {
|
||||
if ([method isEqualToString:TUICore_TUIContactObjectFactory_GetContactControllerMethod]) {
|
||||
return [self createContactController];
|
||||
} else if ([method isEqualToString:TUICore_TUIContactObjectFactory_GetContactSelectControllerMethod]) {
|
||||
NSString *title = [param objectForKey:TUICore_TUIContactObjectFactory_GetContactSelectControllerMethod_TitleKey];
|
||||
NSArray *sourceIds = [param objectForKey:TUICore_TUIContactObjectFactory_GetContactSelectControllerMethod_SourceIdsKey];
|
||||
NSArray *disableIds = [param objectForKey:TUICore_TUIContactObjectFactory_GetContactSelectControllerMethod_DisableIdsKey];
|
||||
NSDictionary *displayNames = [param objectForKey:TUICore_TUIContactObjectFactory_GetContactSelectControllerMethod_DisplayNamesKey];
|
||||
NSNumber *maxSelectCount = [param objectForKey:TUICore_TUIContactObjectFactory_GetContactSelectControllerMethod_MaxSelectCount];
|
||||
void (^completion)(NSArray<TUICommonContactSelectCellData *> *) =
|
||||
[param objectForKey:TUICore_TUIContactObjectFactory_GetContactSelectControllerMethod_CompletionKey];
|
||||
return [self createContactSelectController:sourceIds
|
||||
disableIds:disableIds
|
||||
title:title
|
||||
displayNames:displayNames
|
||||
maxSelectCount:[maxSelectCount intValue]
|
||||
completion:completion];
|
||||
} else if ([method isEqualToString:TUICore_TUIContactObjectFactory_GetFriendProfileControllerMethod]) {
|
||||
V2TIMFriendInfo *friendInfo = [param objectForKey:TUICore_TUIContactObjectFactory_GetFriendProfileControllerMethod_FriendProfileKey];
|
||||
return [self createFriendProfileController:friendInfo];
|
||||
} else if ([method isEqualToString:TUICore_TUIContactObjectFactory_UserProfileController_Classic]) {
|
||||
V2TIMUserFullInfo *userInfo = [param objectForKey:TUICore_TUIContactObjectFactory_UserProfileController_UserProfile];
|
||||
TUICommonCellData *cellData = [param objectForKey:TUICore_TUIContactObjectFactory_UserProfileController_PendencyData];
|
||||
ProfileControllerAction action =
|
||||
(ProfileControllerAction)([[param objectForKey:TUICore_TUIContactObjectFactory_UserProfileController_ActionType] unsignedIntegerValue]);
|
||||
return [self createUserProfileController:userInfo pendencyData:cellData actionType:action];
|
||||
} else if ([method isEqualToString:TUICore_TUIContactObjectFactory_GetGroupCreateControllerMethod]) {
|
||||
NSString *title = [param tui_objectForKey:TUICore_TUIContactObjectFactory_GetGroupCreateControllerMethod_TitleKey asClass:NSString.class];
|
||||
NSString *groupName = [param tui_objectForKey:TUICore_TUIContactObjectFactory_GetGroupCreateControllerMethod_GroupNameKey asClass:NSString.class];
|
||||
NSString *groupType = [param tui_objectForKey:TUICore_TUIContactObjectFactory_GetGroupCreateControllerMethod_GroupTypeKey asClass:NSString.class];
|
||||
NSArray *contactList = [param tui_objectForKey:TUICore_TUIContactObjectFactory_GetGroupCreateControllerMethod_ContactListKey asClass:NSArray.class];
|
||||
void (^completion)(BOOL, V2TIMGroupInfo *) = [param objectForKey:TUICore_TUIContactObjectFactory_GetGroupCreateControllerMethod_CompletionKey];
|
||||
return [self createGroupCreateController:title groupName:groupName groupType:groupType contactList:contactList completion:completion];
|
||||
|
||||
} else if ([method isEqualToString:TUICore_TUIContactObjectFactory_GetUserOrFriendProfileVCMethod]) {
|
||||
NSString *userID = [param objectForKey:TUICore_TUIContactObjectFactory_GetUserOrFriendProfileVCMethod_UserIDKey];
|
||||
void (^succ)(UIViewController *vc) = [param objectForKey:TUICore_TUIContactObjectFactory_GetUserOrFriendProfileVCMethod_SuccKey];
|
||||
V2TIMFail fail = [param objectForKey:TUICore_TUIContactObjectFactory_GetUserOrFriendProfileVCMethod_FailKey];
|
||||
[self createUserOrFriendProfileVCWithUserID:userID succBlock:succ failBlock:fail];
|
||||
}
|
||||
else if ([method isEqualToString:TUICore_TUIContactObjectFactory_GetGroupMemberVCMethod]) {
|
||||
NSString *groupId = [param objectForKey:@"groupID"];
|
||||
V2TIMGroupInfo *groupInfo = [param objectForKey:@"groupInfo"];
|
||||
TUIGroupMemberController *membersController = [[TUIGroupMemberController alloc] init];
|
||||
membersController.groupId = groupId;
|
||||
membersController.groupInfo = groupInfo;
|
||||
return membersController;
|
||||
}
|
||||
else if ([method isEqualToString:TUICore_TUIContactObjectFactory_GetGroupRequestViewControllerMethod]) {
|
||||
return [self createGroupRequestViewController:[param tui_objectForKey:TUICore_TUIContactObjectFactory_GetGroupRequestViewControllerMethod_GroupInfoKey
|
||||
asClass:V2TIMGroupInfo.class]];
|
||||
} else if ([method isEqualToString:TUICore_TUIContactObjectFactory_GetGroupInfoVC_Classic]) {
|
||||
return [self createGroupInfoController:[param tui_objectForKey:TUICore_TUIContactObjectFactory_GetGroupInfoVC_GroupID asClass:NSString.class]];
|
||||
} else if ([method isEqualToString:TUICore_TUIContactObjectFactory_SelectGroupMemberVC_Classic]) {
|
||||
NSString *groupID = [param tui_objectForKey:TUICore_TUIContactObjectFactory_SelectGroupMemberVC_GroupID asClass:NSString.class];
|
||||
NSString *title = [param tui_objectForKey:TUICore_TUIContactObjectFactory_SelectGroupMemberVC_Name asClass:NSString.class];
|
||||
NSNumber *optionalStyleNum = [param tui_objectForKey:TUICore_TUIContactObjectFactory_SelectGroupMemberVC_OptionalStyle asClass:NSNumber.class];
|
||||
NSArray *selectedUserIDList = [param tui_objectForKey:TUICore_TUIContactObjectFactory_SelectGroupMemberVC_SelectedUserIDList asClass:NSArray.class];
|
||||
|
||||
return [self createSelectGroupMemberViewController:groupID
|
||||
name:title
|
||||
optionalStyle:[optionalStyleNum integerValue]
|
||||
selectedUserIDList:selectedUserIDList
|
||||
userData:@""];
|
||||
}
|
||||
return nil;
|
||||
}
|
||||
|
||||
- (UIViewController *)createContactController {
|
||||
return [[TUIContactController alloc] init];
|
||||
}
|
||||
|
||||
- (UIViewController *)createContactSelectController:(NSArray *)sourceIds
|
||||
disableIds:(NSArray *)disableIds
|
||||
title:(NSString *)title
|
||||
displayNames:(NSDictionary *)displayNames
|
||||
maxSelectCount:(int)maxSelectCount
|
||||
completion:(void (^)(NSArray<TUICommonContactSelectCellData *> *selectArray))completion {
|
||||
TUIContactSelectController *vc = [[TUIContactSelectController alloc] init];
|
||||
vc.title = title;
|
||||
vc.displayNames = displayNames;
|
||||
vc.maxSelectCount = maxSelectCount;
|
||||
if (sourceIds.count > 0) {
|
||||
vc.sourceIds = sourceIds;
|
||||
} else if (disableIds.count > 0) {
|
||||
vc.viewModel.disableFilter = ^BOOL(TUICommonContactSelectCellData *data) {
|
||||
for (NSString *identifier in disableIds) {
|
||||
if ([identifier isEqualToString:data.identifier]) {
|
||||
return YES;
|
||||
}
|
||||
}
|
||||
return NO;
|
||||
};
|
||||
}
|
||||
vc.finishBlock = ^(NSArray<TUICommonContactSelectCellData *> *_Nonnull selectArray) {
|
||||
if (completion) {
|
||||
completion(selectArray);
|
||||
}
|
||||
};
|
||||
return vc;
|
||||
}
|
||||
|
||||
- (UIViewController *)createFriendProfileController:(V2TIMFriendInfo *)friendInfo {
|
||||
TUIFriendProfileController *vc = [[TUIFriendProfileController alloc] init];
|
||||
vc.friendProfile = friendInfo;
|
||||
return vc;
|
||||
}
|
||||
|
||||
- (UIViewController *)createUserProfileController:(V2TIMUserFullInfo *)user actionType:(ProfileControllerAction)actionType {
|
||||
TUIUserProfileController *vc = [[TUIUserProfileController alloc] init];
|
||||
vc.userFullInfo = user;
|
||||
vc.actionType = actionType;
|
||||
return vc;
|
||||
}
|
||||
|
||||
- (UIViewController *)createUserProfileController:(V2TIMUserFullInfo *)user
|
||||
pendencyData:(TUICommonCellData *)data
|
||||
actionType:(ProfileControllerAction)actionType {
|
||||
TUIUserProfileController *vc = [[TUIUserProfileController alloc] init];
|
||||
vc.userFullInfo = user;
|
||||
vc.actionType = actionType;
|
||||
if (actionType == PCA_GROUP_CONFIRM) {
|
||||
if ([data isKindOfClass:[TUIGroupPendencyCellData class]]) {
|
||||
vc.groupPendency = (TUIGroupPendencyCellData *)data;
|
||||
}
|
||||
} else if (actionType == PCA_PENDENDY_CONFIRM) {
|
||||
vc.pendency = (TUICommonPendencyCellData *)data;
|
||||
}
|
||||
return vc;
|
||||
}
|
||||
|
||||
- (UIViewController *)createGroupCreateController:(NSString *)title
|
||||
groupName:(NSString *)groupName
|
||||
groupType:(NSString *)groupType
|
||||
contactList:(NSArray<TUICommonContactSelectCellData *> *)contactList
|
||||
completion:(void (^)(BOOL isSuccess, V2TIMGroupInfo *_Nonnull info))completion {
|
||||
TUIGroupCreateController *vc = [[TUIGroupCreateController alloc] init];
|
||||
vc.title = @"";
|
||||
|
||||
V2TIMGroupInfo *createGroupInfo = [[V2TIMGroupInfo alloc] init];
|
||||
createGroupInfo.groupID = @"";
|
||||
createGroupInfo.groupName = groupName;
|
||||
createGroupInfo.groupType = groupType;
|
||||
vc.createGroupInfo = createGroupInfo;
|
||||
vc.createContactArray = [NSArray arrayWithArray:contactList];
|
||||
|
||||
vc.submitCallback = ^(BOOL isSuccess, V2TIMGroupInfo *_Nonnull info) {
|
||||
if (completion) {
|
||||
completion(isSuccess, info);
|
||||
}
|
||||
};
|
||||
return vc;
|
||||
}
|
||||
|
||||
- (void)createUserOrFriendProfileVCWithUserID:(NSString *)userID succBlock:(void (^)(UIViewController *vc))succ failBlock:(nullable V2TIMFail)fail {
|
||||
if (userID.length == 0) {
|
||||
if (fail) {
|
||||
fail(-1, @"invalid parameter, userID is nil");
|
||||
}
|
||||
return;
|
||||
}
|
||||
@weakify(self);
|
||||
[[V2TIMManager sharedInstance] getFriendsInfo:@[ userID ]
|
||||
succ:^(NSArray<V2TIMFriendInfoResult *> *resultList) {
|
||||
@strongify(self);
|
||||
V2TIMFriendInfoResult *friend = resultList.firstObject;
|
||||
if (friend.relation & V2TIM_FRIEND_RELATION_TYPE_IN_MY_FRIEND_LIST) {
|
||||
if (friend.friendInfo == nil) {
|
||||
if (fail) {
|
||||
fail(-1, @"invalid parameter, friend info is nil");
|
||||
}
|
||||
return;
|
||||
}
|
||||
UIViewController *vc = [self createFriendProfileController:friend.friendInfo];
|
||||
if (succ) {
|
||||
succ(vc);
|
||||
}
|
||||
} else {
|
||||
[[V2TIMManager sharedInstance]
|
||||
getUsersInfo:@[ userID ]
|
||||
succ:^(NSArray<V2TIMUserFullInfo *> *infoList) {
|
||||
V2TIMUserFullInfo *user = infoList.firstObject;
|
||||
if (user == nil) {
|
||||
if (fail) {
|
||||
fail(-1, @"invalid parameter, user info is nil");
|
||||
return;
|
||||
}
|
||||
}
|
||||
NSUInteger actionType =
|
||||
[user.userID isEqualToString:[[V2TIMManager sharedInstance] getLoginUser]] ? 0 : 1;
|
||||
UIViewController *vc = [self createUserProfileController:user actionType:actionType];
|
||||
if (succ) {
|
||||
succ(vc);
|
||||
}
|
||||
}
|
||||
fail:fail];
|
||||
}
|
||||
}
|
||||
fail:fail];
|
||||
}
|
||||
|
||||
|
||||
#pragma mark - TUIObjectProtocol - groupInfo
|
||||
|
||||
- (UIViewController *)createGroupRequestViewController:(V2TIMGroupInfo *)groupInfo {
|
||||
TUIGroupRequestViewController *vc = [[TUIGroupRequestViewController alloc] init];
|
||||
vc.groupInfo = groupInfo;
|
||||
return vc;
|
||||
}
|
||||
|
||||
- (UIViewController *)createGroupInfoController:(NSString *)groupID {
|
||||
|
||||
return nil;
|
||||
}
|
||||
|
||||
- (UIViewController *)createSelectGroupMemberViewController:(NSString *)groupID
|
||||
name:(NSString *)name
|
||||
optionalStyle:(TUISelectMemberOptionalStyle)optionalStyle {
|
||||
return [self createSelectGroupMemberViewController:groupID name:name optionalStyle:optionalStyle selectedUserIDList:@[]];
|
||||
}
|
||||
|
||||
- (UIViewController *)createSelectGroupMemberViewController:(NSString *)groupID
|
||||
name:(NSString *)name
|
||||
optionalStyle:(TUISelectMemberOptionalStyle)optionalStyle
|
||||
selectedUserIDList:(NSArray *)userIDList {
|
||||
return [self createSelectGroupMemberViewController:groupID name:name optionalStyle:optionalStyle selectedUserIDList:@[] userData:@""];
|
||||
}
|
||||
|
||||
- (UIViewController *)createSelectGroupMemberViewController:(NSString *)groupID
|
||||
name:(NSString *)name
|
||||
optionalStyle:(TUISelectMemberOptionalStyle)optionalStyle
|
||||
selectedUserIDList:(NSArray *)userIDList
|
||||
userData:(NSString *)userData {
|
||||
TUISelectGroupMemberViewController *vc = [[TUISelectGroupMemberViewController alloc] init];
|
||||
vc.groupId = groupID;
|
||||
vc.name = name;
|
||||
vc.optionalStyle = optionalStyle;
|
||||
vc.selectedUserIDList = userIDList;
|
||||
vc.userData = userData;
|
||||
return vc;
|
||||
}
|
||||
@end
|
||||
22
TUIKit/TUIContact/UI_Classic/Service/TUIContactService.h
Normal file
22
TUIKit/TUIContact/UI_Classic/Service/TUIContactService.h
Normal file
@@ -0,0 +1,22 @@
|
||||
//
|
||||
// TUIContactService.h
|
||||
// lottie-ios
|
||||
//
|
||||
// Created by kayev on 2021/8/18.
|
||||
// Copyright © 2023 Tencent. All rights reserved.
|
||||
//
|
||||
|
||||
#import <Foundation/Foundation.h>
|
||||
#import <TIMCommon/TIMCommonModel.h>
|
||||
#import <TIMCommon/TIMDefine.h>
|
||||
#import <TUICore/TUICore.h>
|
||||
|
||||
NS_ASSUME_NONNULL_BEGIN
|
||||
|
||||
@interface TUIContactService : NSObject <TUIServiceProtocol>
|
||||
|
||||
+ (TUIContactService *)shareInstance;
|
||||
|
||||
@end
|
||||
|
||||
NS_ASSUME_NONNULL_END
|
||||
126
TUIKit/TUIContact/UI_Classic/Service/TUIContactService.m
Normal file
126
TUIKit/TUIContact/UI_Classic/Service/TUIContactService.m
Normal file
@@ -0,0 +1,126 @@
|
||||
//
|
||||
// TUIContactService.m
|
||||
// lottie-ios
|
||||
//
|
||||
// Created by kayev on 2021/8/18.
|
||||
// Copyright © 2023 Tencent. All rights reserved.
|
||||
//
|
||||
|
||||
#import "TUIContactService.h"
|
||||
#import <TIMCommon/TIMDefine.h>
|
||||
#import <TUICore/NSDictionary+TUISafe.h>
|
||||
#import <TUICore/TUIGlobalization.h>
|
||||
#import <TUICore/TUIThemeManager.h>
|
||||
#import "TUIGroupRequestViewController.h"
|
||||
#import "TUISelectGroupMemberViewController.h"
|
||||
@implementation TUIContactService
|
||||
|
||||
+ (void)load {
|
||||
TUIRegisterThemeResourcePath(TUIContactThemePath, TUIThemeModuleContact);
|
||||
[TUICore registerService:TUICore_TUIContactService object:[TUIContactService shareInstance]];
|
||||
}
|
||||
|
||||
+ (TUIContactService *)shareInstance {
|
||||
static dispatch_once_t onceToken;
|
||||
static TUIContactService *g_sharedInstance = nil;
|
||||
dispatch_once(&onceToken, ^{
|
||||
g_sharedInstance = [[TUIContactService alloc] init];
|
||||
});
|
||||
return g_sharedInstance;
|
||||
}
|
||||
- (void)createGroup:(NSString *)groupType
|
||||
createOption:(V2TIMGroupAddOpt)createOption
|
||||
contacts:(NSArray<TUICommonContactSelectCellData *> *)contacts
|
||||
completion:(void (^)(BOOL success, NSString *groupID, NSString *groupName))completion {
|
||||
NSString *loginUser = [[V2TIMManager sharedInstance] getLoginUser];
|
||||
[[V2TIMManager sharedInstance] getUsersInfo:@[ loginUser ]
|
||||
succ:^(NSArray<V2TIMUserFullInfo *> *infoList) {
|
||||
NSString *showName = loginUser;
|
||||
if (infoList.firstObject.nickName.length > 0) {
|
||||
showName = infoList.firstObject.nickName;
|
||||
}
|
||||
NSMutableString *groupName = [NSMutableString stringWithString:showName];
|
||||
NSMutableArray *members = [NSMutableArray array];
|
||||
for (TUICommonContactSelectCellData *item in contacts) {
|
||||
V2TIMCreateGroupMemberInfo *member = [[V2TIMCreateGroupMemberInfo alloc] init];
|
||||
member.userID = item.identifier;
|
||||
member.role = V2TIM_GROUP_MEMBER_ROLE_MEMBER;
|
||||
[groupName appendFormat:@"、%@", item.title];
|
||||
[members addObject:member];
|
||||
}
|
||||
|
||||
if ([groupName length] > 10) {
|
||||
groupName = [groupName substringToIndex:10].mutableCopy;
|
||||
}
|
||||
|
||||
V2TIMGroupInfo *info = [[V2TIMGroupInfo alloc] init];
|
||||
info.groupName = groupName;
|
||||
info.groupType = groupType;
|
||||
if (![info.groupType isEqualToString:GroupType_Work]) {
|
||||
info.groupAddOpt = createOption;
|
||||
}
|
||||
|
||||
[[V2TIMManager sharedInstance] createGroup:info
|
||||
memberList:members
|
||||
succ:^(NSString *groupID) {
|
||||
NSString *content = TIMCommonLocalizableString(TUIGroupCreateTipsMessage);
|
||||
if ([info.groupType isEqualToString:GroupType_Community]) {
|
||||
content = TIMCommonLocalizableString(TUICommunityCreateTipsMessage);
|
||||
}
|
||||
NSDictionary *dic = @{
|
||||
@"version" : @(GroupCreate_Version),
|
||||
BussinessID : BussinessID_GroupCreate,
|
||||
@"opUser" : showName,
|
||||
@"content" : content,
|
||||
@"cmd" : [info.groupType isEqualToString:GroupType_Community] ? @1 : @0
|
||||
};
|
||||
NSData *data = [NSJSONSerialization dataWithJSONObject:dic options:NSJSONWritingPrettyPrinted error:nil];
|
||||
V2TIMMessage *msg = [[V2TIMManager sharedInstance] createCustomMessage:data];
|
||||
[[V2TIMManager sharedInstance] sendMessage:msg
|
||||
receiver:nil
|
||||
groupID:groupID
|
||||
priority:V2TIM_PRIORITY_DEFAULT
|
||||
onlineUserOnly:NO
|
||||
offlinePushInfo:nil
|
||||
progress:nil
|
||||
succ:nil
|
||||
fail:nil];
|
||||
// wait for a second to ensure the group created message arrives first
|
||||
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.15 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
|
||||
if (completion) {
|
||||
completion(YES, groupID, groupName);
|
||||
}
|
||||
});
|
||||
}
|
||||
fail:^(int code, NSString *msg) {
|
||||
if (completion) {
|
||||
completion(NO, nil, nil);
|
||||
}
|
||||
if (code == ERR_SDK_INTERFACE_NOT_SUPPORT) {
|
||||
[TUITool postUnsupportNotificationOfService:TIMCommonLocalizableString(TUIKitErrorUnsupportIntefaceCommunity)
|
||||
serviceDesc:TIMCommonLocalizableString(TUIKitErrorUnsupportIntefaceCommunityDesc)
|
||||
debugOnly:YES];
|
||||
}
|
||||
}];
|
||||
}
|
||||
fail:^(int code, NSString *msg) {
|
||||
if (completion) {
|
||||
completion(NO, nil, nil);
|
||||
}
|
||||
}];
|
||||
}
|
||||
|
||||
#pragma mark - TUIServiceProtocol
|
||||
- (id)onCall:(NSString *)method param:(NSDictionary *)param {
|
||||
id returnObject = nil;
|
||||
if ([method isEqualToString:TUICore_TUIContactService_CreateGroupMethod]) {
|
||||
NSString *groupType = [param tui_objectForKey:TUICore_TUIContactService_CreateGroupMethod_GroupTypeKey asClass:NSString.class];
|
||||
NSNumber *option = [param tui_objectForKey:TUICore_TUIContactService_CreateGroupMethod_OptionKey asClass:NSNumber.class];
|
||||
NSArray *contacts = [param tui_objectForKey:TUICore_TUIContactService_CreateGroupMethod_ContactsKey asClass:NSArray.class];
|
||||
void (^completion)(BOOL, NSString *, NSString *) = [param objectForKey:TUICore_TUIContactService_CreateGroupMethod_CompletionKey];
|
||||
|
||||
[self createGroup:groupType createOption:[option intValue] contacts:contacts completion:completion];
|
||||
}
|
||||
return returnObject;
|
||||
}
|
||||
@end
|
||||
Reference in New Issue
Block a user