Files
peko-ios/YuMi/Modules/YMRoom/Presenter/XPRoomPresenter.m

311 lines
13 KiB
Mathematica
Raw Normal View History

2023-07-14 18:50:55 +08:00
//
// YMRoomPresenter.m
// YUMI
//
// Created by YUMI on 2021/10/18.
//
#import "XPRoomPresenter.h"
///API
#import "Api+Room.h"
#import "Api+Gift.h"
#import "UserInfoModel.h"
#import "GuildSuperAdminInfoModel.h"
///Tool
#import "AccountInfoStorage.h"
#import "XPGiftStorage.h"
#import "NSObject+MJExtension.h"
///Model
#import "GiftInfoModel.h"
#import "XPMessageRemoteExtModel.h"
#import "RoomNewUserGreetModel.h"
#import "XPRoomRecommendModel.h"
#import "XPRedPacketModel.h"
#import "FirstChargeRoomWindowModel.h"
2023-09-22 15:26:19 +08:00
#import "XPFreeGiftModel.h"
2023-07-14 18:50:55 +08:00
///P
#import "XPRoomProtocol.h"
#import <NIMSDK/NIMSDK.h>
#import <ReactiveObjC/ReactiveObjC.h>
@implementation XPRoomPresenter
- (void)initEnterRoom:(NSString *)roomUid user:(NSString *)uid {
RACSubject* room = [RACSubject subject];
RACSubject* user = [RACSubject subject];
[[RACSignal combineLatest:@[room, user] reduce:^id(RoomInfoModel* room, UserInfoModel* user){
[[self getView] initEnterRoomSuccess:room user:user];
return nil;
}] subscribeError:^(NSError * _Nullable error) {
[[self getView] enterRoomFail:error.code];
}];
[Api getUserInfo:[self createHttpCompletion:^(BaseModel * _Nonnull data) {
UserInfoModel * infoModel = [UserInfoModel modelWithJSON:data.data];
[user sendNext:infoModel];
[user sendCompleted];
} fail:^(NSInteger code, NSString * _Nullable msg) {
[user sendError:nil];
} showLoading:NO errorToast:NO] uid:uid];
[Api getRoomInfo:[self createHttpCompletion:^(BaseModel * _Nonnull data) {
RoomInfoModel * model = [RoomInfoModel modelWithJSON:data.data];
[room sendNext:model];
[room sendCompleted];
} fail:^(NSInteger code, NSString * _Nullable msg) {
[user sendError:nil];
2023-10-17 18:30:14 +08:00
if(code == 500 && [msg containsString:@"你已屏蔽該房間"]){
TTAlertConfig *config = [[TTAlertConfig alloc]init];
config.actionStyle = TTAlertActionConfirmStyle;
config.title = YMLocalizedString(@"XPRoomSettingViewController3");
config.message = YMLocalizedString(@"XPRoomViewController19");
[TTPopup alertWithConfig:config confirmHandler:^{
} cancelHandler:^{
}];
}
2023-07-14 18:50:55 +08:00
} showLoading:NO errorToast:NO] uid:roomUid intoUid:uid];
}
- (void)enterNIMRoom:(NSString *)roomId user:(UserInfoModel *)userInfo {
NIMChatroomEnterRequest *request = [[NIMChatroomEnterRequest alloc] init];
request.roomId = roomId;
//ext
XPMessageRemoteExtModel * extModel = [[XPMessageRemoteExtModel alloc] init];
extModel.defUser = userInfo.defUser;
extModel.erbanNo = userInfo.erbanNo;
extModel.carName = userInfo.carName;
extModel.inRoomNameplatePic = userInfo.nameplatePic;
extModel.inRoomNameplateWord = userInfo.nameplateWord;
extModel.isCustomWord = userInfo.isCustomWord;
2023-07-14 18:50:55 +08:00
extModel.charmUrl = userInfo.userLevelVo.charmUrl;
extModel.experLevelSeq = userInfo.userLevelVo.experLevelSeq;
extModel.experUrl = userInfo.userLevelVo.experUrl;
extModel.newUser = userInfo.newUser;
extModel.vipIcon = userInfo.userVipInfoVO.vipIcon;
extModel.fromUid = userInfo.fromUid;
extModel.fromType = userInfo.fromType;
extModel.fromNick = userInfo.fromNick;
extModel.iosBubbleUrl = userInfo.iosBubbleUrl;
extModel.androidBubbleUrl = userInfo.androidBubbleUrl;
extModel.enterHide = userInfo.userVipInfoVO.enterHide;
extModel.preventKick = userInfo.userVipInfoVO.preventKick;
extModel.enterRoomEffects = userInfo.userVipInfoVO.enterRoomEffects;
extModel.gender = userInfo.gender;
extModel.fromSayHelloChannel = userInfo.fromSayHelloChannel;
extModel.platformRole = userInfo.platformRole;
NSMutableDictionary *ext = [NSMutableDictionary dictionaryWithObject:extModel.model2dictionary forKey:[NSString stringWithFormat:@"%ld", userInfo.uid]];
request.roomExt = [ext toJSONString];
[[NIMSDK sharedSDK].chatroomManager enterChatroom:request completion:^(NSError * _Nullable error, NIMChatroom * _Nullable chatroom, NIMChatroomMember * _Nullable me) {
if (error) {
[[self getView] enterRoomFail:error.code];
} else {
[[self getView] enterRoomSuccess:chatroom];
}
}];
}
- (void)exitNIMRoom:(NSString *)roomId {
[[NIMSDK sharedSDK].chatroomManager exitChatroom:roomId completion:nil];
}
///
/// @param title
/// @param type
/// @param roomPwd
/// @param roomDesc
/// @param backPic
/// @param mgId id
- (void)openRoom:(NSString *)title
type:(RoomType)type
roomPwd:(NSString *)roomPwd
roomDesc:(NSString *)roomDesc
backPic:(NSString *)backPic
mgId:(NSString *)mgId{
NSString * uid = [AccountInfoStorage instance].getUid;
NSString * ticket = [AccountInfoStorage instance].getTicket;
if (title.length <= 0) {
title = @"";
}
if (roomPwd.length <= 0) {
roomPwd = @"";
}
if (roomDesc.length <= 0) {
roomDesc = @"";
}
if (backPic.length <= 0) {
backPic = @"";
}
if (mgId.length <= 0) {
mgId = @"0";
}
[Api openRoom:[self createHttpCompletion:^(BaseModel * _Nonnull data) {
RoomInfoModel * infoModel = [RoomInfoModel modelWithJSON:data.data];
[[self getView] openRoomSuccess:infoModel];
} fail:^(NSInteger code, NSString * _Nullable msg) {
[[self getView] enterRoomFail:code];
} showLoading:NO] title:title type:type roomPwd:roomPwd roomDesc:roomDesc backPic:backPic uid:uid ticket:ticket mgId:mgId];
}
///bug
///
///
/// @param roomUid uid
- (void)getNormalGiftList:(NSString *)roomUid {
///
[[XPGiftStorage shareStorage] getGiftDatasource:roomUid];
[Api requestNormalGiftList:^(BaseModel * _Nullable data, NSInteger code, NSString * _Nullable msg) {
NSArray *luckyBagGift = [GiftInfoModel modelsWithArray:data.data[@"luckyBagGift"]]; //
NSArray *vipGift = [GiftInfoModel modelsWithArray:data.data[@"vipGift"]]; //
NSArray *luckyPoolGift = [GiftInfoModel modelsWithArray:data.data[@"luckyPoolGift"]];//
NSArray *normalGift = [GiftInfoModel modelsWithArray:data.data[@"normalGift"]]; //
NSArray *weekStarGift = [GiftInfoModel modelsWithArray:data.data[@"weekStarGift"]]; //
NSArray *drawGift = [GiftInfoModel modelsWithArray:data.data[@"drawGift"]]; //
NSArray *penaltyGift = [GiftInfoModel modelsWithArray:data.data[@"penaltyGift"]]; //
NSArray *anchorGift = [GiftInfoModel modelsWithArray:data.data[@"singlePopularGift"]]; //
//TODO: luckyPoolGift
NSMutableArray *info = [NSMutableArray array];
NSMutableArray *totalInfo = [NSMutableArray array];
[info addObjectsFromArray:luckyBagGift];
[info addObjectsFromArray:vipGift];
[info addObjectsFromArray:normalGift];
[info addObjectsFromArray:weekStarGift];
[info addObjectsFromArray:drawGift];
[info addObjectsFromArray:anchorGift];
[info addObjectsFromArray:penaltyGift];
[totalInfo addObjectsFromArray:info];
[totalInfo addObjectsFromArray:luckyPoolGift];
///
[[XPGiftStorage shareStorage] saveGiftDatasource:info roomUid:roomUid];
[[XPGiftStorage shareStorage] writeGiftToDirectory:totalInfo];
} roomUid:roomUid];
}
///
/// @param roomUid uid
- (void)reportUserInterRoom:(NSString *)roomUid {
if ([[AccountInfoStorage instance] getTicket].length < 1) {
return;
}
[Api requestReportUserInterRoom:^(BaseModel * _Nullable data, NSInteger code, NSString * _Nullable msg) {
} uid:[[AccountInfoStorage instance] getUid] roomUid:roomUid ticket:[[AccountInfoStorage instance] getTicket]];
}
/// 退
/// @param roomUid uid
- (void)reportUserOutRoom:(NSString *)roomUid {
if ([[AccountInfoStorage instance] getTicket].length < 1) {
return;
}
[Api requestReportUserOutRoom:^(BaseModel * _Nullable data, NSInteger code, NSString * _Nullable msg) {
} uid:[[AccountInfoStorage instance] getUid] roomUid:roomUid ticket:[[AccountInfoStorage instance] getTicket]];
}
///
/// @param roomUid uid
- (void)getRoomSuperAdmin:(NSString *)roomUid {
[Api getRoomSuperAdminList:[self createHttpCompletion:^(BaseModel * _Nonnull data) {
NSArray * array = [GuildSuperAdminInfoModel modelsWithArray:data.data];
[[self getView] getRoomSuperAdminScuccess:array];
}] roomUid:roomUid];
}
///
/// @param roomUid uid
- (void)getCycleAnchorRoomList:(NSString *)roomUid {
[Api requestNextAnchorRoom:^(BaseModel * _Nullable data, NSInteger code, NSString * _Nullable msg) {
if (code == 200) {
RoomInfoModel * infoModel = [RoomInfoModel modelWithJSON:data.data];
[[self getView] getNextAnchorRoomSuccess:infoModel];
} else {
[[self getView] getNextAnchorRoomSuccess:nil];
}
} roomUid:roomUid];
}
- (void)getCurrentRoomInfo:(NSString *)roomUid {
NSString * uid= [AccountInfoStorage instance].getUid;
[Api getRoomInfo:[self createHttpCompletion:^(BaseModel * _Nonnull data) {
RoomInfoModel * roomInfo = [RoomInfoModel modelWithDictionary:data.data];
[[self getView] getCurrentRoomInfoSuccess:roomInfo];
} fail:^(NSInteger code, NSString * _Nullable msg) {
[[self getView] getCurrentRoomInfoSuccess:nil];
}] uid:roomUid intoUid:uid];
}
///
- (void)getRedPacket:(NSString *)roomUid {
[Api requestRedPacket:[self createHttpCompletion:^(BaseModel * _Nonnull data) {
NSArray *array = [XPRedPacketModel modelsWithArray:data.data];
2023-10-25 19:26:20 +08:00
for (XPRedPacketModel *model in array) {
model.timestamp = data.timestamp;
}
2023-07-14 18:50:55 +08:00
[[self getView] getRedPacketSuccess:array];
2023-10-25 19:26:20 +08:00
}] uid:roomUid isShowKind:@"1"];
2023-07-14 18:50:55 +08:00
}
2023-10-27 17:21:23 +08:00
///
-(void)getRedPacketInft:(NSString *)redEnvelopeId{
[Api getRedPacket:[self createHttpCompletion:^(BaseModel * _Nonnull data) {
XPRedPacketModel *redModel = [XPRedPacketModel modelWithJSON:data.data];
redModel.timestamp = data.timestamp;
redModel.sendUserNick = data.data[@"nick"];
redModel.sendUserAvatar = data.data[@"avatar"];
redModel.redEnvelopePosition = data.data[@"position"];
[[self getView]getRedPacketInftSuccess:redModel];
}] redEnvelopeId:redEnvelopeId];
}
2023-07-14 18:50:55 +08:00
-(void)getRoomFirstCharegWindow:(NSString *)roomUid{
[Api requestRoomFirstCharegWindow:[self createHttpCompletion:^(BaseModel * _Nonnull data) {
FirstChargeRoomWindowModel *freeModel = [FirstChargeRoomWindowModel modelWithDictionary:data.data];
[[self getView]getRoomFirstChargeWindowSuccess:freeModel];
}showLoading:NO errorToast:NO] roomUid:roomUid];
}
-(void)updateRoomFirstCharegWindow:(NSString *)roomUid{
[Api updateRoomFirstCharegWindow:[self createHttpCompletion:^(BaseModel * _Nonnull data) {
}showLoading:NO errorToast:NO] roomUid:roomUid];
}
2023-09-22 15:26:19 +08:00
- (void)requesstShieldingWtihType:(NSString *)type objId:(NSString *)objId{
[Api requesstShielding:[self createHttpCompletion:^(BaseModel * _Nonnull data) {
[[self getView] requesstShieldingSuccess];
}] type:type objId:objId];
}
-(void)getFreeGiftData{
[Api requestFreeGiftData:[self createHttpCompletion:^(BaseModel * _Nonnull data) {
XPFreeGiftModel *freeModel = [XPFreeGiftModel modelWithDictionary:data.data];
[[self getView]getFreeGiftDataSuccess:freeModel];
}]];
}
2023-10-17 18:30:14 +08:00
/// id
/// @param roomUid id
-(void)getUnlockRoomAlbumPhotoListWithRoomUid:(NSString *)roomUid{
[Api getUnlockRoomAlbumPhotoList:[self createHttpCompletion:^(BaseModel * _Nonnull data) {
[[self getView]getUnlockRoomAlbumPhotoListSuccessWithList:data.data];
} showLoading:NO errorToast:NO] roomUid:roomUid];
}
2023-11-28 16:50:45 +08:00
///
/// @param roomUid id
-(void)getKickUserListWithRoomUid:(NSString *)roomUid{
[Api getKickUserList:[self createHttpCompletion:^(BaseModel * _Nonnull data) {
[[self getView]getKickUserListSuccessWithList:data.data];
} fail:^(NSInteger code, NSString * _Nullable msg) {
} showLoading:NO errorToast:NO] roomUid:roomUid];
}
2023-07-14 18:50:55 +08:00
@end