controller.dart 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117
  1. import 'dart:async';
  2. import 'package:electronic_assistant/base/base_controller.dart';
  3. import 'package:electronic_assistant/data/consts/event_report_id.dart';
  4. import 'package:electronic_assistant/data/repositories/talk_repository.dart';
  5. import 'package:electronic_assistant/module/talk/controller.dart';
  6. import 'package:electronic_assistant/resource/string.gen.dart';
  7. import 'package:electronic_assistant/utils/error_handler.dart';
  8. import 'package:electronic_assistant/utils/toast_util.dart';
  9. import 'package:get/get.dart';
  10. import '../../../data/bean/talk_original.dart';
  11. import '../../../data/bean/talks.dart';
  12. import '../../../data/repositories/account_repository.dart';
  13. class OriginalController extends BaseController {
  14. final originalList = <TalkOriginal>[].obs;
  15. final String? talkId;
  16. StreamSubscription? _talkBeanListener;
  17. StreamSubscription? _talkStatusListener;
  18. StreamSubscription? _audioPlayingListener;
  19. OriginalController(this.talkId);
  20. get talkController => Get.find<TalkController>(tag: talkId);
  21. @override
  22. void onReady() {
  23. super.onReady();
  24. _talkBeanListener = talkController.talkBean.listen((bean) {
  25. if (bean?.status.value == TalkStatus.analysisSuccess) {
  26. requestOriginal();
  27. }
  28. });
  29. _talkStatusListener =
  30. talkController.talkBean.value?.status.listen((status) {
  31. if (status == TalkStatus.analysisSuccess) {
  32. requestOriginal();
  33. }
  34. });
  35. requestOriginal();
  36. setPlayAutoSelection();
  37. }
  38. void setPlayAutoSelection() {
  39. _audioPlayingListener = talkController.playingDuration.listen((duration) {
  40. if (duration == null) {
  41. return;
  42. }
  43. int time = duration.inMilliseconds;
  44. for (var item in originalList) {
  45. if (item.startMs == null || item.endMs == null) {
  46. continue;
  47. }
  48. if (item.startMs! <= time && item.endMs! >= time) {
  49. item.setSelected(true);
  50. } else {
  51. item.setSelected(false);
  52. }
  53. }
  54. });
  55. }
  56. void eventReport(String eventId, {Map<String, dynamic>? params}) {
  57. talkController.eventReport(eventId, params: params);
  58. }
  59. void requestOriginal() {
  60. if (talkController.talkBean.value?.status.value ==
  61. TalkStatus.analysisSuccess) {
  62. eventReport(EventId.event_101300);
  63. } else if (talkController.talkBean.value?.status.value ==
  64. TalkStatus.analysisFail) {
  65. eventReport(EventId.event_101301);
  66. }
  67. if (originalList.isNotEmpty) {
  68. return;
  69. }
  70. talkRepository
  71. .talkOriginal(talkController.talkBean.value?.id)
  72. .then((value) {
  73. originalList.value = value;
  74. });
  75. }
  76. void talkTranslateClick(TalkOriginal item) {
  77. if (!accountRepository.isLogin.value) {
  78. ToastUtil.showToast(StringName.errorCodeNoLogin.tr);
  79. return;
  80. }
  81. if (item.getTranslateStatus() == TalkTranslate.translating ||
  82. item.getTranslateStatus() == TalkTranslate.translated) {
  83. return;
  84. }
  85. if (item.sentence == null || item.sentence!.isEmpty) {
  86. ToastUtil.showToast('翻译内容为空');
  87. return;
  88. }
  89. item.setTranslateStatus(TalkTranslate.translating);
  90. talkRepository.talkTranslate(item.sentence!).then((result) {
  91. item.setTranslateStatus(TalkTranslate.translated);
  92. item.setTranslatedSentence(result.translation);
  93. }).catchError((error) {
  94. item.setTranslateStatus(TalkTranslate.normal);
  95. ErrorHandler.toastError(error);
  96. });
  97. }
  98. @override
  99. void onClose() {
  100. super.onClose();
  101. _talkBeanListener?.cancel();
  102. _talkStatusListener?.cancel();
  103. _audioPlayingListener?.cancel();
  104. }
  105. }