363 lines
14 KiB
Objective-C
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
|