|
- import 'package:chat/models/ChatMsg.dart';
- import 'package:chat/models/last_message_model.dart';
- import 'package:chat/proto/all.pbserver.dart';
- import 'package:chat/utils/MessageMgr.dart';
- import 'package:flutter/material.dart';
-
- class LastMsgProvider with ChangeNotifier {
- List<LastMessageModel> lastMsgList = [];
-
- addMsg(MsgModel msgModel) {
- var lastMsg = getLastRecordBy(msgModel.sessionId);
-
- //服务器消息优先级高
- if (lastMsg == null) {
- lastMsg = LastMessageModel.fromChatMsg(msgModel);
- lastMsgList.insert(0, lastMsg);
-
- if (msgModel.channelType == ChatChannelType.Group.value) {
- MessageMgr().emit('Update Group List');
- } else {
- MessageMgr().emit('Update LastMsg',lastMsg.sessionId);
- }
- }
- }
-
-
- sortLastMsg() {
- lastMsgList.sort((b, a) => a.updateAt.compareTo(b.updateAt));
- }
-
- updateLastMsg(MsgModel msgModel) {
- var lastMsg = getLastRecordBy(msgModel.sessionId);
-
- if (lastMsg != null) {
- //更新
- lastMsg.updateWithMessage(msgModel);
- lastMsgList.sort((b, a) => a.updateAt.compareTo(b.updateAt));
- } else {
- lastMsg = LastMessageModel.fromChatMsg(msgModel);
- lastMsgList.insert(0, lastMsg);
- }
-
- if (msgModel.channelType == ChatChannelType.Group.value) {
- MessageMgr().emit('Update Group List');
- } else {
- MessageMgr().emit('Update LastMsg',lastMsg.sessionId);
- }
- }
-
- updateWithTranslateMsg(PushChat chat) {
- //更新
- if (chat.cType == ChatType.TextChatType) {
- print('更新最新数据的翻译结果');
- var lastMsg = getLastRecordBy(chat.targetId);
-
- if (lastMsg != null && chat.hasTencentTranslate()) {
- lastMsg.msgContent = chat.tencentTranslate;
- }
-
- if (chat.channelType == ChatChannelType.Group) {
- MessageMgr().emit('Update Group List');
- } else {
- MessageMgr().emit('Update LastMsg',lastMsg.sessionId);
- }
- }
- }
-
- addUnreadMsg(UserUnreadMsgNotice unread) {
- var lastMsg = getLastRecordBy(unread.targetId);
- if (lastMsg == null) {
- lastMsg = LastMessageModel.fromUnreadMsg(unread);
- lastMsgList.insert(0, lastMsg);
-
- //可能是新增的用户
-
- } else {
- lastMsg.updateWithUnreadMsg(unread);
- lastMsgList.sort((b, a) => a.updateAt.compareTo(b.updateAt));
- }
-
- if (unread.channelType == ChatChannelType.Group) {
- MessageMgr().emit('Update Group List');
- } else {
- MessageMgr().emit('Update LastMsg',lastMsg.sessionId);
- }
- }
-
-
- deleteMsg(LastMessageModel msgModel) {
- lastMsgList.remove(msgModel);
- if (msgModel.channelType == ChatChannelType.Group.value) {
- MessageMgr().emit('Update Group List');
- } else {
- MessageMgr().emit('Update LastMsg',msgModel.sessionId);
- }
- }
-
- LastMessageModel getLastRecordBy(int sessionId) {
- for (var i = 0; i < lastMsgList.length; i++) {
- var lastMsg = lastMsgList[i];
- if (lastMsg.sessionId == sessionId) {
- return lastMsg;
- }
- }
-
- return null;
- }
-
- clear() {
- lastMsgList.clear();
- }
- }
|