talk_repository.dart 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150
  1. import 'dart:io';
  2. import 'package:electronic_assistant/data/api/atmob_api.dart';
  3. import 'package:electronic_assistant/data/api/atmob_file_api.dart';
  4. import 'package:electronic_assistant/data/api/request/talk_create_request.dart';
  5. import 'package:electronic_assistant/data/api/request/talk_delete_request.dart';
  6. import 'package:electronic_assistant/data/api/request/talk_file_request.dart';
  7. import 'package:get/get.dart';
  8. import '../../utils/http_handler.dart';
  9. import '../api/request/talk_generate_request.dart';
  10. import '../api/request/talk_paginate_request.dart';
  11. import '../api/request/talk_rename_request.dart';
  12. import '../api/request/talk_request.dart';
  13. import '../api/response/talk_check_electric_response.dart';
  14. import '../api/response/talk_info_response.dart';
  15. import '../api/response/talk_paginate_response.dart';
  16. import '../bean/talk_original.dart';
  17. import '../bean/talks.dart';
  18. import 'account_repository.dart';
  19. class TalkRepository {
  20. TalkRepository._();
  21. final Set<String> _uploadingTalkIds = {};
  22. final _talkList = RxList<TalkBean>();
  23. RxList<TalkBean> get talkList => _talkList;
  24. bool isUploadingTalk(String talkId) {
  25. return _uploadingTalkIds.contains(talkId);
  26. }
  27. void renovateTalkData(TalkBean talkInfo) {
  28. for (int i = 0; i < _talkList.length; i++) {
  29. if (_talkList[i].id == talkInfo.id) {
  30. _talkList[i].updateBean(talkInfo);
  31. break;
  32. }
  33. }
  34. }
  35. void setTalkList(List<TalkBean> list) {
  36. _talkList.assignAll(list);
  37. }
  38. void addNewTalkData(TalkBean talkInfo) {
  39. _talkList.insert(0, talkInfo);
  40. }
  41. clearTalkList() {
  42. _talkList.clear();
  43. }
  44. Future<TalkPaginateResponse> refreshHomeTalkData({int? sortType = 1}) {
  45. return requestTalkPagePaginate(0, 10, sortType: sortType, isClearAll: true);
  46. }
  47. Future<TalkPaginateResponse> requestTalkPagePaginate(int offset, int limit,
  48. {String? searchKeyword, int? sortType = 1, bool? isClearAll = false}) {
  49. return talkPagePaginate(offset, limit,
  50. searchKeyword: searchKeyword, sortType: sortType)
  51. .then((response) {
  52. if (isClearAll == true) {
  53. _talkList.clear();
  54. }
  55. if (response.list != null) {
  56. _talkList.addAll(response.list!);
  57. }
  58. return response;
  59. });
  60. }
  61. ///sortType 1:按创建时间倒序 2:按更新时间倒序
  62. Future<TalkPaginateResponse> talkPagePaginate(int offset, int limit,
  63. {String? searchKeyword, int? sortType = 1}) {
  64. return atmobApi
  65. .talkPagePaginate(TalkPaginateRequest(offset, limit,
  66. searchKeyword: searchKeyword, sortType: sortType))
  67. .then(HttpHandler.handle(false));
  68. }
  69. Future<List<TalkOriginal>> talkOriginal(String? talkId) {
  70. return atmobApi
  71. .talkOriginal(
  72. TalkRequest(talkId, isExample: !accountRepository.isLogin.value))
  73. .then(HttpHandler.handle(false))
  74. .then((data) {
  75. if (data.list != null) {
  76. return data.list!;
  77. } else {
  78. return [];
  79. }
  80. });
  81. }
  82. // duration 音频时长,单位为秒
  83. Future<TalkCheckElectricResponse> checkElectric(double duration) {
  84. return atmobApi
  85. .checkElectric(TalkGenerateRequest(duration))
  86. .then(HttpHandler.handle(false));
  87. }
  88. Future<TalkInfoResponse> talkInfo(String id) {
  89. return atmobApi
  90. .talkInfo(TalkRequest(id, isExample: !accountRepository.isLogin.value))
  91. .then(HttpHandler.handle(true));
  92. }
  93. Future<void> talkRename(String? id, String? title) {
  94. return atmobApi
  95. .talkRename(TalkRenameRequest(id, title))
  96. .then(HttpHandler.handle(true));
  97. }
  98. Future<void> talkDelete(String? id) {
  99. return atmobApi
  100. .talkDelete(TalkDeleteRequest(id))
  101. .then(HttpHandler.handle(true));
  102. }
  103. Future<TalkBean> talkCreate(String requestId, int duration,
  104. {String? localAudioUrl, int? uploadType}) {
  105. return atmobApi
  106. .talkCreate(TalkCreateRequest(duration, requestId,
  107. localAudioUrl: localAudioUrl, uploadType: uploadType))
  108. .then(HttpHandler.handle(true))
  109. .then((bean) {
  110. //添加新的录音到最新记录
  111. talkRepository.addNewTalkData(bean);
  112. return bean;
  113. });
  114. }
  115. Future<String> uploadTalkFile(String talkId, double duration, File file) {
  116. _uploadingTalkIds.add(talkId);
  117. return atmobFileApi
  118. .uploadTalkFile(TalkFileRequest(talkId, duration, file: file).toJson())
  119. .then(HttpHandler.handle(true))
  120. .then((response) {
  121. _uploadingTalkIds.remove(talkId);
  122. return response.taskId;
  123. }).catchError((error) {
  124. _uploadingTalkIds.remove(talkId);
  125. throw error;
  126. });
  127. }
  128. }
  129. final talkRepository = TalkRepository._();