395 lines
17 KiB
Objective-C
395 lines
17 KiB
Objective-C
//
|
|
// YMMoreMenuPresenter.m
|
|
// YUMI
|
|
//
|
|
// Created by YUMI on 2021/12/11.
|
|
//
|
|
|
|
#import "XPMoreMenuPresenter.h"
|
|
#import <NIMSDK/NIMSDK.h>
|
|
#import "Api+MoreMenu.h"
|
|
#import "ThemeColor+Room.h"
|
|
#import "AccountInfoStorage.h"
|
|
#import "ClientConfig.h"
|
|
#import "RtcManager.h"
|
|
#import "Api+AnchorPk.h"
|
|
///Model
|
|
#import "XPRoomMoreItemModel.h"
|
|
#import "RoomInfoModel.h"
|
|
#import "XPReleaseRadioModel.h"
|
|
#import "XPNobleTrumpetModel.h"
|
|
#import "XPRoomMoreMenuAction.h"
|
|
#import "XPRoomMoreMenuActionContext.h"
|
|
#import "XPRoomMoreMenuActionFactory.h"
|
|
///P
|
|
#import "XPMoreMenuProtocol.h"
|
|
#import "DJDKMIMOMColor.h"
|
|
|
|
@implementation XPMoreMenuPresenter
|
|
|
|
- (void)loadNIMMemberData:(void(^)(NSArray<NIMChatroomMember *> * _Nullable members))finish withRoomInfo:(RoomInfoModel *)roomInfo{
|
|
if (!finish) {
|
|
return;
|
|
}
|
|
|
|
NSString * uid = [AccountInfoStorage instance].getUid;
|
|
if (uid.length <= 0) {
|
|
finish(nil);
|
|
return;
|
|
}
|
|
NSString * roomId = [NSString stringWithFormat:@"%ld", roomInfo.roomId];
|
|
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 (members) {
|
|
finish(members);
|
|
} else {
|
|
finish(nil);
|
|
}
|
|
}];
|
|
}
|
|
|
|
- (void)getMoreMenuDataSourceWithNewArchitecture:(RoomInfoModel *)roomInfo
|
|
isSuperAdmin:(BOOL)isSuperAdmin
|
|
isOnMic:(BOOL)isOnMic
|
|
isAppSuperAdmin:(BOOL)isAppSuperAdmin {
|
|
// 创建上下文
|
|
XPRoomMoreMenuActionContext *context = [XPRoomMoreMenuActionContext
|
|
contextWithRoomInfo:roomInfo
|
|
userInfo:nil
|
|
hostDelegate:nil
|
|
presentingViewController:nil
|
|
isOnMic:isOnMic
|
|
isSuperAdmin:isSuperAdmin
|
|
isAppSuperAdmin:isAppSuperAdmin];
|
|
|
|
if (isAppSuperAdmin) {
|
|
// 超管使用固定组合
|
|
NSArray<XPRoomMoreMenuAction *> *actions = [XPRoomMoreMenuActionFactory createSuperAdminActionsWithContext:context];
|
|
[self convertActionsToModels:actions];
|
|
} else {
|
|
// 普通用户根据权限创建
|
|
@kWeakify(self);
|
|
[self loadNIMMemberData:^(NSArray<NIMChatroomMember *> * _Nullable members) {
|
|
@kStrongify(self);
|
|
|
|
BOOL isCreator = NO;
|
|
BOOL isManager = NO;
|
|
|
|
if (members && members.count > 0) {
|
|
NIMChatroomMember *member = members.firstObject;
|
|
isCreator = member.type == NIMChatroomMemberTypeCreator;
|
|
isManager = member.type == NIMChatroomMemberTypeManager;
|
|
}
|
|
|
|
NSArray<XPRoomMoreMenuAction *> *actions = [XPRoomMoreMenuActionFactory
|
|
createPanelActionsWithContext:context
|
|
isCreator:isCreator
|
|
isManager:isManager
|
|
isSuperAdmin:isSuperAdmin
|
|
isOnMic:isOnMic];
|
|
|
|
[self convertActionsToModels:actions];
|
|
} withRoomInfo:roomInfo];
|
|
}
|
|
}
|
|
|
|
// 将 Action 转换为数据模型
|
|
- (void)convertActionsToModels:(NSArray<XPRoomMoreMenuAction *> *)actions {
|
|
NSMutableArray *models = [NSMutableArray array];
|
|
for (XPRoomMoreMenuAction *action in actions) {
|
|
[models addObject:[action toItemModel]];
|
|
}
|
|
[[self getView] getMoreMenuDataSuccess:models];
|
|
}
|
|
|
|
- (void)getMoreMenuDataSource:(RoomInfoModel *)roomInfo isSuperAdmin:(BOOL)isSuperAdmin isOnMic:(BOOL)isOnMic isAppSuperAdmin:(BOOL)isAppSuperAdmin{
|
|
XPRoomMoreItemModel * roomPK = [[XPRoomMoreItemModel alloc] init];
|
|
roomPK.title = roomInfo.roomModeType == RoomModeType_Open_PK_Mode ?YMLocalizedString(@"XPMoreMenuPresenter26") : YMLocalizedString(@"XPMoreMenuPresenter1");
|
|
roomPK.imageName= @"room_pk_menu_icon";
|
|
roomPK.type = roomInfo.roomModeType == RoomModeType_Open_PK_Mode ? RoomMoreMenuType_Room_PK_Close : RoomMoreMenuType_Room_PK_Open;
|
|
roomPK.titleColor = [DJDKMIMOMColor roomMoreMenuTextColor];
|
|
|
|
XPRoomMoreItemModel * acrossRoomPK = [[XPRoomMoreItemModel alloc] init];
|
|
acrossRoomPK.title = roomInfo.roomModeType == RoomModeType_Open_AcrossRoomPK_mode ? YMLocalizedString(@"XPMoreMenuPresenter30") : YMLocalizedString(@"XPMoreMenuPresenter31");
|
|
acrossRoomPK.imageName = @"crossroom_pk_menu_icon";
|
|
acrossRoomPK.type = roomInfo.roomModeType == RoomModeType_Open_AcrossRoomPK_mode ? RoomMoreMenuType_Room_Across_PK_Close : RoomMoreMenuType_Room_Across_PK_Open;
|
|
acrossRoomPK.titleColor = [DJDKMIMOMColor roomMoreMenuTextColor];
|
|
|
|
XPRoomMoreItemModel *bgValue = [[XPRoomMoreItemModel alloc] init];
|
|
bgValue.title = YMLocalizedString(@"1.0.18_0");
|
|
bgValue.imageName= @"room_menu_background";
|
|
bgValue.type = RoomMoreMenuType_Room_Type_Background;
|
|
bgValue.titleColor = [DJDKMIMOMColor roomMoreMenuTextColor];
|
|
|
|
XPRoomMoreItemModel * giftEffect = [[XPRoomMoreItemModel alloc] init];
|
|
giftEffect.title = roomInfo.hasAnimationEffect ? YMLocalizedString(@"XPMoreMenuPresenter28") : YMLocalizedString(@"XPMoreMenuPresenter5");
|
|
giftEffect.imageName = @"room_more_menu_gift_effect";
|
|
giftEffect.type = roomInfo.hasAnimationEffect ? RoomMoreMenuType_Gift_Effect_Close : RoomMoreMenuType_Gift_Effect_Open;
|
|
giftEffect.titleColor = [DJDKMIMOMColor roomMoreMenuTextColor];
|
|
|
|
XPRoomMoreItemModel * dating = [[XPRoomMoreItemModel alloc] init];
|
|
dating.title = roomInfo.roomModeType == RoomModeType_Open_Blind ? YMLocalizedString(@"XPMoreMenuPresenter29") : YMLocalizedString(@"XPMoreMenuPresenter8");
|
|
dating.imageName = @"room_more_menu_dating";
|
|
dating.type = roomInfo.roomModeType == RoomModeType_Open_Blind ? RoomMoreMenuType_Room_Dating_Close : RoomMoreMenuType_Room_Dating_Open;
|
|
dating.titleColor = [DJDKMIMOMColor roomMoreMenuTextColor];
|
|
|
|
XPRoomMoreItemModel * anchorRoomPK = [[XPRoomMoreItemModel alloc] init];
|
|
anchorRoomPK.title = roomInfo.roomModeType == RoomModeType_Open_AcrossRoomPK_mode ? YMLocalizedString(@"XPMoreMenuPresenter32") : YMLocalizedString(@"XPMoreMenuPresenter33");
|
|
anchorRoomPK.imageName = @"room_more_menu_anchor_pk";
|
|
anchorRoomPK.type = roomInfo.roomModeType == RoomModeType_Open_AcrossRoomPK_mode ? RoomMoreMenuType_Room_Anchor_PK_Close : RoomMoreMenuType_Room_Anchor_PK_Open;
|
|
anchorRoomPK.titleColor = [DJDKMIMOMColor roomMoreMenuTextColor];
|
|
if (roomInfo.pkState == AcrossRoomPkStateTypePenalty) {
|
|
if ([roomInfo.winUid isEqualToString:[AccountInfoStorage instance].getUid]) {
|
|
anchorRoomPK.title = YMLocalizedString(@"XPMoreMenuPresenter15");
|
|
} else if ([roomInfo.winUid isEqualToString:roomInfo.pkUid]) {
|
|
anchorRoomPK.title = YMLocalizedString(@"XPMoreMenuPresenter14");
|
|
} else {
|
|
anchorRoomPK.title = YMLocalizedString(@"XPMoreMenuPresenter15");
|
|
}
|
|
} else if (roomInfo.pkState == AcrossRoomPkStateTypePenaltyEnd) {
|
|
anchorRoomPK.title = YMLocalizedString(@"XPMoreMenuPresenter15");
|
|
}
|
|
if (roomInfo.pkMatchStartTime) {
|
|
anchorRoomPK.title = YMLocalizedString(@"XPMoreMenuPresenter17");
|
|
}
|
|
|
|
XPRoomMoreItemModel * clearScreen = [[XPRoomMoreItemModel alloc] init];
|
|
clearScreen.title = YMLocalizedString(@"XPMoreMenuPresenter20");
|
|
clearScreen.imageName = @"room_more_menu_message_clean";
|
|
clearScreen.type = RoomMoreMenuType_Message_Screen_Clear;
|
|
clearScreen.titleColor = [DJDKMIMOMColor roomMoreMenuTextColor];
|
|
|
|
XPRoomMoreItemModel * roomSetting = [[XPRoomMoreItemModel alloc] init];
|
|
roomSetting.title = YMLocalizedString(@"XPMoreMenuPresenter21");
|
|
roomSetting.imageName = @"room_more_menu_setting";
|
|
roomSetting.type = RoomMoreMenuType_Room_Setting;
|
|
roomSetting.titleColor = [DJDKMIMOMColor roomMoreMenuTextColor];
|
|
|
|
XPRoomMoreItemModel * trumpet = [[XPRoomMoreItemModel alloc] init];
|
|
trumpet.title = YMLocalizedString(@"XPMoreMenuPresenter35");
|
|
trumpet.imageName = @"room_more_menu_trumpet";
|
|
trumpet.type = RoomMoreMenuType_Room_trumpet;
|
|
trumpet.titleColor = [DJDKMIMOMColor roomMoreMenuTextColor];
|
|
|
|
XPRoomMoreItemModel * redPacket = [[XPRoomMoreItemModel alloc] init];
|
|
redPacket.title = YMLocalizedString(@"XPMoreMenuPresenter24");
|
|
redPacket.imageName = @"pi_red_packet_entrance";
|
|
redPacket.type = RoomMoreMenuType_Room_redPacket;
|
|
redPacket.titleColor = [DJDKMIMOMColor roomMoreMenuTextColor];
|
|
|
|
XPRoomMoreItemModel * report = [[XPRoomMoreItemModel alloc] init];
|
|
report.title = YMLocalizedString(@"XPMoreMenuPresenter36");
|
|
report.imageName = @"room_info_report";
|
|
report.type = RoomMoreMenuType_Room_report;
|
|
report.titleColor = [DJDKMIMOMColor roomMoreMenuTextColor];
|
|
|
|
XPRoomMoreItemModel * roomPhotoAlbum = [[XPRoomMoreItemModel alloc] init];
|
|
roomPhotoAlbum.title = YMLocalizedString(@"XPMoreMenuPresenter37");
|
|
roomPhotoAlbum.imageName = @"room_info_photo_album";
|
|
roomPhotoAlbum.type = RoomMoreMenuType_Room_Room_Photo_Album;
|
|
roomPhotoAlbum.titleColor = [DJDKMIMOMColor roomMoreMenuTextColor];
|
|
|
|
XPRoomMoreItemModel * roomTypeSetting = [[XPRoomMoreItemModel alloc] init];
|
|
roomTypeSetting.title = YMLocalizedString(@"XPMoreMenuPresenter25");
|
|
roomTypeSetting.imageName = @"room_type_selection_icon";
|
|
roomTypeSetting.type = RoomMoreMenuType_Room_Type_Setting;
|
|
roomTypeSetting.titleColor = [DJDKMIMOMColor roomMoreMenuTextColor];
|
|
|
|
XPRoomMoreItemModel * musicPanel = [[XPRoomMoreItemModel alloc] init];
|
|
musicPanel.title = YMLocalizedString(@"XPRoomMusicVoiceSettingView1");
|
|
musicPanel.imageName = @"menu_music";
|
|
musicPanel.type = RoomMoreMenuType_Room_Music_Panel;
|
|
musicPanel.titleColor = [DJDKMIMOMColor roomMoreMenuTextColor];
|
|
|
|
XPRoomMoreItemModel *appManager = [[XPRoomMoreItemModel alloc] init];
|
|
appManager.type = RoomMoreMenuType_App_Manager;
|
|
appManager.title = YMLocalizedString(@"1.0.34_text_1");
|
|
appManager.imageName = @"app_admin_icon";
|
|
appManager.titleColor = [UIColor orangeColor];
|
|
|
|
NSString * uid = [AccountInfoStorage instance].getUid;
|
|
if (uid.length <= 0) {
|
|
return;
|
|
}
|
|
NSString * roomId = [NSString stringWithFormat:@"%ld", roomInfo.roomId];
|
|
NIMChatroomMembersByIdsRequest *request = [[NIMChatroomMembersByIdsRequest alloc]init];
|
|
request.roomId = roomId;
|
|
request.userIds = @[uid];
|
|
|
|
if (isAppSuperAdmin) {
|
|
NSMutableArray * array = [NSMutableArray array];
|
|
[array addObject:trumpet];
|
|
[array addObject:giftEffect];
|
|
[array addObject:appManager];
|
|
[array addObject:report];
|
|
[[self getView] getMoreMenuDataSuccess:array];
|
|
return;
|
|
}
|
|
|
|
[[NIMSDK sharedSDK].chatroomManager fetchChatroomMembersByIds:request completion:^(NSError * _Nullable error, NSArray<NIMChatroomMember *> * _Nullable members) {
|
|
NSMutableArray * array = [NSMutableArray array];
|
|
BOOL isCreator = NO;
|
|
BOOL isManager = NO;
|
|
NSInteger indexOfRoomAlbum = 0;
|
|
if (error == nil) {
|
|
NIMChatroomMember * member = members.firstObject;
|
|
isCreator = member.type == NIMChatroomMemberTypeCreator;
|
|
isManager = member.type == NIMChatroomMemberTypeManager;
|
|
|
|
if ((isCreator || isManager || isSuperAdmin) && roomInfo.type != RoomType_MiniGame && roomInfo.type != RoomType_Anchor) {
|
|
[array addObject:roomPK];
|
|
indexOfRoomAlbum += 1;
|
|
}
|
|
|
|
if (isCreator && roomInfo.type != RoomType_MiniGame) {
|
|
if(roomInfo.type != RoomType_Anchor){
|
|
[array addObject:acrossRoomPK];
|
|
indexOfRoomAlbum += 1;
|
|
}
|
|
}
|
|
|
|
if (isOnMic) {
|
|
[array addObject:musicPanel];
|
|
indexOfRoomAlbum += 1;
|
|
}
|
|
|
|
if (isCreator && roomInfo.type == RoomType_Anchor) {
|
|
[array addObject:anchorRoomPK];
|
|
indexOfRoomAlbum += 1;
|
|
}
|
|
|
|
if (isCreator || isManager || isSuperAdmin) {
|
|
if (roomInfo.canOpenBlindDate && roomInfo.type != RoomType_Anchor && roomInfo.type != RoomType_MiniGame) {
|
|
[array insertObject:dating atIndex:0];
|
|
indexOfRoomAlbum += 1;
|
|
}
|
|
[array addObject:trumpet];
|
|
[array addObject:giftEffect];
|
|
[array addObject:roomSetting];
|
|
if (isCreator || isManager || isSuperAdmin) {
|
|
[array addObject:bgValue];
|
|
indexOfRoomAlbum += 1;
|
|
}
|
|
[array addObject:clearScreen];
|
|
} else {
|
|
[array addObject:trumpet];
|
|
[array addObject:giftEffect];
|
|
}
|
|
}else{
|
|
[array addObject:giftEffect];
|
|
}
|
|
|
|
[array addObject:report];
|
|
|
|
if ((isCreator || isManager || isSuperAdmin) && // 房主 & 管理
|
|
roomInfo.isPermitRoom != PermitRoomType_License && // 非牌照
|
|
roomInfo.roomModeType != RoomModeType_Open_Blind && // 非相亲
|
|
roomInfo.type != RoomType_MiniGame && // 非 10/15 麦
|
|
roomInfo.type != RoomType_Anchor) {
|
|
[array addObject:roomTypeSetting];
|
|
}
|
|
|
|
if(roomInfo.hasRoomAlbum == YES){
|
|
[array insertObject:roomPhotoAlbum atIndex:indexOfRoomAlbum];
|
|
}
|
|
if ([ClientConfig shareConfig].configInfo.redEnvelopeConfig.open && roomInfo.redEnvelopeOpen) {
|
|
[array insertObject:redPacket atIndex:1];
|
|
}
|
|
[[self getView] getMoreMenuDataSuccess:array];
|
|
}];
|
|
}
|
|
|
|
/// 开启房间礼物值
|
|
/// @param roomUid 房间的uid
|
|
- (void)openRoomGiftValue:(NSString *)roomUid {
|
|
NSString * uid = [AccountInfoStorage instance].getUid;
|
|
[Api openRoomGiftValue:[self createHttpCompletion:^(BaseModel * _Nonnull data) {
|
|
[[self getView] openRoomGiftValueSuccess];
|
|
}] uid:uid roomUid:roomUid];
|
|
}
|
|
|
|
/// 关闭房间礼物值
|
|
/// @param roomUid 房间的uid
|
|
- (void)closeRoomGiftValue:(NSString *)roomUid {
|
|
NSString * uid = [AccountInfoStorage instance].getUid;
|
|
[Api closeRoomGiftValue:[self createHttpCompletion:^(BaseModel * _Nonnull data) {
|
|
[[self getView] closeRoomGiftValueSuccess];
|
|
}fail:^(NSInteger code, NSString * _Nullable msg) {
|
|
// NSLog(@"%@",msg);
|
|
}] uid:uid roomUid:roomUid];
|
|
}
|
|
|
|
|
|
/// 更新公屏状态
|
|
/// @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];
|
|
}] roomId:roomId isCloseScreen:isCleScreenStr ticket:ticket uid:uid];
|
|
}
|
|
|
|
/// 开启相亲模式
|
|
/// @param roomUid 房主的uid
|
|
- (void)openRoomDating:(NSString *)roomUid {
|
|
[Api openRoomDating:[self createHttpCompletion:^(BaseModel * _Nonnull data) {
|
|
[[self getView] openRoomDatingSuccess];
|
|
}] roomUid:roomUid];
|
|
}
|
|
|
|
/// 关闭相亲模式
|
|
/// @param roomUid 房主的uid
|
|
- (void)closeRoomDating:(NSString *)roomUid {
|
|
[Api closeRoomDating:[self createHttpCompletion:^(BaseModel * _Nonnull data) {
|
|
[[self getView] closeRoomDatingSuccess];
|
|
}] roomUid:roomUid];
|
|
}
|
|
|
|
///获取房间广播模板内容
|
|
/// @param type 房间类型
|
|
- (void)getRoomRadioMessageListWithType:(NSString *)type {
|
|
[Api roomRadioGetMsg:[self createHttpCompletion:^(BaseModel * _Nonnull data) {
|
|
XPReleaseRadioModel * model = [XPReleaseRadioModel modelWithJSON:data.data];
|
|
[[self getView] getReleaseRadioSuccess:model];
|
|
}] roomType:type];
|
|
}
|
|
/// 获取房间VIP小喇叭信息
|
|
- (void)getRoomgetUserVipRoomTrumpet:(NSString *)roomUid {
|
|
[Api getUserVipRoomTrumpet:[self createHttpCompletion:^(BaseModel * _Nonnull data) {
|
|
XPNobleTrumpetModel *model = [XPNobleTrumpetModel modelWithJSON:data.data];
|
|
[[self getView] getTrumpetSuccess:model];
|
|
}] roomUid:roomUid];
|
|
}
|
|
///结束个播跨房PK
|
|
- (void)requestFinishAnchorPK:(NSString *)roundId {
|
|
[Api requestEndAnchorRoomPk:^(BaseModel * _Nullable data, NSInteger code, NSString * _Nullable msg) {
|
|
[[self getView] endAnchorPkSuccess:code == 200 msg:msg];
|
|
} roundId:roundId];
|
|
}
|
|
|
|
/// 清空公屏
|
|
/// @param roomUid 房主的uid
|
|
/// @param uid 操作人的uid
|
|
- (void)cleanScreen:(NSString *)roomUid uid:(NSString *)uid {
|
|
[Api requestCleanScreen:[self createHttpCompletion:^(BaseModel * _Nonnull data) {
|
|
[[self getView] cleanScreenSuccess];
|
|
}] roomUid:roomUid uid:uid];
|
|
}
|
|
|
|
/// 取消匹配随机PK
|
|
/// @param roomUid 房间UID
|
|
- (void)requestCancelMatchRandomPK:(NSString *)roomUid {
|
|
[Api cancelMatchRandomPK:[self createHttpCompletion:^(BaseModel * _Nonnull data) {
|
|
[[self getView] cancelMatchRandomPKSuccess];
|
|
}] roomUid:roomUid];
|
|
}
|
|
|
|
@end
|