NYLIVideoDetailSubPageViewModel.m 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108
  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. @property (nonatomic, readwrite, assign) RQHomePageSubjectType homePageSubjectType;
  15. @end
  16. @implementation NYLIVideoDetailSubPageViewModel
  17. #pragma mark - Public Method
  18. - (instancetype)initWithServices:(id<RQViewModelServices>)services params:(NSDictionary *)params {
  19. if (self = [super initWithServices:services params:params]) {
  20. self.videoArr = params[RQViewModelUtilKey];
  21. self.title = params[RQViewModelTitleKey];
  22. self.subTitle = params[RQViewModelIDKey];
  23. self.indexPath = params[RQViewCommonValueKey];
  24. self.updateDataType = RQVideoDetailSubPageUpdateDataType_Default;
  25. self.homePageSubjectType = [params[RQHomeSubPageTypeKey] integerValue];
  26. }
  27. return self;
  28. }
  29. - (void)initialize {
  30. [super initialize];
  31. self.prefersNavigationBarHidden = YES;
  32. ///配置数据
  33. // [self rq_configureData];
  34. [self updateData];
  35. }
  36. - (void)updateData {
  37. @weakify(self);
  38. VideosItem *videosItem = self.videoArr.firstObject;
  39. if (videosItem.teachingVideoTypeId == 0 && videosItem.id == 0 && RQStringIsEmpty(videosItem.videoDescribe)) {
  40. self.updateDataType = RQVideoDetailSubPageUpdateDataType_Request;
  41. [QMUITips showLoadingInView:DefaultTipsParentView];
  42. [[RACScheduler mainThreadScheduler] afterDelay:1.f schedule:^{
  43. @strongify(self)
  44. ///配置数据
  45. [self rq_configureData];
  46. self.updateDataType = RQVideoDetailSubPageUpdateDataType_Complete;
  47. [QMUITips hideAllTips];
  48. }];
  49. } else {
  50. self.updateDataType = RQVideoDetailSubPageUpdateDataType_Request;
  51. [[RQ_HTTP_Service getTeachingVideoByTypeId:videosItem.teachingVideoTypeId] subscribeNext:^(NSArray *arr) {
  52. @strongify(self);
  53. self.videoArr = [arr.rac_sequence.signal map:^id _Nullable(VideosItem *videoItem) {
  54. return videoItem;
  55. }].toArray;
  56. } error:^(NSError * _Nullable error) {
  57. } completed:^{
  58. @strongify(self)
  59. ///配置数据
  60. [self rq_configureData];
  61. self.updateDataType = RQVideoDetailSubPageUpdateDataType_Complete;
  62. }];
  63. }
  64. }
  65. #pragma mark - PrivateMethod
  66. - (void)rq_configureData {
  67. @weakify(self);
  68. /// 第零组
  69. NYLIVideoDetailSubGroupViewModel *group0 = [NYLIVideoDetailSubGroupViewModel groupViewModel];
  70. group0.headerHeight = CGFLOAT_MIN;
  71. group0.footerHeight = CGFLOAT_MIN;
  72. NSMutableArray *itemMutableArr = @[].mutableCopy;
  73. [self.videoArr.rac_sequence.signal subscribeNext:^(VideosItem *videosItem) {
  74. @strongify(self)
  75. videosItem.index = [self.videoArr indexOfObject:videosItem] + 1;
  76. videosItem.totalNum = self.videoArr.count;
  77. videosItem.subject = self.homePageSubjectType;
  78. NYLIVideoDetailSubPageItemViewModel *videoDetailSubPageItemViewModel = [[NYLIVideoDetailSubPageItemViewModel alloc] initWithVideosItem:videosItem];
  79. videoDetailSubPageItemViewModel.rowHeight = RQ_FIT_HORIZONTAL(150.f);
  80. videoDetailSubPageItemViewModel.operation = ^{
  81. @strongify(self);
  82. [RQNotificationCenter postNotificationName:RQPlayVideoUrlNotification object:@{
  83. RQPlayVideoItemKey : videosItem,
  84. RQPlayVideoItemArrKey : self.videoArr,
  85. }];
  86. };
  87. [itemMutableArr addObject:videoDetailSubPageItemViewModel];
  88. } completed:^{
  89. @strongify(self)
  90. NYLIVideoDetailSubFooterViewModel *footer = [[NYLIVideoDetailSubFooterViewModel alloc] initWithVideosItem:NULL];
  91. footer.rowHeight = RQ_FIT_HORIZONTAL(260.f);
  92. [itemMutableArr addObject:footer];
  93. group0.itemViewModels = itemMutableArr.copy;
  94. self.dataSource = @[group0];
  95. }];
  96. }
  97. @end