import 'package:electronic_assistant/base/base_controller.dart'; import 'package:electronic_assistant/data/bean/talks.dart'; import 'package:electronic_assistant/data/consts/event_report_id.dart'; import 'package:electronic_assistant/data/repositories/account_repository.dart'; import 'package:electronic_assistant/handler/event_handler.dart'; import 'package:electronic_assistant/module/record/constants.dart'; import 'package:electronic_assistant/module/record/record_handler.dart'; import 'package:electronic_assistant/module/record/view.dart'; import 'package:electronic_assistant/module/store/view.dart'; import 'package:electronic_assistant/module/talk/view.dart'; import 'package:electronic_assistant/utils/desktop_shortcut_utils.dart'; import 'package:electronic_assistant/utils/toast_util.dart'; import 'package:get/get.dart'; import '../../data/api/response/user_info_response.dart'; import '../../data/consts/error_code.dart'; import '../../dialog/alert_dialog.dart'; import '../../router/app_pages.dart'; import '../../utils/de_bounce.dart'; import '../../utils/http_handler.dart'; class RecordController extends BaseController { Rx currentStatus = recordHandler.currentStatus; RxDouble currentDuration = recordHandler.currentDuration; final Debounce _saveDebounce = Debounce(debounceTime: 500); UserInfoResponse? get userInfo => accountRepository.userInfo.value; final RxBool isHideIntegrationInsufficient = RxBool(false); RecordFromType? fromType; @override void onInit() { super.onInit(); recordHandler.init(); _initArgs(); } void _initArgs() { fromType = Get.arguments?['fromType']; if (fromType == RecordFromType.home) { EventHandler.report(EventId.event_100010, params: {EventId.id: EventId.id_001}); } else if (fromType == RecordFromType.shortcutIcon) { EventHandler.report(EventId.event_100010, params: {EventId.id: EventId.id_002}); } else if (fromType == RecordFromType.shortcutInstruction) { EventHandler.report(EventId.event_100010, params: {EventId.id: EventId.id_003}); } } @override void onReady() async { super.onReady(); if (!await RecordHandler.hasUnUploadRecord()) { _startOrContinueRecord(); } } @override void onClose() { super.onClose(); recordHandler.onClose(); } void addShortcut() { DesktopShortcutUtils.requestAddDesktopShortcut(); } void onBackClick() { Get.back(); } void onActionClick() { RecordStatus nextStatus = currentStatus.value.nextStatus; if (nextStatus == RecordStatus.recording) { _startOrContinueRecord(); } else { recordHandler.stopRecord(); } } void onCancelClick() { if (currentStatus.value == RecordStatus.pending) { return; } EAAlertDialog.show( title: "是否删除当前录音?", confirmText: "删除", cancelText: "取消", confirmOnTap: () async { await recordHandler.deleteCurrentRecord(); EAAlertDialog.dismiss(); Get.back(); }, cancelOnTap: () { EAAlertDialog.dismiss(); }, ); } void onSaveClick() { _saveDebounce.onClick(() { if (currentStatus.value == RecordStatus.pending) { return; } EventHandler.report(EventId.event_100011); _saveCurrentRecord(); }); } Future _startOrContinueRecord() async { recordHandler.startOrContinueRecord(); } Future _saveCurrentRecord() async { try { TalkBean talkInfo = await recordHandler.saveCurrentRecord(); _dealSuccessNextStep(talkInfo); } catch (error) { if (error is ServerErrorException) { if (error.code == ErrorCode.errorCodeNoLogin) { ToastUtil.showToast("录音已保存,请登录"); Get.toNamed(RoutePath.login)?.then((loginSuccess) { loginSuccess != null && loginSuccess ? _saveCurrentRecord() : null; }); } else { ToastUtil.showToast("${error.message}"); } } else { ToastUtil.showToast("录音已保存,请检查网络并重试"); } } } void _dealSuccessNextStep(TalkBean talkInfo) { DesktopShortcutUtils.isShowTipsDialog(() { _routerToTalkPage(talkInfo); }); } //跳转至谈话详情界面 void _routerToTalkPage(TalkBean talkInfo) { Get.back(); TalkPage.start(talkInfo, eventTag: EventId.id_001); } void onAvailableTimeClick() { StorePage.start(fromType: StoreFromType.record); } void onCloseAvailableTimeClick() { isHideIntegrationInsufficient.value = true; } }