message_repository.dart 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127
  1. import 'package:get/get.dart';
  2. import 'package:injectable/injectable.dart';
  3. import 'package:location/data/api/atmob_api.dart';
  4. import 'package:location/di/get_it.dart';
  5. import 'package:location/utils/http_handler.dart';
  6. import 'package:location/utils/mmkv_util.dart';
  7. import '../api/request/message_request.dart';
  8. import '../api/request/operation_friend_request.dart';
  9. import '../api/request/request_friendlist_request.dart';
  10. import '../api/response/message_response.dart';
  11. import '../api/response/request_friend_list_response.dart';
  12. import '../bean/request_friend_info.dart';
  13. @lazySingleton
  14. class MessageRepository {
  15. static final String _lastReadMessageId = 'last_read_message_id';
  16. final AtmobApi atmobApi;
  17. bool isRefreshing = false;
  18. Rxn<RequestFriendInfo> latestFriendRequest = Rxn<RequestFriendInfo>();
  19. RxInt waitingCount = RxInt(0);
  20. RxBool hasUnreadMessage = RxBool(false);
  21. int lastReadMessageId = 0;
  22. int lastMessageId = 0;
  23. MessageRepository(this.atmobApi) {
  24. lastReadMessageId = KVUtil.getInt(_lastReadMessageId, 0);
  25. refreshFriendWaitingCount();
  26. refreshUnreadMessage();
  27. }
  28. static MessageRepository getInstance() {
  29. return getIt.get<MessageRepository>();
  30. }
  31. void refreshFriendWaitingCount() {
  32. if (isRefreshing) {
  33. return;
  34. }
  35. isRefreshing = true;
  36. getRequestWaitingList().whenComplete(() {
  37. isRefreshing = false;
  38. });
  39. }
  40. Future<RequestFriendListResponse> getRequestWaitingList() {
  41. return atmobApi
  42. .getRequestWaitingList(RequestFriendListRequest())
  43. .then(HttpHandler.handle(true))
  44. .then((data) {
  45. if (data.list == null || data.list!.isEmpty) {
  46. latestFriendRequest.value = null;
  47. } else {
  48. latestFriendRequest.value = data.list!.first;
  49. }
  50. waitingCount.value = data.count;
  51. _updateHasUnreadMessage();
  52. return data;
  53. });
  54. }
  55. Future<RequestFriendListResponse> getRequestFriendList() {
  56. return atmobApi
  57. .getRequestFriendList(RequestFriendListRequest())
  58. .then(HttpHandler.handle(true));
  59. }
  60. void clearMessage() {
  61. latestFriendRequest.value = null;
  62. waitingCount.value = 0;
  63. hasUnreadMessage.value = false;
  64. }
  65. Future<MessageResponse> getMessageList() {
  66. return atmobApi
  67. .getMessageList(MessageRequest())
  68. .then(HttpHandler.handle(true))
  69. .then((response) {
  70. if (response.list != null && response.list!.isNotEmpty) {
  71. lastMessageId = response.list!.first.id;
  72. }
  73. _updateHasUnreadMessage();
  74. return response;
  75. });
  76. }
  77. Future<void> acceptFriendAccept(int friendId) {
  78. return atmobApi
  79. .acceptFriendAccept(OperationFriendRequest(friendId))
  80. .then(HttpHandler.handle(true))
  81. .then((_) => refreshFriendWaitingCount());
  82. }
  83. Future<void> refuseFriendAccept(int friendId) {
  84. return atmobApi
  85. .refuseFriendAccept(OperationFriendRequest(friendId))
  86. .then(HttpHandler.handle(true))
  87. .then((_) => refreshFriendWaitingCount());
  88. }
  89. void updateLastReadMessageId(int messageId) {
  90. if (messageId == lastReadMessageId || messageId == 0) {
  91. return;
  92. }
  93. lastReadMessageId = messageId;
  94. KVUtil.putInt(_lastReadMessageId, messageId);
  95. _updateHasUnreadMessage();
  96. }
  97. void refreshUnreadMessage() {
  98. getMessageList();
  99. }
  100. void _updateHasUnreadMessage() {
  101. if (waitingCount.value > 0 ||
  102. (lastMessageId != 0 &&
  103. lastReadMessageId != 0 &&
  104. lastReadMessageId != lastMessageId)) {
  105. hasUnreadMessage.value = true;
  106. } else {
  107. hasUnreadMessage.value = false;
  108. }
  109. }
  110. }