// // XPHomeContainerPresenter.m // YuMi // // Created by YuMi on 2021/12/2. // #import "XPHomeContainerPresenter.h" #import #import "Api+Home.h" #import "AccountInfoStorage.h" #import "HomeTagModel.h" #import "XPHomeContainerProtocol.h" #import "AccountInfoStorage.h" #import "HomeBannerInfoModel.h" #import "PIHomeItemModel.h" #import "PIHomeCategoryTitleModel.h" #import "HomeRankAvatarModel.h" #import "HomePlayRoomModel.h" @implementation XPHomeContainerPresenter - (void)getHomeTopData { RACSubject *banner = [RACSubject subject]; RACSubject *menu = [RACSubject subject]; [[RACSignal combineLatest:@[banner, menu] reduce:^id(NSArray* bannerList, NSArray* menuList){ //在这里 进行请求后的方法,回到主线程 dispatch_async(dispatch_get_main_queue(), ^{ [[self getView] getHomeTopDataSuccess:bannerList menuList:menuList]; }); return nil; }] subscribeError:^(NSError * _Nullable error) { }]; NSString * uid = [AccountInfoStorage instance].getUid; [Api homeBannerList:[self createHttpCompletion:^(BaseModel * _Nonnull data) { NSArray * array = [HomeBannerInfoModel modelsWithArray:data.data]; [banner sendNext:array]; [banner sendCompleted]; }fail:^(NSInteger code, NSString * _Nullable msg) { [banner sendError:nil]; [banner sendCompleted]; } errorToast:NO] uid:uid type:@"1"]; [Api requestCurrentResourceListCompletion:[self createHttpCompletion:^(BaseModel * _Nonnull data) { NSArray *list = [PIHomeItemModel modelsWithArray:data.data]; [menu sendNext:list]; [menu sendCompleted]; }fail:^(NSInteger code, NSString * _Nullable msg) { [menu sendError:nil]; [menu sendCompleted]; }]]; } - (void)getHomeAllTopsData { RACSubject *banner = [RACSubject subject]; RACSubject *banner_2 = [RACSubject subject]; RACSubject *menu = [RACSubject subject]; RACSubject *rank = [RACSubject subject]; RACSignal *bannerSignal = [banner catch:^RACSignal *(NSError *error) { return [RACSignal return:nil]; }]; // RACSignal *bannerSignal_2 = [banner_2 catch:^RACSignal *(NSError *error) { // return [RACSignal return:nil]; // }]; RACSignal *menuSignal = [menu catch:^RACSignal *(NSError *error) { return [RACSignal return:nil]; }]; RACSignal *rankSignal = [rank catch:^RACSignal *(NSError *error) { return [RACSignal return:nil]; }]; RACSignal *combinedSignal = [RACSignal combineLatest:@[bannerSignal, menuSignal, rankSignal] reduce:^id(NSArray* bannerList, NSArray* menuList, NSArray *rankAvatars) { return @[bannerList ?: @[], menuList ?: @[], rankAvatars ?: @[]]; }]; @kWeakify(self); [[combinedSignal deliverOn:RACScheduler.mainThreadScheduler] subscribeNext:^(NSArray *combinedValues) { @kStrongify(self); [[self getView] getHomeTopDataSuccess:[combinedValues xpSafeObjectAtIndex:0] banners:[combinedValues xpSafeObjectAtIndex:1] rankAvatars:[combinedValues xpSafeObjectAtIndex:2]]; } error:^(NSError * _Nullable error) { NSLog(@""); }]; NSString * uid = [AccountInfoStorage instance].getUid; [Api homeBannerList:[self createHttpCompletion:^(BaseModel * _Nonnull data) { NSArray * array = [HomeBannerInfoModel modelsWithArray:data.data]; [banner sendNext:array]; [banner sendCompleted]; }fail:^(NSInteger code, NSString * _Nullable msg) { [banner sendError:nil]; [banner sendCompleted]; } errorToast:NO] uid:uid type:@"1"]; [Api requestCurrentResourceListCompletion:[self createHttpCompletion:^(BaseModel * _Nonnull data) { NSArray *list = [PIHomeItemModel modelsWithArray:data.data]; [menu sendNext:list]; [menu sendCompleted]; }fail:^(NSInteger code, NSString * _Nullable msg) { [menu sendError:nil]; [menu sendCompleted]; }]]; [Api getHomeRanksCompletion:[self createHttpCompletion:^(BaseModel * _Nonnull data) { NSArray *list = [HomeRankAvatarModel modelsWithArray:data.data]; [rank sendNext:list]; [rank sendCompleted]; }fail:^(NSInteger code, NSString * _Nullable msg) { [rank sendError:nil]; [rank sendCompleted]; }]]; // [Api getHomeSecondBannerCompletion:[self createHttpCompletion:^(BaseModel * _Nonnull data) { // NSArray * array = [HomeBannerInfoModel modelsWithArray:data.data]; // [banner_2 sendNext:array]; // [banner_2 sendCompleted]; // }fail:^(NSInteger code, NSString * _Nullable msg) { // [banner_2 sendError:nil]; // [banner_2 sendCompleted]; // } errorToast:NO] uid:uid type:@"1"]; } ///得到首页轮播图 - (void)getHomeTopBannerList{ NSString * uid = [AccountInfoStorage instance].getUid; @kWeakify(self); [Api homeBannerList:[self createHttpCompletion:^(BaseModel * _Nonnull data) { @kStrongify(self); NSArray * array = [HomeBannerInfoModel modelsWithArray:data.data]; [[self getView]getHomeTopBannerListSuccess:array]; }fail:^(NSInteger code, NSString * _Nullable msg) { } errorToast:NO] uid:uid type:@"1"]; } /// 获取所有的房间的tag - (void)getHomeTagList { @kWeakify(self); [Api getHomeTabsCompletion:^(BaseModel * _Nullable data, NSInteger code, NSString * _Nullable msg) { @kStrongify(self); // TODO: 不能在 API call 的地方返回 UI 元素 NSArray * array = [PIHomeCategoryTitleModel modelsWithArray:data.data]; for (PIHomeCategoryTitleModel *model in array) { model.checkedWidth = [UILabel getWidthWithText:model.name height:kGetScaleWidth(44) font:kFontSemibold(16)]; model.noCheckedWidth = [UILabel getWidthWithText:model.name height:kGetScaleWidth(44) font:kFontRegular(14)]; } [[self getView] getHomeTagListSuccess:array]; }]; } ///首页改版资源位 -(void)getCurrentResourceList{ @kWeakify(self); [Api requestCurrentResourceListCompletion:[self createHttpCompletion:^(BaseModel * _Nonnull data) { @kStrongify(self); NSArray *list = [PIHomeItemModel modelsWithArray:data.data]; [[self getView]getCurrentResourceListSuccess:list]; }]]; } /// 一键匹配 - (void)homeChatPick { @kWeakify(self); [Api homeChatPick:[self createHttpCompletion:^(BaseModel * _Nonnull data) { @kStrongify(self); if (data.data) { NSString *uid = [NSString stringWithFormat:@"%@",data.data]; [[self getView] homeChatPickSuccess:uid]; }else{ [[self getView] homeChatPickFail:data.message]; } }fail:^(NSInteger code, NSString * _Nullable msg) { @kStrongify(self); [[self getView] homeChatPickFail:msg]; } showLoading:YES errorToast:YES]]; } ///ip检测 -(void)checkIpRegionAction{ [Api checkIpRegionComplection:^(BaseModel * _Nullable data, NSInteger code, NSString * _Nullable msg) { if(code == 200){ if(data.data != nil){ NSInteger time = [data.data integerValue]/1000; [[self getView]checkIpRegionSuccess:time]; } return; } if(code == 401){ [[self getView]checkIpRegionFailWithMsg:msg]; } }]; } - (void)getHomeRanks { @kWeakify(self); [Api getHomeRanksCompletion:^(BaseModel * _Nullable data, NSInteger code, NSString * _Nullable msg) { @kStrongify(self); if (code == 200) { NSArray *list = [HomeRankAvatarModel modelsWithArray:data.data]; [[self getView] getHomeRanksSuccess:list]; } }]; } @end