From b33e0834c04fd8aa364daee9aa399b688a4577cd Mon Sep 17 00:00:00 2001 From: zdc Date: Mon, 13 Apr 2020 17:13:34 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A4=84=E7=90=86=E4=BA=BA=E5=B7=A5=E7=BF=BB?= =?UTF-8?q?=E8=AF=91=E5=A4=B1=E8=B4=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/chat/ChatPageItem.dart | 24 ++++- lib/chat/download_item.dart | 16 +++- lib/chat/group_chat_item.dart | 23 ++++- lib/models/ChatMsg.dart | 53 ++++++----- lib/utils/msgHandler.dart | 162 +++++++++++++++------------------- 5 files changed, 159 insertions(+), 119 deletions(-) diff --git a/lib/chat/ChatPageItem.dart b/lib/chat/ChatPageItem.dart index 1f78cf0..f87ff7d 100644 --- a/lib/chat/ChatPageItem.dart +++ b/lib/chat/ChatPageItem.dart @@ -137,8 +137,18 @@ class _ChatPageItemState extends State if (msg.time == widget.msg.time) { if (mounted) { updateTextList(); - if (!mounted) { - return; + + if (msg.transTag == 5 || msg.transTag == 6) { + print('人工翻译失败'); + //更新最新的金额 + HttpUtil().getWealth(context, (data) { + if (mounted) { + Provider.of(context) + .initMoney(data['CoinValue']); + Provider.of(context) + .initVoucher(data['Voucher']); + } + }); } setState(() { print('更新翻译文字'); @@ -1099,6 +1109,16 @@ class _ChatPageItemState extends State curTextType %= textList.length; }); }); + } else if (transTag == 5 || transTag == 6) { + //人工翻译失败 + userTranslateWidget = _translateItemWidget(0xe670, '人工翻译失败', null); + machineTranslateWidget = + _translateItemWidget(0xe671, I18n.of(context).robot_retranslate, () { + setState(() { + curTextType += 1; + curTextType %= textList.length; + }); + }); } else if (transTag == 4 || transTag == 10) { //4人工翻译完成,未评论 10人工翻译完成已评论 userTranslateWidget = InkWell( diff --git a/lib/chat/download_item.dart b/lib/chat/download_item.dart index cdddc69..f616195 100644 --- a/lib/chat/download_item.dart +++ b/lib/chat/download_item.dart @@ -77,7 +77,13 @@ class _DownloadItemState extends State { _downloadWidget() { if (widget.msg.localFile != null) { if (widget.msg.msgType == ChatType.ShortVideoChatType.value) { - return Icon(Icons.play_circle_outline, color: Colors.white); + return Container( + padding: EdgeInsets.all(5), + decoration: BoxDecoration( + color: Colors.grey.withAlpha(150), + borderRadius: BorderRadius.circular(8)), + child: Icon(Icons.play_circle_outline, color: Colors.white70), + ); } } else { if (widget.msg.state == MsgState.DownloadFailed) { @@ -118,7 +124,13 @@ class _DownloadItemState extends State { ); } else if (widget.msg.state < MsgState.Downloading) { if (widget.msg.msgType == ChatType.ShortVideoChatType.value) { - return Icon(Icons.play_circle_outline, color: Colors.white); + return Container( + padding: EdgeInsets.all(5), + decoration: BoxDecoration( + color: Colors.grey.withAlpha(150), + borderRadius: BorderRadius.circular(8)), + child: Icon(Icons.play_circle_outline, color: Colors.white70), + ); } } } diff --git a/lib/chat/group_chat_item.dart b/lib/chat/group_chat_item.dart index a29f525..1bef1a3 100644 --- a/lib/chat/group_chat_item.dart +++ b/lib/chat/group_chat_item.dart @@ -136,8 +136,17 @@ class _GroupChatPageItemState extends State if (msg.time == widget.msg.time) { if (mounted) { updateTextList(); - if (!mounted) { - return; + if (msg.transTag == 5 || msg.transTag == 6) { + print('人工翻译失败'); + //更新最新的金额 + HttpUtil().getWealth(context, (data) { + if (mounted) { + Provider.of(context) + .initMoney(data['CoinValue']); + Provider.of(context) + .initVoucher(data['Voucher']); + } + }); } setState(() { print('更新翻译文字'); @@ -1084,6 +1093,16 @@ class _GroupChatPageItemState extends State curTextType %= textList.length; }); }); + } else if (transTag == 5 || transTag == 6) { + //人工翻译失败 + userTranslateWidget = _translateItemWidget(0xe670, '人工翻译失败', null); + machineTranslateWidget = + _translateItemWidget(0xe671, I18n.of(context).robot_retranslate, () { + setState(() { + curTextType += 1; + curTextType %= textList.length; + }); + }); } else if (transTag == 4 || transTag == 10) { //4人工翻译完成,未评论 10人工翻译完成已评论 userTranslateWidget = InkWell( diff --git a/lib/models/ChatMsg.dart b/lib/models/ChatMsg.dart index 863cb32..d6abe83 100644 --- a/lib/models/ChatMsg.dart +++ b/lib/models/ChatMsg.dart @@ -141,31 +141,36 @@ class MsgModel { //获得翻译的结果数组 getTransTextList() { List textList = []; + if (translateContent != null && translateContent.length > 0) { - try { - var transTxt = utf8.decode(translateContent); - if (transTxt.contains('[ ')) { - transTxt = transTxt.replaceAll('[ ', '['); - } - if (transTxt.contains(' ]')) { - transTxt = transTxt.replaceAll(' ]', ']'); - } + if (transTag == 5 || transTag == 6) { + print('人工翻译失败'); + } else { + try { + var transTxt = utf8.decode(translateContent); + if (transTxt.contains('[ ')) { + transTxt = transTxt.replaceAll('[ ', '['); + } + if (transTxt.contains(' ]')) { + transTxt = transTxt.replaceAll(' ]', ']'); + } - print('翻译结果:$transTxt'); + print('翻译结果:$transTxt'); - if (altUsers != null && altUsers.length > 0) { - var alterStr = ''; - for (var i = 0; i < altUsers.length; i++) { - var name = GroupInfoMgr().getGroupFdName(sessionId, altUsers[i]); - alterStr = '@$name $alterStr'; + if (altUsers != null && altUsers.length > 0) { + var alterStr = ''; + for (var i = 0; i < altUsers.length; i++) { + var name = GroupInfoMgr().getGroupFdName(sessionId, altUsers[i]); + alterStr = '@$name $alterStr'; + } + transTxt = '$alterStr $transTxt'; } - transTxt = '$alterStr $transTxt'; - } - textList.add(transTxt); - } catch (e) { - var origin = utf8.decode(msgContent); - print('译文异常,原文 $origin 发送人 $from 发送时间$time'); + textList.add(transTxt); + } catch (e) { + var origin = utf8.decode(msgContent); + print('译文异常,原文 $origin 发送人 $from 发送时间$time'); + } } } @@ -277,10 +282,10 @@ class MsgModel { } return { - 'SendTime' : - DateUtils().getFormartData(timeSamp: time, format: 'yyyy:MM:dd hh:mm:ss'); - 'Content' : desc, - 'UserId':from + 'SendTime': DateUtils() + .getFormartData(timeSamp: time, format: 'yyyy:MM:dd hh:mm:ss'), + 'Content': desc, + 'UserId': from }; } } diff --git a/lib/utils/msgHandler.dart b/lib/utils/msgHandler.dart index 87ebdea..2484d3b 100644 --- a/lib/utils/msgHandler.dart +++ b/lib/utils/msgHandler.dart @@ -125,12 +125,12 @@ class MsgHandler { static createSendMsg(ChatType chatType, content, {int extra, - int friendId, - String localFile, - MsgModel refMsg, - String refShortTxt, - List altUsers, - ChatChannelType channelType = ChatChannelType.Session}) { + int friendId, + String localFile, + MsgModel refMsg, + String refShortTxt, + List altUsers, + ChatChannelType channelType = ChatChannelType.Session}) { MsgModel msg; if (content is String) { @@ -248,7 +248,7 @@ class MsgHandler { seq.channelType = ChatChannelType.CSD; } else { seq.channelType = - isGroup ? ChatChannelType.Group : ChatChannelType.Session; + isGroup ? ChatChannelType.Group : ChatChannelType.Session; } NetWork().sendMsg(ComId.Chat, 5, seq); @@ -258,7 +258,6 @@ class MsgHandler { static int mLastClickTime = 0; static int timeInterval = 2500; static handlerReceiveMsg(PushChat chat) async { - bool isGroup = false; bool isTranslateHK = false; if (chat.channelType == ChatChannelType.Group) { @@ -267,7 +266,7 @@ class MsgHandler { } else if (chat.channelType == ChatChannelType.TransHK) { print('聊天管家消息'); isTranslateHK = true; - }else if (chat.channelType == ChatChannelType.CSD) { + } else if (chat.channelType == ChatChannelType.CSD) { print('反馈消息'); } @@ -276,6 +275,7 @@ class MsgHandler { //更新消息 print('服务器更新消息'); + MsgModel findMsg; int sessionId = chat.targetId; var msgList; @@ -305,6 +305,7 @@ class MsgHandler { ChatDataMgr().updateLastMsgWithTranslateMsg(chat); SqlUtil().updateUserTranslateContent(chat.targetId, chat.sendTime.toInt(), chat.humanTranslate, chat.translateState); + MessageMgr().emit('Update Translate Message', findMsg); } else if (chat.translateState == 3 || chat.translateState == 2) { print('机器翻译结果更新'); @@ -318,10 +319,17 @@ class MsgHandler { chat.tencentTranslate, chat.googleTranslate, chat.translateState); - } + MessageMgr().emit('Update Translate Message', findMsg); + } else if (chat.translateState == 5 || chat.translateState == 6) { + //5翻译失败,6翻译跳过 + print('人工翻译结果更新${chat.targetId},${chat.translateState}'); + findMsg.translateContent = chat.humanTranslate; - MessageMgr().emit('Update Translate Message', findMsg); - }else{ + SqlUtil().updateUserTranslateContent(chat.targetId, + chat.sendTime.toInt(), chat.humanTranslate, chat.translateState); + MessageMgr().emit('Update Translate Message', findMsg); + } + } else { debugPrint2('更新消息找不到!!!!!!'); } } else { @@ -420,51 +428,46 @@ class MsgHandler { } } else if (isTranslateHK) { var myId = UserData().basicInfo.userId; - TransHKChatNotice notice = TransHKChatNotice.fromBuffer(chat.contentBuff); - BaseUserInfo friendId ; - TranslateHKMgr().isUser = myId== notice.employer.id; ///判断自己是翻译官还是用户 + TransHKChatNotice notice = + TransHKChatNotice.fromBuffer(chat.contentBuff); + BaseUserInfo friendId; + TranslateHKMgr().isUser = myId == notice.employer.id; + + ///判断自己是翻译官还是用户 - if(myId== notice.employer.id){ - friendId =notice.inter; - }else{ + if (myId == notice.employer.id) { + friendId = notice.inter; + } else { friendId = notice.employer; } - print('friend id: ${friendId.id} '); print('结束chat.sendTime ${chat.sendTime}'); int sessionId = chat.targetId; if (chat.cType == ChatType.GroupChatNoticeType) { - msgModel = MsgModel(0, friendId.id, chat.cType.value, chat.contentBuff, chat.sendTime.toInt(), sessionId, channelType: ChatChannelType.Session.value); } ///接到开始翻译管家消息-打开翻译管家聊天页面 - if(notice.noticeType==TransHKChatNoticeType.StartChat){ - - if(ChatPage.isChatPageActive){ + if (notice.noticeType == TransHKChatNoticeType.StartChat) { + if (ChatPage.isChatPageActive) { Navigator.of(context).pop(); } - - - Future.delayed(Duration(seconds: 1),(){ + Future.delayed(Duration(seconds: 1), () { TranslateHKMgr().orderStatus = TranslateHKMgr.ORDER_STATUS_EMPTY; - MessageMgr().emit(MessageMgr.TRANSLATE_HK_REFRESH_ORDER ); + MessageMgr().emit(MessageMgr.TRANSLATE_HK_REFRESH_ORDER); curActiveSession = sessionId; print('curActiveSession:$curActiveSession'); - MessageMgr().emit(MessageMgr.TRANSLATE_HK_START_CHAT, friendId.id); + MessageMgr() + .emit(MessageMgr.TRANSLATE_HK_START_CHAT, friendId.id); }); - - }else if(notice.noticeType==TransHKChatNoticeType.EndChat){ + } else if (notice.noticeType == TransHKChatNoticeType.EndChat) { print('chat.contentBuff cccc'); MessageMgr().emit(MessageMgr.TRANSLATE_HK_END_CHAT, friendId.id); - - - } } else { //私聊通知消息 @@ -509,7 +512,9 @@ class MsgHandler { showGroup = groupInfo.messageFree == 0; } - bool isAt = false;///@的消息无论开不开群打扰都要显示推送 + bool isAt = false; + + ///@的消息无论开不开群打扰都要显示推送 if (chat.altUserIds.length > 0) { print('存在@消息'); msgModel.altUsers = chat.altUserIds; @@ -523,8 +528,6 @@ class MsgHandler { } } - - if (showGroup || isAt) { int nowTime = DateTime.now().millisecondsSinceEpoch; @@ -618,7 +621,8 @@ class MsgHandler { debugPrint2('消息为空,无法保存'); return; } - debugPrint2('收到消息,准备保存 会话Id:${msgModel.sessionId} friendId: ${msgModel.friendId} ChatType: ${msgModel.channelType}'); + debugPrint2( + '收到消息,准备保存 会话Id:${msgModel.sessionId} friendId: ${msgModel.friendId} ChatType: ${msgModel.channelType}'); // showToast('收到消息,准备保存 会话Id:${msgModel.sessionId} friendId: ${msgModel.friendId} ChatType: ${msgModel.channelType}'); ChatDataMgr().saveMsg(msgModel); if (msgModel.msgType == ChatType.ShortVoiceChatType.value) { @@ -863,8 +867,7 @@ class MsgHandler { ChatDataMgr().updateRecordWithUnreadMsg(noticeList); } - - static int msgCount=0; + static int msgCount = 0; static handlerServerMsg(int comId, int msgId, List content) { switch (comId) { @@ -947,10 +950,9 @@ class MsgHandler { LocalNotificationUtil.instance .show(I18n.of(context).notice, I18n.of(context).new_video_msg); playAudioRing(); - if(TranslateHKMgr().order==null){ + if (TranslateHKMgr().order == null) { MessageMgr().emit('Receive AudioChat Request', friendId); } - } } else if (msgId == 14) { var msgContent = PushRealtimeCallRespond.fromBuffer(content); @@ -1014,13 +1016,13 @@ class MsgHandler { handlerCancelTranslateOrder(content); } else if (msgId == 20) { handlerDeliveryInterpreterOrderPush(content); - }else if(msgId==21){ + } else if (msgId == 21) { handlerCancellationTransHKOrderPush(content); - }else if(msgId==8){ + } else if (msgId == 8) { handlerEndTransHKOrderRes(content); - }else if(msgId==10){ + } else if (msgId == 10) { handlerTransHKInterSetIsReceiptRes(content); - }else if(msgId==31){ + } else if (msgId == 31) { handlerAnotherOrderRes(content); } break; @@ -1034,7 +1036,7 @@ class MsgHandler { switch (type) { case 'notice': - ///由于极光本地推送点击事件无反应,暂时不走这,由远端推 + ///由于极光本地推送点击事件无反应,暂时不走这,由远端推 String messageJson = map['message']; Map messageMap = json.decode(messageJson); @@ -1168,9 +1170,9 @@ class MsgHandler { Navigator.pushReplacement(context, MaterialPageRoute(builder: (BuildContext context) { - return GroupChatPage( - key: Key('GroupChat'), groupInfoModel: groupInfoModel); - })); + return GroupChatPage( + key: Key('GroupChat'), groupInfoModel: groupInfoModel); + })); } else { switch (res.errorCode) { case 3007: @@ -1311,10 +1313,11 @@ class MsgHandler { } //发布翻译管家帮助订单 - static sendCreateTranslateOrder(int fromLanguage,int toLanguage,int scences,String extraDesc) { - - TranslateHKMgr().isUser=true; - debugPrint2('发布翻译管家帮助订单 fromLanguage:$fromLanguage toLanguage: $toLanguage | ${fromLanguage|toLanguage}' ); + static sendCreateTranslateOrder( + int fromLanguage, int toLanguage, int scences, String extraDesc) { + TranslateHKMgr().isUser = true; + debugPrint2( + '发布翻译管家帮助订单 fromLanguage:$fromLanguage toLanguage: $toLanguage | ${fromLanguage | toLanguage}'); var seq = IssueTransHKOrderReq.create(); seq.tLanguage = fromLanguage | toLanguage; seq.scenes = scences; @@ -1337,30 +1340,25 @@ class MsgHandler { } else { debugPrint2('发布翻译管家帮助订单失败 ${res.errorCode}'); - String errorStr=I18n.of(context).translation_butler_order_failed; - switch(res.errorCode){ + String errorStr = I18n.of(context).translation_butler_order_failed; + switch (res.errorCode) { case 5014: case 5014: - errorStr=I18n.of(context).translation_butler_order_failed2; + errorStr = I18n.of(context).translation_butler_order_failed2; break; case 5015: - errorStr=I18n.of(context).not_enough; + errorStr = I18n.of(context).not_enough; break; } - showToast('$errorStr -${res.errorCode}',duration: Duration(seconds: 3)); + showToast('$errorStr -${res.errorCode}', duration: Duration(seconds: 3)); TranslateHKMgr().orderStatus = TranslateHKMgr.ORDER_STATUS_EMPTY; MessageMgr().emit(MessageMgr.TRANSLATE_HK_REFRESH_ORDER); - } } - - - //翻译官开启/关闭接收订单 static translateReceiptOrStopOrder(bool isReceipt) { - - debugPrint2('翻译官开启/关闭接收订单 请求 $isReceipt' ); + debugPrint2('翻译官开启/关闭接收订单 请求 $isReceipt'); var seq = TransHKInterSetIsReceiptReq.create(); seq.isReceipt = isReceipt; @@ -1372,7 +1370,8 @@ class MsgHandler { debugPrint2('翻译官开启/关闭接收订单 回应'); var res = TransHKInterSetIsReceiptRes.fromBuffer(msgContent); if (res.errorCode == 0) { - MessageMgr().emit(MessageMgr.TRANSLATE_HK_IS_RECEIVED_ORDER,res.isReceipt); + MessageMgr() + .emit(MessageMgr.TRANSLATE_HK_IS_RECEIVED_ORDER, res.isReceipt); debugPrint2('翻译官开启/关闭接收订单 回应成功: ${res.isReceipt}'); } else { @@ -1380,7 +1379,6 @@ class MsgHandler { } } - //撤销订单消息 static sendCancelTranslateOrder() { debugPrint2('取消订单 orderid:${TranslateHKMgr().orderId}'); @@ -1409,31 +1407,28 @@ class MsgHandler { 'OrderId: ${res.orderId} createTime: ${res.createTime} tLanguage:${res.tLanguage} scenes:${res.scenes} desc${res.desc}'); TranslateOrder order = new TranslateOrder(); - order.orderId=res.orderId; - order.desc=res.desc; - order.createTime=res.createTime.toInt(); - order.tLanguage=res.tLanguage.toInt(); - order.scenes=res.scenes.toInt(); + order.orderId = res.orderId; + order.desc = res.desc; + order.createTime = res.createTime.toInt(); + order.tLanguage = res.tLanguage.toInt(); + order.scenes = res.scenes.toInt(); order.userName = res.employer.niceName; TranslateHKMgr().order = order; MessageMgr().emit(MessageMgr.TRANSLATE_HK_RECEIVE_ORDER, order); - } //派送订单已被取消 static handlerCancellationTransHKOrderPush(List msgContent) { - var res = CancellationTransHKOrderPush.fromBuffer(msgContent); debugPrint2('派送订单已被取消: orderId${res.orderId}'); // print('OrderId: ${res.orderId} createTime: ${res.createTime} tLanguage:${res.tLanguage} scenes:${res.scenes} desc${res.desc}'); TranslateHKMgr().order = null; MessageMgr().emit(MessageMgr.TRANSLATE_HK_CANCEL_ORDER); - showToast(I18n.of(context).translation_butler_order_time_out,duration: Duration(seconds: 3)); + showToast(I18n.of(context).translation_butler_order_time_out, + duration: Duration(seconds: 3)); } - - //接收订单请求 static sendReceiveOrder() { TranslateOrder order = TranslateHKMgr().order; @@ -1456,12 +1451,9 @@ class MsgHandler { } } - - - //用户发送再来一单请求 static sendAnotherOrderReq() { - debugPrint2('用户发送再来一单请求 orderId:${ TranslateHKMgr().orderId}'); + debugPrint2('用户发送再来一单请求 orderId:${TranslateHKMgr().orderId}'); var seq = AnotherOrderReq.create(); seq.orderId = TranslateHKMgr().orderId; @@ -1481,11 +1473,9 @@ class MsgHandler { } } - //用户主动结束翻译管家服务 static sendEndTransHKOrderReq() { - - debugPrint2('用户主动结束翻译管家服务 ${TranslateHKMgr().orderId}' ); + debugPrint2('用户主动结束翻译管家服务 ${TranslateHKMgr().orderId}'); var seq = EndTransHKOrderReq.create(); seq.orderId = TranslateHKMgr().orderId; NetWork().sendMsg(ComId.TranslateOrder, 7, seq); @@ -1496,7 +1486,6 @@ class MsgHandler { debugPrint2('用户主动结束翻译管家服务'); var res = EndTransHKOrderRes.fromBuffer(msgContent); if (res.errorCode == 0) { - // GroupInfoMgr().updateMemberMsgFree(res.groupId, res.messageFree); debugPrint2('用户主动结束翻译管家服务 成功: '); } else { @@ -1504,11 +1493,6 @@ class MsgHandler { } } - - - - - //消息免打扰请求结果 static handlerGroupIsShowMenberNiceName(List msgContent) { print('设置是否显示群昵称');