import 'dart:io'; 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/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/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 'package:path_provider/path_provider.dart'; import '../../data/consts/error_code.dart'; import '../../data/repositories/talk_repository.dart'; import '../../dialog/alert_dialog.dart'; import '../../router/app_pages.dart'; import '../../utils/http_handler.dart'; class RecordController extends BaseController { static const int minRecordDuration = 3; Rx currentStatus = recordHandler.currentStatus; RxDouble currentDuration = recordHandler.currentDuration; @override void onInit() { super.onInit(); recordHandler.init(); } @override void onReady() async { super.onReady(); EventHandler.report(EventId.event_100010, params: {EventId.id: EventId.id_001}); if (!await RecordHandler.hasUnUploadRecord()) { _startOrContinueRecord(); } } @override void onClose() { super.onClose(); recordHandler.onClose(); } void addShortcut() { DesktopShortcutUtils.requestAddDesktopShortcut(); } void onBackClick() { Get.back(); // if (currentStatus.value == RecordStatus.pending || // currentStatus.value == RecordStatus.paused) { // Get.back(); // } else { // EAAlertDialog.show( // title: "是否保存当前录音?", // confirmText: "确定", // cancelText: "取消", // confirmOnTap: () { // _saveCurrentRecord(); // EAAlertDialog.dismiss(); // }, // cancelOnTap: () { // EAAlertDialog.dismiss(); // _stopRecord().then((_) => 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() { if (currentStatus.value == RecordStatus.pending) { return; } EventHandler.report(EventId.event_100011); _saveCurrentRecord(); } Future _startOrContinueRecord() async { recordHandler.startOrContinueRecord(); } Future _saveCurrentRecord() async { final currentDurationValue = currentDuration.value; if (currentDurationValue < minRecordDuration) { ToastUtil.showToast("录音时长不足$minRecordDuration秒"); return; } await recordHandler.stopRecord(); talkRepository .talkCreate(recordHandler.lastRecordId, currentDuration.value.toInt()) .then((talkInfo) async { await recordHandler.getConvertWavFile(talkInfo.id); _dealSuccessNextStep(talkInfo); }).catchError((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); } }