From f3e091f76b723d96b712457a0f67280ab51ad3a5 Mon Sep 17 00:00:00 2001 From: zdc Date: Mon, 13 Apr 2020 09:56:09 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BA=BA=E5=B7=A5=E7=BF=BB=E8=AF=91=E5=8D=8F?= =?UTF-8?q?=E8=AE=AE=E5=A2=9E=E5=8A=A0=E5=89=8D3=E6=9D=A1=E8=AE=B0?= =?UTF-8?q?=E5=BD=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/data/chat_data_mgr.dart | 34 +++++++++++++++ lib/models/ChatMsg.dart | 87 +++++++++++++++++++++++++++++++++++++ lib/utils/HttpUtil.dart | 3 ++ 3 files changed, 124 insertions(+) diff --git a/lib/data/chat_data_mgr.dart b/lib/data/chat_data_mgr.dart index 956bfdb..0000f3f 100644 --- a/lib/data/chat_data_mgr.dart +++ b/lib/data/chat_data_mgr.dart @@ -1,3 +1,5 @@ +import 'dart:math'; + import 'package:chat/data/group_data_mgr.dart'; import 'package:chat/models/ChatMsg.dart'; import 'package:chat/models/last_msg_provider.dart'; @@ -112,6 +114,38 @@ class ChatDataMgr { return record; } + //获取该记录之前的前3条聊天记录 + getForeChatRecord(MsgModel msgModel) { + List res = []; + + List record; + if (msgModel.channelType == ChatChannelType.Group.value) { + record = groupRecordMap[msgModel.sessionId]; + } else { + record = msgRecordMap[msgModel.sessionId]; + } + + int curIndex = 0; + if (record != null && record.length > 0) { + for (var i = 0; i < record.length; i++) { + if (record[i].time == msgModel.time) { + curIndex = i; + break; + } + } + } + + int maxLen = min(curIndex + 1, record.length); + + for (var i = curIndex + 1; i < maxLen; i++) { + var shortDesc = record[i].shortRecordForTranslator(); + print(shortDesc); + res.add(shortDesc); + } + + return res; + } + //获取企业号聊天记录 List getCompanyRecord() { var record = msgRecordMap[MsgHandler.curActiveSession]; diff --git a/lib/models/ChatMsg.dart b/lib/models/ChatMsg.dart index b8162cf..863cb32 100644 --- a/lib/models/ChatMsg.dart +++ b/lib/models/ChatMsg.dart @@ -1,10 +1,17 @@ import 'dart:typed_data'; import 'dart:convert'; +import 'package:chat/data/UserData.dart'; +import 'package:chat/data/constants.dart'; +import 'package:chat/generated/i18n.dart'; +import 'package:chat/proto/chat.pb.dart'; import 'package:chat/proto/chat.pbenum.dart'; +import 'package:chat/proto/transhousekeeper.pb.dart'; +import 'package:chat/utils/date_utils.dart'; import 'package:chat/utils/file_cache_mgr.dart'; import 'package:chat/utils/sql_util.dart'; import 'package:chat/data/group_data_mgr.dart'; +import 'package:chat/utils/upload_util.dart'; class MsgState { static const int None = 0; //默认 @@ -196,4 +203,84 @@ class MsgModel { return textList.length == 0 ? [''] : textList; } + + getFileUrl() { + var fullUrl = UploadUtil().getFullUrl(extraFile, sessionId, channelType); + if (extraFile.contains('http://')) { + fullUrl = extraFile; + } + + return fullUrl; + } + + //发送给翻译人员的记录 + shortRecordForTranslator() { + String desc = ''; + switch (ChatType.valueOf(msgType)) { + case ChatType.TextChatType: + desc = utf8.decode(msgContent); + break; + case ChatType.EmoticonType: + desc = '[${I18n.of(Constants.getCurrentContext()).emoji}]'; + break; + case ChatType.ImageChatType: + case ChatType.ShortVideoChatType: + case ChatType.ShortVoiceChatType: + case ChatType.FileChatType: + desc = getFileUrl(); + break; + + case ChatType.PlaceChatType: + desc = '[${I18n.of(Constants.getCurrentContext()).locate}]'; + break; + + case ChatType.GiftChatType: + GiftChat giftChat = GiftChat.fromBuffer(msgContent); + + if (giftChat.tuId == UserData().basicInfo.userId) { + desc = I18n.of(Constants.getCurrentContext()).you_get; + } else { + desc = I18n.of(Constants.getCurrentContext()).you_give; + } + + break; + + case ChatType.RedWalletChatType: + if (from == 0) { + //服务器通知消息 + RedWallet wallet = RedWallet.fromBuffer(msgContent); + if (wallet.state == RedWalletState.Received) { + var myId = UserData().basicInfo.userId; + if (wallet.suId == myId) { + desc = I18n.of(Constants.getCurrentContext()) + .get_money + .replaceFirst('/s1', '好友'); + } else { + desc = I18n.of(Constants.getCurrentContext()) + .you_get_money + .replaceFirst('/s1', '好友'); + } + } else if (wallet.state == RedWalletState.Expire) { + desc = I18n.of(Constants.getCurrentContext()).money_over; + } else { + print('WWWWW${wallet.state}'); + } + } else { + desc = '[${I18n.of(Constants.getCurrentContext()).red_money}]'; + } + break; + + case ChatType.GroupChatNoticeType: + desc = '群聊通知消息'; + break; + default: + } + + return { + 'SendTime' : + DateUtils().getFormartData(timeSamp: time, format: 'yyyy:MM:dd hh:mm:ss'); + 'Content' : desc, + 'UserId':from + }; + } } diff --git a/lib/utils/HttpUtil.dart b/lib/utils/HttpUtil.dart index 35d40a1..db8c47b 100644 --- a/lib/utils/HttpUtil.dart +++ b/lib/utils/HttpUtil.dart @@ -1083,6 +1083,7 @@ class HttpUtil { } } + //付费人工翻译 getPersonalTranslate(MsgModel msgModel) async { Map data = { @@ -1107,6 +1108,8 @@ class HttpUtil { data['vcontent'] = base64Encode(msgModel.enTranslateContent); } + data['list'] = ChatDataMgr().getForeChatRecord(msgModel); + data["tuserids"] = [UserData().basicInfo.userId]; data['duration'] = msgModel.extraInfo != null ? msgModel.extraInfo ~/ 1000 : 0;