Files
peko-ios/YuMi/Modules/YMNewHome/Presenter/XPHomeContainerPresenter.m

199 lines
7.1 KiB
Objective-C

//
// XPHomeContainerPresenter.m
// YuMi
//
// Created by YuMi on 2021/12/2.
//
#import "XPHomeContainerPresenter.h"
#import <ReactiveObjC/ReactiveObjC.h>
#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 *menu = [RACSubject subject];
RACSubject *rank = [RACSubject subject];
RACSignal *bannerSignal = [banner 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];
}]];
}
///得到首页轮播图
- (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