diff --git a/lib/modules/meeting/controllers/meeting_home_controller.dart b/lib/modules/meeting/controllers/meeting_home_controller.dart index cd8c1f98a..28317cfbd 100644 --- a/lib/modules/meeting/controllers/meeting_home_controller.dart +++ b/lib/modules/meeting/controllers/meeting_home_controller.dart @@ -135,6 +135,7 @@ class MeetingHomeController extends GetxController { .toList(); } +//未使用 void loadTranslatAudio() async { try { final appDir = await appDocDir; // 先 await 获取目录 @@ -289,9 +290,9 @@ class MeetingHomeController extends GetxController { } } - // 新增:将翻译音频归档到 LocalAudio 并返回新路径(优先 rename,失败再 copy+delete) + // 新增(2025-11-04):将翻译音频归档到 LocalAudio 并返回新路径(优先 rename,失败再 copy+delete) Future _archiveTranslatToLocal(String srcPath) async { - // 中文注释:获取应用文档目录并确保 LocalAudio 目录存在 + // 获取应用文档目录并确保 LocalAudio 目录存在 final appDir = await appDocDir; final destDir = Directory(path.join(appDir.path, 'LocalAudio')); if (!await destDir.exists()) { @@ -327,8 +328,9 @@ class MeetingHomeController extends GetxController { for (final originalPath in selected) { try { // 中文注释:根据开关决定是否将翻译音频迁移到 LocalAudio - final usePath = - archiveToLocal ? await _archiveTranslatToLocal(originalPath) : originalPath; + final usePath = archiveToLocal + ? await _archiveTranslatToLocal(originalPath) + : originalPath; // 中文注释:计算音频时长与创建时间 await _audioPlayer.setAudioSource(AudioSource.file(usePath)); @@ -370,7 +372,8 @@ class MeetingHomeController extends GetxController { Logger.error('importFailed' .tr .replaceAll('{filePath}', originalPath) - .replaceAll('{error}', e.toString())); // 对应中文:导入文件失败: {filePath}, error: {error} + .replaceAll('{error}', + e.toString())); // 对应中文:导入文件失败: {filePath}, error: {error} } } EasyLoading.dismiss(); @@ -381,12 +384,30 @@ class MeetingHomeController extends GetxController { String fileName = ""; bool isParamProvided = filePath != null; // 更清晰的变量名 String audioType = 'IMPORT'; // 默认类型为IMPORT + String effectivePath = filePath ?? ''; if (filePath != null) { // 正确截取文件名(跨平台安全方式) fileName = path.basename(filePath); - // 检查是否来自翻译模块 - if (filePath.contains('/TranslatAudio/')) { - audioType = 'TRANSLAT'; // 设置为翻译音频类型 + // 检查是否来自翻译模块(兼容不同平台路径分隔符) + final isFromTranslat = filePath.contains('/TranslatAudio/') || + filePath.contains('\\TranslatAudio\\'); + if (isFromTranslat) { + try { + // 实现——导入前将翻译音频归档到LocalAudio + effectivePath = await _archiveTranslatToLocal(filePath); + audioType = 'TRANSLAT'; // 归档后统一标记为TRANSLAT类型 + fileName = path.basename(effectivePath); + } catch (e) { + // 归档失败则回退为原路径、保持TRANSLAT类型以避免中断导入 + audioType = 'TRANSLAT'; + effectivePath = filePath; + Logger.error('importFailed' + .tr + .replaceAll('{filePath}', filePath) + .replaceAll('{error}', e.toString())); // 翻译键代表的中文文本内容 + } + } else { + effectivePath = filePath; } } else { FilePickerResult? result = await FilePicker.platform.pickFiles( @@ -410,7 +431,7 @@ class MeetingHomeController extends GetxController { } // 使用文件路径而不是字节数据 - filePath = file.path ?? await _copyFileToLocal(file); + effectivePath = file.path ?? await _copyFileToLocal(file); fileName = file.name; } else { EasyLoading.dismiss(); @@ -419,7 +440,7 @@ class MeetingHomeController extends GetxController { } final meetingId = - await insertMeetingAudio(fileName, filePath, type: audioType); + await insertMeetingAudio(fileName, effectivePath, type: audioType); if (isParamProvided) { Get.toNamed(Routes.meetingDetails, arguments: { @@ -449,10 +470,12 @@ class MeetingHomeController extends GetxController { }; final meetingId = await SqfliteApi.insertMeeting(data); if (meetingId != null) { + // 中文注释:根据类型选择上传分类;LOCAL 走 LocalAudio,其它走 ExternalAudio + final uploadBucket = type == 'LOCAL' ? 'LocalAudio' : 'ExternalAudio'; meetingUploadService.addUpload( meetingId, filePath, - 'ExternalAudio', + uploadBucket, isUpload: isUpload, ); originalDataList.insert(0, {