chat_repository.dart 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. import 'dart:convert';
  2. import 'package:electronic_assistant/base/base_response.dart';
  3. import 'package:electronic_assistant/data/api/atmob_api.dart';
  4. import 'package:electronic_assistant/data/api/request/chat_history_request.dart';
  5. import 'package:electronic_assistant/data/api/request/chat_request.dart';
  6. import 'package:electronic_assistant/data/bean/chat_item.dart';
  7. import 'package:electronic_assistant/utils/http_handler.dart';
  8. import 'package:electronic_assistant/utils/sse_parse_util.dart';
  9. import '../api/atmob_stream_api.dart';
  10. class ChatRepository {
  11. ChatRepository._() {}
  12. Future<Stream<Message>> streamChat(String chatContent,
  13. {String? talkId, String? agendaId}) {
  14. return atmobStreamApi
  15. .chat(ChatRequest(chatContent, talkId: talkId, agendaId: agendaId))
  16. .then((response) async {
  17. List<String>? contentType = response.headers['Content-Type'];
  18. if (contentType != null) {
  19. for (var value in contentType) {
  20. if (value.contains('text/event-stream')) {
  21. return response.stream;
  22. } else if (value.contains('application/json')) {
  23. BaseResponse<String> baseResponse = BaseResponse.fromJson(
  24. jsonDecode(await response.stream
  25. .map((bytes) => utf8.decoder.convert(bytes))
  26. .toList()
  27. .then((value) => value.join())),
  28. (json) => json as String);
  29. throw ServerErrorException(baseResponse.code, baseResponse.message);
  30. }
  31. }
  32. }
  33. throw Exception('Invalid content type');
  34. }).then((stream) => SSEParseUtil.parse(stream));
  35. }
  36. Future<List<ChatItem>> chatHistory(String? lastId) {
  37. return atmobApi
  38. .chatHistory(ChatHistoryRequest(1, 20, lastId))
  39. .then(HttpHandler.handle(true))
  40. .then((response) => response.chatItems);
  41. }
  42. }
  43. final chatRepository = ChatRepository._();