Files
peko-ios/YuMi/Modules/YMRoom/View/Setting/Presenter/XPRoomSettingPresenter.m

363 lines
14 KiB
Objective-C

//
// YMRoomSettingPresenter.m
// YUMI
//
// Created by YUMI on 2021/12/27.
//
#import "XPRoomSettingPresenter.h"
#import <NIMSDK/NIMSDK.h>
///Tool
#import "AccountInfoStorage.h"
#import "Api+RoomSetting.h"
#import "DESEncrypt.h"
#import "YUMIConstant.h"
#import "ClientConfig.h"
///Model
#import "RoomInfoModel.h"
///P
#import "XPRoomSettingProtocol.h"
#import "XPMessageRemoteExtModel.h"
@implementation XPRoomSettingPresenter
- (void)getRoomSettingList:(RoomInfoModel *)roomInfo isSuperAdmin:(BOOL)isSuperAdmin {
XPRoomSettingItemModel * titleItem = [[XPRoomSettingItemModel alloc] init];
titleItem.title = YMLocalizedString(@"XPRoomSettingPresenter0");
titleItem.subTitle = roomInfo.title;
titleItem.type = RoomSettingItemType_Title;
XPRoomSettingItemModel * lockItem = [[XPRoomSettingItemModel alloc] init];
lockItem.title = YMLocalizedString(@"XPRoomSettingPresenter1");
lockItem.switchState = roomInfo.roomPwd.length > 0;
lockItem.type = RoomSettingItemType_Lock;
XPRoomSettingItemModel * pwdItem;
if (roomInfo.roomPwd.length > 0) {
pwdItem = [[XPRoomSettingItemModel alloc] init];
NSString * roomPwd = [DESEncrypt decryptUseDES:roomInfo.roomPwd key:KeyWithType(KeyType_PasswordEncode)];
pwdItem.title = roomPwd;
pwdItem.type = RoomSettingItemType_Pwd;
}
XPRoomSettingItemModel *classItem = [[XPRoomSettingItemModel alloc] init];
classItem.title = YMLocalizedString(@"XPRoomSettingPresenter2");
classItem.subTitle = roomInfo.sortName;
classItem.type = RoomSettingItemType_Class;
XPRoomSettingItemModel *tagItem = [[XPRoomSettingItemModel alloc] init];
tagItem.title = YMLocalizedString(@"XPRoomSettingPresenter3");
tagItem.subTitle = roomInfo.roomTag;
tagItem.type = RoomSettingItemType_Tag;
XPRoomSettingItemModel * managerItem = [[XPRoomSettingItemModel alloc] init];
managerItem.title = YMLocalizedString(@"XPRoomSettingPresenter4");
managerItem.type = RoomSettingItemType_Manager_List;
XPRoomSettingItemModel * blackItem = [[XPRoomSettingItemModel alloc] init];
blackItem.title = YMLocalizedString(@"XPRoomSettingPresenter5");
blackItem.type = RoomSettingItemType_Black_List;
XPRoomSettingItemModel * giftEffectItem = [[XPRoomSettingItemModel alloc] init];
giftEffectItem.title = YMLocalizedString(@"XPRoomSettingPresenter6");
giftEffectItem.switchState = roomInfo.hasAnimationEffect;
giftEffectItem.type = RoomSettingItemType_Gift_Effect;
XPRoomSettingItemModel * messageScreedItem = [[XPRoomSettingItemModel alloc] init];
messageScreedItem.title = YMLocalizedString(@"XPRoomSettingPresenter7");
messageScreedItem.switchState = !roomInfo.isCloseScreen;
messageScreedItem.type = RoomSettingItemType_Message_Screen;
XPRoomSettingItemModel * arrangeMicItem = [[XPRoomSettingItemModel alloc] init];
arrangeMicItem.title = YMLocalizedString(@"XPRoomSettingPresenter8");
arrangeMicItem.switchState = roomInfo.roomModeType == RoomModeType_Open_Micro_Mode;
arrangeMicItem.type = RoomSettingItemType_Arrange_Mic;
XPRoomSettingItemModel * leaveItem = [[XPRoomSettingItemModel alloc] init];
leaveItem.title = YMLocalizedString(@"XPRoomSettingPresenter9");
leaveItem.switchState = roomInfo.leaveMode;
leaveItem.type = RoomSettingItemType_Leave_Model;
NSString * roomId = [NSString stringWithFormat:@"%ld", roomInfo.roomId];
NSString * uid = [AccountInfoStorage instance].getUid;
///获取房间角色
NIMChatroomMembersByIdsRequest *request = [[NIMChatroomMembersByIdsRequest alloc]init];
request.roomId = roomId;
request.userIds = @[uid];
[[NIMSDK sharedSDK].chatroomManager fetchChatroomMembersByIds:request completion:^(NSError * _Nullable error, NSArray<NIMChatroomMember *> * _Nullable members) {
NSArray * array;
if (error == nil) {
NIMChatroomMember * member = members.firstObject;
if (roomInfo.type == RoomType_Anchor) {
if (member.type == NIMChatroomMemberTypeCreator || isSuperAdmin) {
if (roomInfo.isPermitRoom == PermitRoomType_Licnese) {
if (roomInfo.roomPwd.length > 0) {
array = @[
@[titleItem, lockItem, pwdItem],
@[classItem, tagItem],
@[managerItem, blackItem, giftEffectItem, messageScreedItem]
];
} else {
array = @[
@[titleItem, lockItem],
@[classItem, tagItem],
@[managerItem, blackItem, giftEffectItem, messageScreedItem]
];
}
} else {
if (roomInfo.roomPwd.length > 0) {
array = @[
@[titleItem, lockItem, pwdItem],
@[classItem, tagItem],
@[managerItem, blackItem, giftEffectItem, messageScreedItem]
];
} else {
array = @[
@[titleItem, lockItem],
@[classItem, tagItem],
@[managerItem, blackItem, giftEffectItem, messageScreedItem]
];
}
}
} else {
if (roomInfo.roomPwd.length > 0) {
array = @[
@[titleItem, lockItem, pwdItem],
@[tagItem],
@[managerItem, blackItem, giftEffectItem, messageScreedItem]
];
} else {
array = @[
@[titleItem, lockItem],
@[tagItem],
@[blackItem, giftEffectItem]
];
}
}
} else {
if (member.type == NIMChatroomMemberTypeCreator) {
if (roomInfo.isPermitRoom == PermitRoomType_Licnese) {
if (roomInfo.roomPwd.length > 0) {
array = @[
@[titleItem, lockItem,pwdItem],
@[tagItem],
@[managerItem, blackItem, giftEffectItem, messageScreedItem, arrangeMicItem, leaveItem]
];
} else {
array = @[
@[titleItem, lockItem],
@[tagItem],
@[managerItem, blackItem, giftEffectItem, messageScreedItem, arrangeMicItem, leaveItem]
];
}
} else {
if (roomInfo.type == RoomType_MiniGame) {
if (roomInfo.roomPwd.length > 0) {
array = @[
@[titleItem, lockItem, pwdItem],
@[tagItem],
@[managerItem, blackItem, giftEffectItem, messageScreedItem]
];
}else {
array = @[
@[titleItem, lockItem],
@[tagItem],
@[managerItem, blackItem, giftEffectItem, messageScreedItem]
];
}
} else {
if (roomInfo.roomPwd.length > 0) {
array = @[
@[titleItem, lockItem, pwdItem],
@[tagItem],
@[managerItem, blackItem, giftEffectItem, messageScreedItem, arrangeMicItem]
];
}else {
array = @[
@[titleItem, lockItem],
@[tagItem],
@[managerItem, blackItem, giftEffectItem, messageScreedItem, arrangeMicItem]
];
}
}
}
}else if(isSuperAdmin) {
if (roomInfo.roomPwd.length > 0) {
array = @[
@[titleItem, lockItem,pwdItem],
@[tagItem],
@[managerItem,blackItem, giftEffectItem, messageScreedItem, arrangeMicItem]
];
} else {
array = @[
@[titleItem, lockItem],
@[tagItem],
@[managerItem,blackItem, giftEffectItem, messageScreedItem, arrangeMicItem]
];
}
} else if(member.type == NIMChatroomMemberTypeManager) {
if (roomInfo.roomPwd.length > 0) {
array = @[
@[titleItem, lockItem,pwdItem],
@[tagItem],
@[blackItem, giftEffectItem, messageScreedItem, arrangeMicItem]
];
} else {
array = @[
@[titleItem, lockItem],
@[tagItem],
@[blackItem, giftEffectItem, messageScreedItem, arrangeMicItem]
];
}
}
}
if(![ClientConfig shareConfig].canOpen) {
array = @[
@[messageScreedItem, titleItem],
@[lockItem],
@[managerItem, blackItem]
];
}
[[self getView] getRoomSettingListSuccess:array];
}
}];
}
/// 获取房间信息
/// @param roomUid 房主的uid
- (void)getRoomInfo:(NSString *)roomUid {
NSString * uid = [AccountInfoStorage instance].getUid;
[Api getRoomInfo:[self createHttpCompletion:^(BaseModel * _Nonnull data) {
RoomInfoModel * roomInfo = [RoomInfoModel modelWithDictionary:data.data];
[[self getView] getRoomInfoSuccess:roomInfo];
} showLoading:YES] uid:roomUid intoUid:uid];
}
/// 开启排麦
/// @param roomUid 房主的uid
- (void)openRoomArrangeMic:(NSString *)roomUid {
NSString * uid = [AccountInfoStorage instance].getUid;
[Api openRoomArrangeMic:[self createHttpCompletion:^(BaseModel * _Nonnull data) {
[[self getView] openRoomArrangeMicSuccess];
} showLoading:YES] roomUid:roomUid operUid:uid];
}
/// 关闭排麦
/// @param roomUid 房主的uid
- (void)closeRoomArrangeMic:(NSString *)roomUid {
NSString * uid = [AccountInfoStorage instance].getUid;
[Api closeRoomArrangeMic:[self createHttpCompletion:^(BaseModel * _Nonnull data) {
[[self getView] closeRoomArrangeMicSuccess];
} showLoading:YES] roomUid:roomUid operUid:uid];
}
/// 开启离开模式
/// @param roomUid 房主的uid
- (void)openRoomLeaveMode:(NSString *)roomUid {
NSString * uid = [AccountInfoStorage instance].getUid;
[Api openRoomLeaveMode:[self createHttpCompletion:^(BaseModel * _Nonnull data) {
[[self getView] openRoomArrangeMicSuccess];
} showLoading:YES] roomUid:roomUid uid:uid];
}
/// 关闭离开模式
/// @param roomUid 房主的uid
- (void)closeRoomLeaveMode:(NSString *)roomUid {
NSString * uid = [AccountInfoStorage instance].getUid;
[Api closeRoomLeaveMode:[self createHttpCompletion:^(BaseModel * _Nonnull data) {
[[self getView] closeRoomArrangeMicSuccess];
} showLoading:YES] roomUid:roomUid uid:uid];
}
/// 更新公屏状态
/// @param isCloseScreen 是否关闭公屏
/// @param roomId 房间的id
- (void)updateRoomMessageScreenState:(BOOL)isCloseScreen roomId:(NSString *)roomId {
NSString * uid = [AccountInfoStorage instance].getUid;
NSString * ticket = [AccountInfoStorage instance].getTicket;
NSString * isCleScreenStr = isCloseScreen ? @"1" : @"0";
[Api updateRoomInfoMessageState:[self createHttpCompletion:^(BaseModel * _Nonnull data) {
RoomInfoModel * roomInfo = [RoomInfoModel modelWithDictionary:data.data];
[[self getView] updateRoomMessageScreenStateSuccess:roomInfo];
} showLoading:YES] roomId:roomId isCloseScreen:isCleScreenStr ticket:ticket uid:uid];
}
/// 更新房间信息
/// @param title 房间标题
/// @param roomPwd 房间密码
/// @param tagId 房间tag
/// @param hasAnimationEffect 是否开启房间特效
/// @param roomUid 房间uid
/// @param roomId 群聊的id
/// @param mgId 小游戏的id
- (void)updateRoomInfo:(NSString *)title roomPwd:(NSString *)roomPwd tagId:(NSString *)tagId classifyId:(NSString *)classifyId hasAnimationEffect:(BOOL)hasAnimationEffect roomUid:(NSString *)roomUid roomId:(NSString *)roomId type:(RoomType)type itemType:(RoomSettingItemType)itemType mgId:(NSString *)mgId{
NSString * uid = [AccountInfoStorage instance].getUid;
NSString * ticket = [AccountInfoStorage instance].getTicket;
NSMutableDictionary * params = [NSMutableDictionary dictionary];
[params setObject:ticket forKey:@"ticket"];
[params setObject:uid forKey:@"uid"];
[params setObject:roomUid forKey:@"roomUid"];
if (title.length > 0) {
[params setObject:title forKey:@"title"];
}
if (roomPwd.length > 0) {
[params setObject:roomPwd forKey:@"roomPwd"];
} else{
[params setObject:@"" forKey:@"roomPwd"];
}
if (tagId.length > 0) {
[params setObject:tagId forKey:@"tagId"];
}
if (classifyId.length > 0) {
[params setObject:classifyId forKey:@"singleRoomSortId"];
}
[params setObject:@(type) forKey:@"type"];
[params setObject:@(hasAnimationEffect) forKey:@"hasAnimationEffect"];
if (mgId.length > 0) {
[params setObject:mgId forKey:@"mgId"];
}
///获取房间角色
NIMChatroomMembersByIdsRequest *request = [[NIMChatroomMembersByIdsRequest alloc]init];
request.roomId = roomId;
request.userIds = @[uid];
[[NIMSDK sharedSDK].chatroomManager fetchChatroomMembersByIds:request completion:^(NSError * _Nullable error, NSArray<NIMChatroomMember *> * _Nullable members) {
if (error == nil) {
NIMChatroomMember * member = members.firstObject;
if (member.type == NIMTeamMemberTypeOwner) {
[Api ownerUpdateRoomInfo:[self createHttpCompletion:^(BaseModel * _Nonnull data) {
RoomInfoModel * roomInfo = [RoomInfoModel modelWithJSON:data.data];
[[self getView] updateRoomInfoSuccess:roomInfo itemType:itemType];
}fail:^(NSInteger code, NSString * _Nullable msg) {
[[self getView] updateRoomInfoFail:msg];
} showLoading:YES] params:params];
} else if(member.type == NIMTeamMemberTypeManager) {
[Api managerUpdateRoomInfo:[self createHttpCompletion:^(BaseModel * _Nonnull data) {
RoomInfoModel * roomInfo = [RoomInfoModel modelWithJSON:data.data];
[[self getView] updateRoomInfoSuccess:roomInfo itemType:itemType];
}fail:^(NSInteger code, NSString * _Nullable msg) {
[[self getView] updateRoomInfoFail:msg];
} showLoading:YES] params:params];
}
} else {
[[self getView] updateRoomInfoFail:YMLocalizedString(@"XPRoomSettingPresenter10")];
}
}];
}
/// 获取房间在线用户
/// @param roomUid roomUid
-(void)getRoomOnlineUserListWithRoomUid:(NSString *)roomUid{
[Api requestRoomOnlineUserList:[self createHttpCompletion:^(BaseModel * _Nonnull data) {
NSArray *list = [XPMessageRemoteExtModel modelsWithArray:data.data];
[[self getView]getRoomOnlineUserListSuccess:list];
} fail:^(NSInteger code, NSString * _Nullable msg) {
}] roomUid:roomUid];
}
@end