RQExerciseModule.m 5.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115
  1. //
  2. // RQExerciseModule.m
  3. // SDJK
  4. //
  5. // Created by 张嵘 on 2021/8/12.
  6. //
  7. #import "RQExerciseModule.h"
  8. /// 刷新TableView
  9. NSString * const RQRefreshExerciseTableViewNotification = @"RQRefreshExerciseTableViewNotification";
  10. /// 答题结果
  11. NSString * const RQAnswerResultsNotification = @"RQAnswerResultsNotification";
  12. /// 答题页面更新
  13. NSString * const RQQuestionReloadNotification = @"RQQuestionReloadNotification";
  14. /// 答题结果 key
  15. NSString * const RQAnswerResultsKey = @"RQAnswerResultsKey";
  16. /// 练习模式Key
  17. NSString * const RQExerciseTypeKey = @"RQExerciseTypeKey";
  18. /// 页面操作类型Key
  19. NSString * const RQExerciseDoTypeKey = @"RQExerciseDoTypeKey";
  20. /// 答题页面更新ExerciseModelKey
  21. NSString * const RQQuestionReloadExerciseModelKey = @"RQQuestionReloadExerciseModelKey";
  22. @interface RQExerciseModule ()
  23. @end
  24. @implementation RQExerciseModule
  25. static id rq_RQExerciseModule = nil;
  26. #pragma mark - init
  27. + (instancetype)sharedInstance {
  28. static dispatch_once_t onceToken;
  29. dispatch_once(&onceToken, ^{
  30. rq_RQExerciseModule = [[self alloc] init];
  31. });
  32. return rq_RQExerciseModule;
  33. }
  34. - (instancetype)init {
  35. if (self = [super init]) {
  36. self.exerciseDoType = RQExerciseDoType_Default;
  37. }
  38. return self;
  39. }
  40. #pragma mark - PublicMethods
  41. - (void)rq_RACIsAutoRead {
  42. [[[RACSignal combineLatest:@[RACObserve(RQ_Exercise_Module, isAutoRead),RACObserve(RQ_Exercise_Module, currrentExerciseModel)] reduce:^(id isAutoRead, RQExerciseModel *exerciseModel){
  43. if (RQ_Exercise_Module.isAutoRead && !exerciseModel.isAuto) {
  44. return exerciseModel;
  45. } else if (RQ_Exercise_Module.isAutoRead && exerciseModel.isAuto) {
  46. [RQ_MUSIC_MANAGER rq_cancelStreamer];
  47. [RQNotificationCenter postNotificationName:RQQuestionReloadNotification object:@{RQQuestionReloadExerciseModelKey : exerciseModel}];
  48. RQExerciseModel *exerciseModel = nil;
  49. return exerciseModel;
  50. } else {
  51. exerciseModel.isAuto = NO;
  52. RQExerciseModel *exerciseModel = nil;
  53. return exerciseModel;
  54. }
  55. }] deliverOnMainThread] subscribeNext:^(RQExerciseModel *exerciseModel) {
  56. if (exerciseModel) {
  57. exerciseModel.isAuto = YES;
  58. NSLog(@"1.读题目---%@---%@",exerciseModel.issue,exerciseModel.issuemp3);
  59. [RQ_MUSIC_MANAGER rq_resetStreamerWithURLString:exerciseModel.issuemp3 DOUAudioStreamerStatusBlock:^(DOUAudioStreamerStatus status) {
  60. if (status == DOUAudioStreamerFinished) {
  61. NSLog(@"2.读技巧---%@---%@",exerciseModel.issue,exerciseModel.explain_mp3);
  62. [RQ_ALERTVIEW_MANAGER rq_showSkillExplanationAlertWithMessage:exerciseModel.explain_jq skillkeyword:exerciseModel.skillkeyword explainGifUrl:exerciseModel.explain_gif mp3Url:exerciseModel.explain_mp3 completeBlock:^{
  63. NSLog(@"3.结束---自动读题模式下: 当前题目正在自动读题 即将自动跳到下一题");
  64. exerciseModel.isShowSkillExplanation = YES;
  65. exerciseModel.isAuto = NO;
  66. // self.currrentExerciseModel = exerciseModel;
  67. [RQNotificationCenter postNotificationName:RQQuestionReloadNotification object:@{RQQuestionReloadExerciseModelKey : exerciseModel}];
  68. }];
  69. exerciseModel.userAnswer = exerciseModel.answer;
  70. // self.currrentExerciseModel = exerciseModel;
  71. [RQNotificationCenter postNotificationName:RQQuestionReloadNotification object:@{RQQuestionReloadExerciseModelKey : exerciseModel}];
  72. }
  73. }];
  74. }
  75. }];
  76. // [[RACObserve(RQ_Exercise_Module, isAutoRead) takeUntil:self.rac_willDeallocSignal] subscribeNext:^(id _Nullable x) {
  77. // if (RQ_Exercise_Module.isAutoRead) {
  78. // self.currrentExerciseModel.isAuto = YES;
  79. // NSLog(@"1.读题目---%@---%@",self.currrentExerciseModel.issue,self.currrentExerciseModel.issuemp3);
  80. // [RQ_MUSIC_MANAGER rq_resetStreamerWithURLString:self.currrentExerciseModel.issuemp3 DOUAudioStreamerStatusBlock:^(DOUAudioStreamerStatus status) {
  81. // if (status == DOUAudioStreamerFinished) {
  82. // NSLog(@"2.读技巧---%@---%@",self.currrentExerciseModel.issue,self.currrentExerciseModel.explain_mp3);
  83. // [RQ_ALERTVIEW_MANAGER rq_showSkillExplanationAlertWithMessage:self.currrentExerciseModel.explain_jq skillkeyword:self.currrentExerciseModel.skillkeyword explainGifUrl:self.currrentExerciseModel.explain_gif mp3Url:self.currrentExerciseModel.explain_mp3 completeBlock:^{
  84. // NSLog(@"3.结束---%@\r\n -%@\r\n -%@\r\n -%@\r\n -%@",self.currrentExerciseModel.issue,self.currrentExerciseModel.issuemp3,self.currrentExerciseModel.answermp3,self.currrentExerciseModel.explain_mp3,self.currrentExerciseModel.explainjsmp3);
  85. // self.currrentExerciseModel.isShowSkillExplanation = YES;
  86. // self.currrentExerciseModel.isAuto = NO;
  87. // self.currrentExerciseModel = self.currrentExerciseModel;
  88. // [RQNotificationCenter postNotificationName:RQQuestionReloadNotification object:nil];
  89. // }];
  90. // self.currrentExerciseModel.userAnswer = self.currrentExerciseModel.answer;
  91. // self.currrentExerciseModel = self.currrentExerciseModel;
  92. // [RQNotificationCenter postNotificationName:RQQuestionReloadNotification object:nil];
  93. // }
  94. // }];
  95. // } else {
  96. // [RQ_MUSIC_MANAGER rq_cancelStreamer];
  97. // [RQNotificationCenter postNotificationName:RQQuestionReloadNotification object:nil];
  98. // }
  99. // }];
  100. }
  101. - (void)cancleAutoReadQuestion {
  102. [RQ_MUSIC_MANAGER rq_cancelStreamer];
  103. RQ_Exercise_Module.isAutoRead = NO;
  104. }
  105. @end