You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 

470 lines
19 KiB

//
// WXYZ_ChapterBottomPayBar.m
// WXReader
//
// Created by Andrew on 2020/7/27.
// Copyright © 2020 Andrew. All rights reserved.
//
#import "WXYZ_ChapterBottomPayBar.h"
#import "TFRechargeViewController.h"
#import "WXYZ_ChapterBottomPayBarTitleTableViewCell.h"
#import "WXYZ_ChapterBottomPayBarOptionTableViewCell.h"
#import "WXYZ_ChapterBottomPayBarBalanceTableViewCell.h"
#import "WXYZ_ChapterBottomPayBarAutoBuyTableViewCell.h"
#import "WXYZ_ChapterBottomPayBarCostTableViewCell.h"
#import "TFReaderBookManager.h"
@interface WXYZ_ChapterBottomPayBar () <UITableViewDelegate, UITableViewDataSource>
@property (nonatomic, strong) UITableView *mainTableView;
@end
@implementation WXYZ_ChapterBottomPayBar
{
// 选项卡选择下标
NSInteger _optionSelectIndex;
NSInteger _buyChapterNum;
WXYZ_BottomPayBarType _barType;
TFProductionType _productionType;
TFProductionChapterModel *_chapterModel;
WXYZ_ChapterPayBarModel *_payBarModel;
}
- (instancetype)initWithChapterModel:(TFProductionChapterModel *)chapterModel barType:(WXYZ_BottomPayBarType)barType productionType:(TFProductionType)productionType
{
if (self = [self initWithFrame:CGRectMake(0, 0, SCREEN_WIDTH, SCREEN_HEIGHT) chapterModel:chapterModel barType:barType productionType:productionType buyChapterNum:1]) {
[[TFViewHelper getWindowRootController].view addSubview:self];
}
return self;
}
- (instancetype)initWithChapterModel:(TFProductionChapterModel *)chapterModel barType:(WXYZ_BottomPayBarType)barType productionType:(TFProductionType)productionType buyChapterNum:(NSInteger)buyChapterNum
{
if (self = [self initWithFrame:CGRectMake(0, 0, SCREEN_WIDTH, SCREEN_HEIGHT) chapterModel:chapterModel barType:barType productionType:productionType buyChapterNum:buyChapterNum]) {
[[TFViewHelper getWindowRootController].view addSubview:self];
}
return self;
}
- (instancetype)initWithFrame:(CGRect)frame chapterModel:(TFProductionChapterModel *)chapterModel barType:(WXYZ_BottomPayBarType)barType productionType:(TFProductionType)productionType
{
if (self = [self initWithFrame:CGRectMake(0, 0, SCREEN_WIDTH, SCREEN_HEIGHT) chapterModel:chapterModel barType:barType productionType:productionType buyChapterNum:1]) {
[[TFViewHelper getWindowRootController].view addSubview:self];
}
return self;
}
- (instancetype)initWithFrame:(CGRect)frame chapterModel:(TFProductionChapterModel *)chapterModel barType:(WXYZ_BottomPayBarType)barType productionType:(TFProductionType)productionType buyChapterNum:(NSInteger)buyChapterNum
{
if (self = [super initWithFrame:frame]) {
_barType = barType;
_productionType = productionType;
_chapterModel = chapterModel;
_optionSelectIndex = 0;
_buyChapterNum = buyChapterNum;
_canTouchHiddenView = YES;
self.backgroundColor = kBlackTransparentColor;
[self initialize];
[self createSubViews];
[self netRequest];
}
return self;
}
- (void)initialize
{
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(netRequest) name:Notification_Login_Success object:nil];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(netRequest) name:Notification_Recharge_Success object:nil];
}
- (void)createSubViews
{
self.mainTableView = [[UITableView alloc] initWithFrame:CGRectZero style:UITableViewStylePlain];
self.mainTableView.frame = CGRectMake(0, SCREEN_HEIGHT, SCREEN_WIDTH, CGFLOAT_MIN);
self.mainTableView.backgroundColor = [UIColor clearColor];
self.mainTableView.showsVerticalScrollIndicator = NO;
self.mainTableView.showsHorizontalScrollIndicator = NO;
self.mainTableView.estimatedRowHeight = 100;
self.mainTableView.sectionFooterHeight = 10;
self.mainTableView.rowHeight = UITableViewAutomaticDimension;
self.mainTableView.separatorStyle = UITableViewCellSeparatorStyleNone;
self.mainTableView.delegate = self;
self.mainTableView.dataSource = self;
self.mainTableView.scrollEnabled = NO;
if (@available(iOS 11.0, *)) {
self.mainTableView.contentInsetAdjustmentBehavior = UIScrollViewContentInsetAdjustmentNever;
} else {
// Fallback on earlier versions
}
[self addSubview:self.mainTableView];
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
if (_barType == WXYZ_BottomPayBarTypeDownload) {
return 3;
}
return 5;
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
switch (indexPath.row) {
case 0:
{
return [self createPayBarTitleTabelViewCellWithTabelView:tableView];
}
break;
case 1:
{
if (_barType == WXYZ_BottomPayBarTypeDownload) {
return [self createPayBarBalanceTabelViewCellWithTabelView:tableView];
} else {
WS(weakSelf)
static NSString *cellName = @"WXYZ_ChapterBottomPayBarOptionTableViewCell";
WXYZ_ChapterBottomPayBarOptionTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellName];
if (!cell) {
cell = [[WXYZ_ChapterBottomPayBarOptionTableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellName];
}
cell.hiddenEndLine = NO;
cell.pay_options = _payBarModel.pay_options;
cell.payOptionClickBlock = ^(WXYZ_ChapterPayBarOptionModel * _Nonnull chapterOptionModel, NSInteger selectIndex) {
_optionSelectIndex = selectIndex;
_buyChapterNum = chapterOptionModel.buy_num;
[weakSelf.mainTableView reloadData];
};
return cell;
}
}
break;
case 2:
{
if (_barType == WXYZ_BottomPayBarTypeDownload) {
return [self createPayBarCostTableViewCellWithTableView:tableView];
} else {
return [self createPayBarBalanceTabelViewCellWithTabelView:tableView];
}
}
break;
case 3:
{
static NSString *cellName = @"WXYZ_ChapterBottomPayBarAutoBuyTableViewCell";
WXYZ_ChapterBottomPayBarAutoBuyTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellName];
if (!cell) {
cell = [[WXYZ_ChapterBottomPayBarAutoBuyTableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellName];
}
cell.hiddenEndLine = NO;
return cell;
}
break;
case 4:
{
return [self createPayBarCostTableViewCellWithTableView:tableView];
}
break;
default:
break;
}
return [[UITableViewCell alloc] init];
}
- (UITableViewCell *)createPayBarTitleTabelViewCellWithTabelView:(UITableView *)tableView
{
static NSString *cellName = @"WXYZ_ChapterBottomPayBarTitleTableViewCell";
WXYZ_ChapterBottomPayBarTitleTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellName];
if (!cell) {
cell = [[WXYZ_ChapterBottomPayBarTitleTableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellName];
}
cell.hiddenEndLine = NO;
cell.buyOptionModel = [_payBarModel.pay_options objectOrNilAtIndex:_optionSelectIndex];
return cell;
}
- (UITableViewCell *)createPayBarBalanceTabelViewCellWithTabelView:(UITableView *)tableView
{
static NSString *cellName = @"WXYZ_ChapterBottomPayBarBalanceTableViewCell";
WXYZ_ChapterBottomPayBarBalanceTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellName];
if (!cell) {
cell = [[WXYZ_ChapterBottomPayBarBalanceTableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellName];
}
cell.hiddenEndLine = NO;
cell.base_info = _payBarModel.base_info;
return cell;
}
- (UITableViewCell *)createPayBarCostTableViewCellWithTableView:(UITableView *)tableView
{
// WS(weakSelf)
static NSString *cellName = @"WXYZ_ChapterBottomPayBarCostTableViewCell";
WXYZ_ChapterBottomPayBarCostTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellName];
if (!cell) {
cell = [[WXYZ_ChapterBottomPayBarCostTableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellName];
}
cell.base_info = _payBarModel.base_info;
cell.buyOptionModel = [_payBarModel.pay_options objectOrNilAtIndex:_optionSelectIndex];
cell.buyChapterClickBlock = ^(BOOL needRecharge) {
if (!TFUserInfoManager.isLogin) {
[TFLoginOptionsViewController presentLoginView:nil];
// [kMainWindow sendSubviewToBack:weakSelf];
} else {
if (needRecharge) {
TFRechargeViewController *vc = [[TFRechargeViewController alloc] init];
vc.production_id = _chapterModel.production_id;
vc.productionType = _productionType;
TFNavigationController *t_nav = [[TFNavigationController alloc] initWithRootViewController:vc];
[[TFViewHelper getWindowRootController] presentViewController:t_nav animated:YES completion:nil];
// [kMainWindow sendSubviewToBack:weakSelf];
} else {
WS(weakSelf)
[weakSelf hiddenBottomPayBar];
[weakSelf chapterPayRequest];
}
}
};
return cell;
}
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
if ((_barType == WXYZ_BottomPayBarTypeDownload && indexPath.row == 2) || indexPath.row == 4) {
return 60;
}
return 50;
}
//section头间距
- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section
{
return CGFLOAT_MIN;
}
//section头视图
- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section
{
UIView *view = [[UIView alloc] initWithFrame:CGRectMake(0, 0, SCREEN_WIDTH, CGFLOAT_MIN)];
view.backgroundColor = [UIColor clearColor];
return view;
}
//section底部间距
- (CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section
{
return PUB_TABBAR_OFFSET;
}
//section底部视图
- (UIView *)tableView:(UITableView *)tableView viewForFooterInSection:(NSInteger)section
{
UIView *view = [[UIView alloc] initWithFrame:CGRectMake(0, 0, SCREEN_WIDTH, PUB_TABBAR_OFFSET)];
view.backgroundColor = kColorRGBA(247, 248, 250, 1);
return view;
}
- (void)showBottomPayBar
{
[UIView animateWithDuration:kAnimatedDurationFast animations:^{
self.mainTableView.frame = CGRectMake(0, SCREEN_HEIGHT - (_barType == WXYZ_BottomPayBarTypeDownload?(2 * 50 + 60):(4 * 50 + 60)) - PUB_TABBAR_OFFSET, SCREEN_WIDTH, (_barType == WXYZ_BottomPayBarTypeDownload?(2 * 50 + 60):(4 * 50 + 60)) + PUB_TABBAR_OFFSET);
}];
}
- (void)hiddenBottomPayBar
{
if (!self.hidden) {
[UIView animateWithDuration:kAnimatedDurationFast animations:^{
self.mainTableView.frame = CGRectMake(0, SCREEN_HEIGHT, SCREEN_WIDTH, (_barType == WXYZ_BottomPayBarTypeDownload?(2 * 50 + 60):(4 * 50 + 60)) + PUB_TABBAR_OFFSET);
} completion:^(BOOL finished) {
[self removeAllSubviews];
[self removeFromSuperview];
self.hidden = YES;
if (self.bottomPayBarHiddenBlock) {
self.bottomPayBarHiddenBlock();
}
}];
}
}
#pragma mark - 系统方法
- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event
{
if (self.canTouchHiddenView) {
UIView *touchView = [[touches anyObject] view];
if (![touchView isDescendantOfView:self.mainTableView]) {
[self hiddenBottomPayBar];
[TFPromptManager showPromptViewWithStatus:TFPromptStatusError promptTitle:TFLocalizedString(@"您已取消购买")];
if (self.payCancleChapterBlock) {
self.payCancleChapterBlock(_chapterModel.chapter_ids);
}
}
}
}
- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event
{
if (CGRectContainsPoint(CGRectMake(0, 0, SCREEN_WIDTH, PUB_NAVBAR_HEIGHT), point) && !self.canTouchHiddenView) {
return nil;
}
return [super hitTest:point withEvent:event];
}
- (void)netRequest
{
NSString *url = @"";
NSMutableDictionary *parameters = [NSMutableDictionary dictionary];
switch (_productionType) {
case TFProductionTypeNovel:
case TFProductionTypeAi:
{
url = Book_Buy_Index;
[parameters setObject:[TFUtilsHelper formatStringWithInteger:_chapterModel.production_id] forKey:@"book_id"];
[parameters setObject:[TFUtilsHelper formatStringWithInteger:_chapterModel.chapter_id] forKey:@"chapter_id"];
if (_barType == WXYZ_BottomPayBarTypeDownload) {
[parameters setObject:@"down" forKey:@"page_from"];
[parameters setObject:[TFUtilsHelper formatStringWithInteger:_buyChapterNum] forKey:@"num"];
} else {
[parameters setObject:@"read" forKey:@"page_from"];
}
}
break;
case TFProductionTypeComic:
{
url = Comic_Buy_Index;
[parameters setObject:[TFUtilsHelper formatStringWithInteger:_chapterModel.production_id] forKey:@"comic_id"];
if (_barType == WXYZ_BottomPayBarTypeDownload) {
[parameters setObject:[_chapterModel.chapter_ids componentsJoinedByString:@","] forKey:@"chapter_id"];
[parameters setObject:@"down" forKey:@"page_from"];
} else {
[parameters setObject:[TFUtilsHelper formatStringWithInteger:_chapterModel.chapter_id] forKey:@"chapter_id"];
[parameters setObject:@"read" forKey:@"page_from"];
}
}
break;
case TFProductionTypeAudio:
{
url = Audio_Buy_Index;
[parameters setObject:[TFUtilsHelper formatStringWithInteger:_chapterModel.production_id] forKey:@"audio_id"];
if (_barType == WXYZ_BottomPayBarTypeDownload) {
[parameters setObject:[_chapterModel.chapter_ids componentsJoinedByString:@","] forKey:@"chapter_id"];
[parameters setObject:@"down" forKey:@"page_from"];
} else {
[parameters setObject:[TFUtilsHelper formatStringWithInteger:_chapterModel.chapter_id] forKey:@"chapter_id"];
[parameters setObject:@"read" forKey:@"page_from"];
}
}
break;
default:
break;
}
WS(weakSelf)
[TFNetworkTools POST:url parameters:[parameters copy] model:nil success:^(BOOL isSuccess, NSDictionary * _Nullable t_model, TFNetworkRequestModel * _Nonnull requestModel) {
if (isSuccess) {
SS(strongSelf)
[TFUserInfoManager shareInstance].totalRemain = [[[t_model objectForKey:@"data"] objectForKey:@"remain"] integerValue];
if (strongSelf) {
strongSelf->_payBarModel = [WXYZ_ChapterPayBarModel modelWithDictionary:[t_model objectForKey:@"data"]];
}
[weakSelf.mainTableView reloadData];
}
} failure:nil];
}
- (void)chapterPayRequest
{
NSString *url = @"";
NSMutableDictionary *parameters = [NSMutableDictionary dictionary];
switch (_productionType) {
case TFProductionTypeNovel:
case TFProductionTypeAi:
{
url = Book_Buy_Chapter;
[parameters setObject:[TFUtilsHelper formatStringWithInteger:_chapterModel.production_id] forKey:@"book_id"];
[parameters setObject:[TFUtilsHelper formatStringWithInteger:_chapterModel.chapter_id] forKey:@"chapter_id"];
[parameters setObject:[TFUtilsHelper formatStringWithInteger:_buyChapterNum] forKey:@"num"];
}
break;
case TFProductionTypeComic:
{
url = Comic_Buy_Chapter;
[parameters setObject:[TFUtilsHelper formatStringWithInteger:_chapterModel.production_id] forKey:@"comic_id"];
if (_barType == WXYZ_BottomPayBarTypeDownload) {
[parameters setObject:[_chapterModel.chapter_ids componentsJoinedByString:@","] forKey:@"chapter_id"];
} else {
[parameters setObject:[TFUtilsHelper formatStringWithInteger:_chapterModel.chapter_id] forKey:@"chapter_id"];
[parameters setObject:[TFUtilsHelper formatStringWithInteger:_buyChapterNum] forKey:@"num"];
}
}
break;
case TFProductionTypeAudio:
{
url = Audio_Buy_Chapter;
[parameters setObject:[TFUtilsHelper formatStringWithInteger:_chapterModel.production_id] forKey:@"audio_id"];
[parameters setObject:[TFUtilsHelper formatStringWithInteger:_buyChapterNum] forKey:@"num"];
if (_barType == WXYZ_BottomPayBarTypeDownload) {
[parameters setObject:[_chapterModel.chapter_ids componentsJoinedByString:@","] forKey:@"chapter_id"];
} else {
[parameters setObject:[TFUtilsHelper formatStringWithInteger:_chapterModel.chapter_id] forKey:@"chapter_id"];
}
}
break;
default:
break;
}
[TFNetworkTools POST:url parameters:parameters model:nil success:^(BOOL isSuccess, id _Nullable t_model, TFNetworkRequestModel * _Nonnull requestModel) {
if (isSuccess) {
NSArray<NSString *> *t_arr = [requestModel.data objectForKey:@"chapter_ids"];
if (self.paySuccessChaptersBlock) {
self.paySuccessChaptersBlock(t_arr);
}
[TFPromptManager showPromptViewWithStatus:TFPromptStatusSuccess promptTitle:TFLocalizedString(@"购买成功")];
NSInteger index = [TFReaderBookManager sharedManager].currentChapterIndex;
for (NSInteger i = index; i < index + t_arr.count; i++) {
[TFReaderBookManager sharedManager].bookModel.chapter_list[index].is_preview = NO;
}
if (_productionType == TFProductionTypeNovel || _productionType == TFProductionTypeAi) {
[[NSNotificationCenter defaultCenter] postNotificationName:NSNotification_Retry_Chapter object:nil];
}
[[NSNotificationCenter defaultCenter] postNotificationName:Notification_Production_Pay_Success object:t_arr];
} else {
!self.payFailChaptersBlock ?: self.payFailChaptersBlock(_chapterModel.chapter_ids);
}
} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
[TFPromptManager showPromptWithError:error defaultText:nil];
}];
}
@end