NYLIVideoDetailSubPageViewModel.m 6.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149
  1. //
  2. // NYLIVideoDetailSubPageViewModel.m
  3. // jiaPei
  4. //
  5. // Created by Ning.ge on 2025/2/11.
  6. // Copyright © 2025 JCZ. All rights reserved.
  7. //
  8. #import "NYLIVideoDetailSubPageViewModel.h"
  9. @interface NYLIVideoDetailSubPageViewModel ()
  10. @property (nonatomic, readwrite, strong) NSArray *videoArr;
  11. @property (nonatomic, readwrite, copy) NSString *subTitle;
  12. @property (nonatomic, readwrite, strong) NSIndexPath *indexPath;
  13. @property (nonatomic, readwrite, assign) RQVideoDetailSubPageUpdateDataType updateDataType;
  14. @end
  15. @implementation NYLIVideoDetailSubPageViewModel
  16. #pragma mark - Public Method
  17. - (instancetype)initWithServices:(id<RQViewModelServices>)services params:(NSDictionary *)params {
  18. if (self = [super initWithServices:services params:params]) {
  19. self.videoArr = params[RQViewModelUtilKey];
  20. self.title = params[RQViewModelTitleKey];
  21. self.subTitle = params[RQViewModelIDKey];
  22. self.indexPath = params[RQViewCommonValueKey];
  23. self.updateDataType = RQVideoDetailSubPageUpdateDataType_Default;
  24. self.homePageSubjectType = [params[RQHomeSubPageTypeKey] integerValue];
  25. //通知
  26. [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(getLIFiveReload:) name:NYLI_FIVEDB_CHANGEDO object:nil];
  27. }
  28. return self;
  29. }
  30. - (void)dealloc{
  31. [[NSNotificationCenter defaultCenter] removeObserver:self];
  32. }
  33. - (void)getLIFiveReload:(NSNotification *)sender {
  34. NSString *type = sender.object;
  35. NSLog(@"%@",type);
  36. self.homePageSubjectType = [type isEqualToString:@"1"]? RQHomePageSubjectType_SubjectOne_LI :RQHomePageSubjectType_SubjectFour_LI;
  37. [RQ_VIP_Module isVipWithSubject:self.homePageSubjectType+1 complete:^(BOOL isVip) {
  38. }];
  39. [MBProgressHUD showHUDAddedTo:[UIApplication sharedApplication].keyWindow animated:YES];
  40. [[RQ_HTTP_Service getFiveTeachingList:type] subscribeNext:^(NSArray *fiveModels) {
  41. [MBProgressHUD rq_hideHUD];
  42. RQPlaceVideoListModel *placeVideoListModel = [[RQPlaceVideoListModel alloc] init];
  43. placeVideoListModel.examName = [type isEqualToString:@"1"]? @"科一专项精品课" : @"科四专项精品课";
  44. placeVideoListModel.items = fiveModels;
  45. NSArray *videosItemArr = [fiveModels.rac_sequence.signal map:^id _Nullable(RQPlaceVideoListModel *placeVideoListModel) {
  46. VideosItem *videosItem = [[VideosItem alloc] init];
  47. // videosItem.isPlaying = false;
  48. videosItem.videoType = RQVideoType_Default;
  49. videosItem.video_url = placeVideoListModel.videoUrl;
  50. videosItem.coverFileUrl = placeVideoListModel.videoCover;
  51. videosItem.title = placeVideoListModel.videoName;
  52. videosItem.subject = [type isEqualToString:@"1"]? RQHomePageSubjectType_SubjectOne_LI :RQHomePageSubjectType_SubjectFour_LI;
  53. videosItem.permission = [placeVideoListModel.permission integerValue];
  54. videosItem.placeVideoListModel = placeVideoListModel;
  55. videosItem.tryLookSecond = placeVideoListModel.tryLookSecond;
  56. return videosItem;
  57. }].toArray;
  58. self.videoArr = videosItemArr;
  59. [self updateData];
  60. } error:^(NSError * _Nullable error) {
  61. [MBProgressHUD rq_hideHUD];
  62. [MBProgressHUD rq_showErrorTips:error];
  63. }];
  64. }
  65. - (void)initialize {
  66. [super initialize];
  67. self.prefersNavigationBarHidden = YES;
  68. ///配置数据
  69. // [self rq_configureData];
  70. [self updateData];
  71. }
  72. - (void)updateData {
  73. @weakify(self);
  74. VideosItem *videosItem = self.videoArr.firstObject;
  75. if (videosItem.teachingVideoTypeId == 0 && videosItem.id == 0 && RQStringIsEmpty(videosItem.videoDescribe)) {
  76. self.updateDataType = RQVideoDetailSubPageUpdateDataType_Request;
  77. [QMUITips showLoadingInView:DefaultTipsParentView];
  78. [[RACScheduler mainThreadScheduler] afterDelay:1.f schedule:^{
  79. @strongify(self)
  80. ///配置数据
  81. [self rq_configureData];
  82. self.updateDataType = RQVideoDetailSubPageUpdateDataType_Complete;
  83. [QMUITips hideAllTips];
  84. }];
  85. } else {
  86. self.updateDataType = RQVideoDetailSubPageUpdateDataType_Request;
  87. [[RQ_HTTP_Service getTeachingVideoByTypeId:videosItem.teachingVideoTypeId] subscribeNext:^(NSArray *arr) {
  88. @strongify(self);
  89. self.videoArr = [arr.rac_sequence.signal map:^id _Nullable(VideosItem *videoItem) {
  90. return videoItem;
  91. }].toArray;
  92. } error:^(NSError * _Nullable error) {
  93. } completed:^{
  94. @strongify(self)
  95. ///配置数据
  96. [self rq_configureData];
  97. self.updateDataType = RQVideoDetailSubPageUpdateDataType_Complete;
  98. }];
  99. }
  100. }
  101. #pragma mark - PrivateMethod
  102. - (void)rq_configureData {
  103. @weakify(self);
  104. /// 第零组
  105. NYLIVideoDetailSubGroupViewModel *group0 = [NYLIVideoDetailSubGroupViewModel groupViewModel];
  106. group0.headerHeight = CGFLOAT_MIN;
  107. group0.footerHeight = CGFLOAT_MIN;
  108. NSMutableArray *itemMutableArr = @[].mutableCopy;
  109. [self.videoArr.rac_sequence.signal subscribeNext:^(VideosItem *videosItem) {
  110. @strongify(self)
  111. videosItem.index = [self.videoArr indexOfObject:videosItem] + 1;
  112. videosItem.totalNum = self.videoArr.count;
  113. videosItem.subject = self.homePageSubjectType;
  114. NYLIVideoDetailSubPageItemViewModel *videoDetailSubPageItemViewModel = [[NYLIVideoDetailSubPageItemViewModel alloc] initWithVideosItem:videosItem];
  115. videoDetailSubPageItemViewModel.rowHeight = RQ_FIT_HORIZONTAL(150.f);
  116. videoDetailSubPageItemViewModel.operation = ^{
  117. @strongify(self);
  118. [RQNotificationCenter postNotificationName:RQPlayVideoUrlNotification object:@{
  119. RQPlayVideoItemKey : videosItem,
  120. RQPlayVideoItemArrKey : self.videoArr,
  121. }];
  122. };
  123. [itemMutableArr addObject:videoDetailSubPageItemViewModel];
  124. } completed:^{
  125. @strongify(self)
  126. NYLIVideoDetailSubFooterViewModel *footer = [[NYLIVideoDetailSubFooterViewModel alloc] initWithVideosItem:NULL];
  127. footer.rowHeight = RQ_FIT_HORIZONTAL(260.f);
  128. [itemMutableArr addObject:footer];
  129. group0.itemViewModels = itemMutableArr.copy;
  130. self.dataSource = @[group0];
  131. }];
  132. }
  133. @end