Browse Source

优化上传音频

newdev_shunjiawei
tanlongsheng 1 year ago
parent
commit
54735fc580
  1. 43
      lib/data/services/meeting/meeting_upload_service.dart
  2. 9
      lib/modules/meeting/controllers/meeting_controller.dart
  3. 3
      lib/modules/meeting/controllers/meeting_details_controller.dart
  4. 41
      lib/modules/meeting/views/meeting_view.dart

43
lib/data/services/meeting/meeting_upload_service.dart

@ -1,11 +1,12 @@
import 'package:get/get.dart';
import '../../../core/utils/logger.dart';
import '../../../core/utils/upload_oss.dart';
import '../db/sqflite_api.dart';
class MeetingUploadService extends GetxService {
RxInt meetingId = 0.obs;
RxDouble uploadProgress = 0.0.obs;
RxDouble uploadProgress = 0.6.obs;
RxList uploadList = [].obs;
bool _isUpload = false;
@ -32,19 +33,39 @@ class MeetingUploadService extends GetxService {
while (_handled < uploadList.length) {
Map element = uploadList[_handled];
_handled++;
if (element['audiourl'].isNotEmpty) {
if (element['audiourl'].isEmpty) {
meetingId.value = element['id'];
final audiourl = await UploadOss.upload(
filepath: element['filepath'],
rootDir: element['rootdir'],
);
await SqfliteApi.editMeetingTitle(
element['id'],
{'audiourl': audiourl},
);
element['audiourl'] = audiourl;
try {
final audiourl = await UploadOss.upload(
filepath: element['filepath'],
rootDir: element['rootdir'],
);
await SqfliteApi.editMeetingTitle(
element['id'],
{'audiourl': audiourl},
);
element['audiourl'] = audiourl;
} catch (e) {
Logger.error('Upload failed: $e');
}
}
}
meetingId.value = 0;
_isUpload = false;
}
void removeUpload(int id, {bool isDeleteTask = false}) {
Map uploadData = uploadList.firstWhere(
(element) => element['id'] == id,
orElse: () => {},
);
if (uploadData.isNotEmpty) {
if (isDeleteTask || uploadData['audiourl'].isNotEmpty) {
uploadList.remove(uploadData);
if (uploadList.isEmpty) {
_handled = 0;
}
}
}
}
}

9
lib/modules/meeting/controllers/meeting_controller.dart

@ -23,7 +23,7 @@ import '../../../data/services/meeting/meeting_upload_service.dart';
import '../../../routes/app_routes.dart';
class MeetingController extends GetxController {
final _meetingUploadService = Get.find<MeetingUploadService>();
final meetingUploadService = Get.find<MeetingUploadService>();
final ScrollController listController = ScrollController();
final AudioPlayer _audioPlayer = AudioPlayer();
@ -245,7 +245,7 @@ class MeetingController extends GetxController {
final meetingId = await SqfliteApi.insertMeeting(data);
if (meetingId != null) {
// 上传OSS
_meetingUploadService.addUpload(meetingId, newPath, 'LocalAudio');
meetingUploadService.addUpload(meetingId, newPath, 'LocalAudio');
// 更新UI数据
dataList.insert(0, {
@ -293,7 +293,7 @@ class MeetingController extends GetxController {
};
final meetingId = await SqfliteApi.insertMeeting(data);
if (meetingId != null) {
_meetingUploadService.addUpload(meetingId, filePath, 'TranslatAudio');
meetingUploadService.addUpload(meetingId, filePath, 'TranslatAudio');
dataList.insert(0, {
'id': meetingId,
@ -356,7 +356,7 @@ class MeetingController extends GetxController {
};
final meetingId = await SqfliteApi.insertMeeting(data);
if (meetingId != null) {
_meetingUploadService.addUpload(meetingId, filePath, 'ExternalAudio');
meetingUploadService.addUpload(meetingId, filePath, 'ExternalAudio');
dataList.insert(0, {
'id': meetingId,
@ -400,6 +400,7 @@ class MeetingController extends GetxController {
// 删除数据库中的记录
SqfliteApi.deleteMeeting(id);
_deleteFile(filepath);
meetingUploadService.removeUpload(id, isDeleteTask: true);
addQuantity--;
}

3
lib/modules/meeting/controllers/meeting_details_controller.dart

@ -19,6 +19,7 @@ import '../../../core/utils/upload_oss.dart';
import '../../../data/models/appconfig.dart';
import '../../../data/services/db/sqflite_api.dart';
import '../../../data/services/deapsound_ai_service.dart';
import '../../../data/services/meeting/meeting_upload_service.dart';
import '../model/meeting_details_model.dart';
import '../model/meeting_model.dart';
import 'meeting_controller.dart';
@ -30,6 +31,7 @@ class MeetingDetailsController extends GetxController
late AnimationController lottieController;
final _meetingUploadService = Get.find<MeetingUploadService>();
final _meetingController = Get.find<MeetingController>();
final PlayerController playerController = PlayerController();
@ -141,6 +143,7 @@ class MeetingDetailsController extends GetxController
_meetingController.dataListTask,
isAdd: false,
);
_meetingUploadService.removeUpload(id);
}
void _getAgent() async {

41
lib/modules/meeting/views/meeting_view.dart

@ -562,6 +562,47 @@ class MeetingView extends GetView<MeetingController> {
),
),
),
Obx(() {
Map uploadData =
controller.meetingUploadService.uploadList.firstWhere(
(element) => element['id'] == data.id,
orElse: () => {},
);
return uploadData.isNotEmpty
? Stack(
alignment: Alignment.center,
children: [
if (uploadData['id'] ==
controller.meetingUploadService.meetingId.value)
Obx(
() => SizedBox(
width: 20.w,
height: 20.w,
child: CircularProgressIndicator(
value: controller.meetingUploadService
.uploadProgress.value,
valueColor:
const AlwaysStoppedAnimation<Color>(
Colors.red),
strokeWidth: 1.w,
),
),
),
SizedBox(
width: 20.w,
height: 20.w,
child: Icon(
uploadData['audiourl'].isNotEmpty
? Icons.cloud_done
: Icons.cloud_upload,
color: Colors.blue,
size: 16.w,
),
),
],
)
: const SizedBox();
}),
if (data.tasktype == 1)
Padding(
padding: EdgeInsets.only(top: 5.w),

Loading…
Cancel
Save