From c69f8a61e9e873d9dac7139d318fc84efe4bd96a Mon Sep 17 00:00:00 2001 From: lxm <1274844347@qq.com> Date: Tue, 13 Jan 2026 12:01:02 +0800 Subject: [PATCH] =?UTF-8?q?fix(meeting):=20=E4=BF=AE=E5=A4=8D=E5=AF=BC?= =?UTF-8?q?=E5=85=A5=E6=9C=AC=E5=9C=B0=E5=BD=95=E9=9F=B3=E6=97=B6=E5=BF=BD?= =?UTF-8?q?=E7=95=A5=E6=AD=A3=E5=9C=A8=E5=BD=95=E5=88=B6=E6=96=87=E4=BB=B6?= =?UTF-8?q?=E5=92=8C=E6=97=A0=E6=95=88=E6=96=87=E4=BB=B6=E7=9A=84=E9=97=AE?= =?UTF-8?q?=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 添加对正在录制文件的检查,避免导入冲突 跳过小于1KB的文件和无效音频文件 优化音频时长计算逻辑 --- .../controllers/meeting_home_controller.dart | 40 +++++++++++++++---- 1 file changed, 33 insertions(+), 7 deletions(-) diff --git a/lib/modules/meeting/controllers/meeting_home_controller.dart b/lib/modules/meeting/controllers/meeting_home_controller.dart index 910431d64..8564ef0b4 100644 --- a/lib/modules/meeting/controllers/meeting_home_controller.dart +++ b/lib/modules/meeting/controllers/meeting_home_controller.dart @@ -22,6 +22,7 @@ import '../../../data/services/meeting/meeting_task_service.dart'; import '../../../data/services/meeting/meeting_upload_service.dart'; import '../../../data/services/network/api.dart'; import '../../../routes/app_routes.dart'; +import 'meeting_record_controller.dart'; import 'meeting_controller.dart'; // 会议首页控制器 @@ -193,12 +194,13 @@ class MeetingHomeController extends GetxController { } } -// 核心方法:导入本地录音文件到统一目录 + // 核心方法:导入本地录音文件到统一目录 void addMeetingAudio() async { EasyLoading.show(status: 'importingLocalRecordings'.tr); // 对应中文:正在导入本地录音... try { int addUp = 0; // 新增计数 final appDir = await appDocDir; // 获取应用文档目录 + final activeRecordingWavName = _getActiveRecordingWavFileName(); final sourceDirs = [ Directory("${appDir.path}/MeetingAudio/"), // 会议录音目录 @@ -226,16 +228,31 @@ class MeetingHomeController extends GetxController { // 遍历所有文件实体 for (final fileEntity in allFiles) { try { + final entityName = path.basename(fileEntity.path); + if (activeRecordingWavName != null && + entityName == activeRecordingWavName) { + continue; + } + final file = File(fileEntity.path); //将文件实体转换为具体文件操作对象 final filePath = file.path; + final fileStat = await file.stat(); //获取文件状态信息,包含修改时间等 + if (fileStat.size < 1024) { + continue; + } + // 使用just_audio库加载音频文件以获取时长 - await _audioPlayer.setAudioSource(AudioSource.file(filePath)); - int seconds = - _audioPlayer.duration?.inSeconds ?? 0; //获取音频时长(秒),若为空则设为0 + final Duration? duration = + await _audioPlayer.setAudioSource(AudioSource.file(filePath)); + final Duration? effectiveDuration = duration ?? _audioPlayer.duration; + final int durationMs = effectiveDuration?.inMilliseconds ?? 0; + final int seconds = + durationMs <= 0 ? 0 : ((durationMs + 999) ~/ 1000); + if (seconds <= 0) { + continue; + } - // 获取文件修改时间 - final fileStat = await file.stat(); //获取文件状态信息,包含修改时间等 final creationTime = fileStat.changed.millisecondsSinceEpoch; // 准备新路径 @@ -312,6 +329,15 @@ class MeetingHomeController extends GetxController { } } + String? _getActiveRecordingWavFileName() { + if (!Get.isRegistered()) return null; + final controller = Get.find(); + if (!controller.isRecording.value) return null; + final name = controller.fileName.value; + if (name.isEmpty) return null; + return '$name.wav'; + } + // 新增(2025-11-04):将翻译音频归档到 LocalAudio 并返回新路径(优先 rename,失败再 copy+delete) Future _archiveTranslatToLocal(String srcPath) async { // 获取应用文档目录并确保 LocalAudio 目录存在 @@ -329,7 +355,7 @@ class MeetingHomeController extends GetxController { if (await File(destPath).exists()) { final ts = DateTime.now().millisecondsSinceEpoch; - destPath = path.join(destDir.path, '$baseName\_$ts$ext'); + destPath = path.join(destDir.path, '${baseName}_$ts$ext'); } // 中文注释:尝试 rename(更快),失败则 copy + delete