@@ -7,5 +7,5 @@ export "FLUTTER_BUILD_DIR=build" | |||
export "SYMROOT=${SOURCE_ROOT}/../build/ios" | |||
export "FLUTTER_FRAMEWORK_DIR=/Users/random/sdk/flutter_sdk/bin/cache/artifacts/engine/ios" | |||
export "FLUTTER_BUILD_NAME=1.0.9" | |||
export "FLUTTER_BUILD_NUMBER=13" | |||
export "FLUTTER_BUILD_NUMBER=14" | |||
export "TRACK_WIDGET_CREATION=true" |
@@ -365,12 +365,6 @@ class _ChatPageState extends State<ChatPage> { | |||
widget.isTranslateButler | |||
? _buildTranslationButler() | |||
: Container(), | |||
widget.isTranslateButler | |||
? _buildServiceCard(true, () {}) | |||
: Container(), | |||
widget.isTranslateButler | |||
? _buildServiceCard(false, () {}) | |||
: Container(), | |||
Expanded(child: _buildMessageList()), | |||
InputBar(sendMsg: sendMsg), | |||
], | |||
@@ -396,8 +390,8 @@ class _ChatPageState extends State<ChatPage> { | |||
); | |||
}, | |||
))), | |||
widget.isTranslateButler ? getAudioChatView() : Container(), | |||
widget.isTranslateButler ? zoomAudioButton() : Container() | |||
// widget.isTranslateButler ? getAudioChatView() : Container(), | |||
// widget.isTranslateButler ? zoomAudioButton() : Container() | |||
], | |||
); | |||
} | |||
@@ -580,7 +574,7 @@ class _ChatPageState extends State<ChatPage> { | |||
() { | |||
Navigator.of(context).pop(); | |||
}, | |||
countDownTime: 360, | |||
countDownTime: 3600, | |||
align: Alignment.centerRight, | |||
onPress: () {}, | |||
), | |||
@@ -591,67 +585,6 @@ class _ChatPageState extends State<ChatPage> { | |||
); | |||
} | |||
Widget _buildServiceCard(bool isStart, Function callBack) { | |||
return Container( | |||
margin: EdgeInsets.all(10), | |||
child: Card( | |||
elevation: 2, | |||
// 阴影 | |||
shape: RoundedRectangleBorder( | |||
borderRadius: BorderRadius.circular(10), | |||
// side: BorderSide(color: Colors.green,width: 25), | |||
), | |||
child: Padding( | |||
padding: EdgeInsets.only(left: 10, right: 10, top: 15, bottom: 15), | |||
child: Row( | |||
children: <Widget>[ | |||
Column( | |||
crossAxisAlignment: CrossAxisAlignment.start, | |||
children: <Widget>[ | |||
Text( | |||
isStart | |||
? I18n.of(context).translation_butler_start_service | |||
: I18n.of(context).translation_butler_service_end, | |||
textScaleFactor: 1.0, | |||
style: TextStyle( | |||
color: AppColors.NewAppbarTextColor, fontSize: 15), | |||
), | |||
Text( | |||
isStart | |||
? I18n.of(context).translation_butler_start_tips | |||
: I18n.of(context).translation_butler_evaluation_tips, | |||
textScaleFactor: 1.0, | |||
style: TextStyle( | |||
color: AppColors.NewAppbarTextColor, fontSize: 13), | |||
) | |||
], | |||
), | |||
isStart | |||
? Container() | |||
: Expanded( | |||
child: Container( | |||
margin: EdgeInsets.only(left: 15), | |||
height: 30, | |||
child: RaisedButton( | |||
color: Color(0xff3875E9), | |||
shape: RoundedRectangleBorder( | |||
borderRadius: | |||
BorderRadius.all(Radius.circular(10))), | |||
child: Text( | |||
I18n.of(context).translation_butler_evaluation, | |||
textScaleFactor: 1.0, | |||
style: TextStyle(color: Colors.white, fontSize: 15), | |||
), | |||
onPressed: () { | |||
CustomUI.buildTranslationEvaluationDialog(context); | |||
}), | |||
)), | |||
], | |||
), | |||
), | |||
), | |||
); | |||
} | |||
Widget _buildMessageList() { | |||
return Container( | |||
@@ -695,11 +628,16 @@ class _ChatPageState extends State<ChatPage> { | |||
} | |||
sendMsg(MsgModel msg) { | |||
// if(widget.isTranslateButler){ ///翻译管家聊天通道 | |||
// msg.channelType = ChatChannelType.TransHK.value; | |||
// } | |||
print('对方是否拉黑你 ${friendInfo.isBlackened}'); | |||
if (BlacklistMgr.isBlack(friendInfo.userId)) { | |||
return; | |||
} | |||
print('chat page session id:${msg.sessionId}'); | |||
if (!friendInfo.isCanStrangerNews && | |||
!FriendListMgr().isMyFriend(friendInfo.userId)) { | |||
showToast(I18n.of(context).stranger_close_tips); | |||
@@ -22,6 +22,7 @@ import 'package:chat/models/keyboard_provider.dart'; | |||
import 'package:chat/models/ref_name_provider.dart'; | |||
import 'package:chat/proto/chat.pbenum.dart'; | |||
import 'package:chat/proto/chat.pbserver.dart'; | |||
import 'package:chat/proto/transhousekeeper.pb.dart'; | |||
import 'package:chat/utils/CustomUI.dart'; | |||
import 'package:chat/utils/HttpUtil.dart'; | |||
import 'package:chat/utils/MessageMgr.dart'; | |||
@@ -210,6 +211,7 @@ class _ChatPageItemState extends State<ChatPageItem> | |||
} | |||
_msgWidget() { | |||
if (widget.msg.from == 0) { | |||
return _serverNotifyMsg(); | |||
} else { | |||
@@ -257,24 +259,44 @@ class _ChatPageItemState extends State<ChatPageItem> | |||
} else { | |||
///todo 翻译管家系统通知消息 | |||
print('这里应该要有翻译管家'); | |||
if (type == ChatType.GroupChatNoticeType.value && widget.msg.channelType ==ChatChannelType.Session.value) { | |||
TransHKChatNotice res = TransHKChatNotice.fromBuffer(widget.msg.msgContent); | |||
if(res.noticeType==TransHKChatNoticeType.StartChat){ | |||
///开始翻译服务 | |||
return _buildServiceCard(true, () {}); | |||
}else if(res.noticeType==TransHKChatNoticeType.EndChat){ | |||
///翻译服务结束 | |||
return _buildServiceCard(false, () {}); | |||
}else{ | |||
return Container(); | |||
} | |||
// return Container(); | |||
} | |||
// else{ | |||
// if (type == ChatType.GroupChatNoticeType.value) { | |||
// var res = GroupChatNotice.fromBuffer(widget.msg.msgContent); | |||
// | |||
// var groupInfoModel = Provider.of<GroupInfoModel>(context); | |||
// var showStr = MsgHandler.getGroupNoticeMsg(res, groupInfoModel); | |||
// return Container( | |||
// alignment: Alignment.center, | |||
// constraints: BoxConstraints(maxWidth: Screen.width - 120), | |||
// child: Text( | |||
// showStr, | |||
// textScaleFactor: 1.0, | |||
// textAlign: TextAlign.center, | |||
// style: TextStyle(color: Constants.GreyTextColor, fontSize: 12), | |||
// ), | |||
// ); | |||
// } | |||
// } | |||
if (type == ChatType.GroupChatNoticeType.value) { | |||
var res = GroupChatNotice.fromBuffer(widget.msg.msgContent); | |||
var groupInfoModel = Provider.of<GroupInfoModel>(context); | |||
var showStr = MsgHandler.getGroupNoticeMsg(res, groupInfoModel); | |||
return Container( | |||
alignment: Alignment.center, | |||
constraints: BoxConstraints(maxWidth: Screen.width - 120), | |||
child: Text( | |||
showStr, | |||
textScaleFactor: 1.0, | |||
textAlign: TextAlign.center, | |||
style: TextStyle(color: Constants.GreyTextColor, fontSize: 12), | |||
), | |||
); | |||
} | |||
} | |||
return Container(); | |||
} | |||
@@ -1048,7 +1070,7 @@ class _ChatPageItemState extends State<ChatPageItem> | |||
isAutoDown: false, | |||
msg: widget.msg, | |||
onFinishTap: (){ | |||
widget.hideKeyboard(); | |||
showFullImg(context, widget.msg); | |||
}, | |||
child: Container( | |||
@@ -1297,6 +1319,7 @@ class _ChatPageItemState extends State<ChatPageItem> | |||
void showFullImg(BuildContext context, MsgModel msg) { | |||
print('显示图片'); | |||
widget.hideKeyboard(); | |||
Navigator.push(context, | |||
MaterialPageRoute<void>(builder: (BuildContext context) { | |||
return PhotoPage(msg: msg); | |||
@@ -1399,4 +1422,70 @@ class _ChatPageItemState extends State<ChatPageItem> | |||
: Container() | |||
]); | |||
} | |||
Widget _buildServiceCard(bool isStart, Function callBack) { | |||
return Container( | |||
alignment: Alignment.center, | |||
margin: EdgeInsets.all(10), | |||
child: Card( | |||
elevation: 2, | |||
// 阴影 | |||
shape: RoundedRectangleBorder( | |||
borderRadius: BorderRadius.circular(10), | |||
// side: BorderSide(color: Colors.green,width: 25), | |||
), | |||
child: Padding( | |||
padding: EdgeInsets.only(left: 10, right: 10, top: 15, bottom: 15), | |||
child: Row( | |||
children: <Widget>[ | |||
Column( | |||
crossAxisAlignment: CrossAxisAlignment.start, | |||
children: <Widget>[ | |||
Text( | |||
isStart | |||
? I18n.of(context).translation_butler_start_service | |||
: I18n.of(context).translation_butler_service_end, | |||
textScaleFactor: 1.0, | |||
style: TextStyle( | |||
color: AppColors.NewAppbarTextColor, fontSize: 15), | |||
), | |||
Text( | |||
isStart | |||
? I18n.of(context).translation_butler_start_tips | |||
: I18n.of(context).translation_butler_evaluation_tips, | |||
textScaleFactor: 1.0, | |||
style: TextStyle( | |||
color: AppColors.NewAppbarTextColor, fontSize: 13), | |||
) | |||
], | |||
), | |||
isStart | |||
? Container() | |||
: Expanded( | |||
child: Container( | |||
margin: EdgeInsets.only(left: 15), | |||
height: 30, | |||
child: RaisedButton( | |||
color: Color(0xff3875E9), | |||
shape: RoundedRectangleBorder( | |||
borderRadius: | |||
BorderRadius.all(Radius.circular(10))), | |||
child: Text( | |||
I18n.of(context).translation_butler_evaluation, | |||
textScaleFactor: 1.0, | |||
style: TextStyle(color: Colors.white, fontSize: 15), | |||
), | |||
onPressed: () { | |||
CustomUI.buildTranslationEvaluationDialog(context); | |||
}), | |||
)), | |||
], | |||
), | |||
), | |||
), | |||
); | |||
} | |||
} |
@@ -172,7 +172,7 @@ class _CompanyServerPageState extends State<CompanyServerPage> { | |||
for (var i = 0; i < resultList.length; i++) { | |||
Asset photoEntity = resultList[i]; | |||
ByteData byteData = await photoEntity.getByteData(); | |||
File file = await FileCacheMgr().writeFile('temp-photo-${DateTime.now().millisecondsSinceEpoch}-$i', byteData.buffer.asInt8List(0)); | |||
File file = await FileCacheMgr().writeFile('temp-photo-${DateTime.now().millisecondsSinceEpoch}-${photoEntity.name}', byteData.buffer.asInt8List(0)); | |||
_sendPhotoFile(file); | |||
} | |||
} | |||
@@ -1055,7 +1055,6 @@ class _GroupChatPageItemState extends State<GroupChatPageItem> | |||
isAutoDown: false, | |||
msg: widget.msg, | |||
onFinishTap: (){ | |||
widget.hideKeyboard(); | |||
showFullImg(context, widget.msg); | |||
}, | |||
child: Container( | |||
@@ -1080,7 +1079,7 @@ class _GroupChatPageItemState extends State<GroupChatPageItem> | |||
return InkWell( | |||
onTap: () { | |||
if (widget.msg.localFile != null) { | |||
widget.hideKeyboard(); | |||
showVideoPage(context, widget.msg.localFile); | |||
} | |||
}, | |||
@@ -1101,6 +1100,7 @@ class _GroupChatPageItemState extends State<GroupChatPageItem> | |||
} | |||
showVideoPage(BuildContext context, String filePath) { | |||
widget.hideKeyboard(); | |||
Navigator.push(context, | |||
MaterialPageRoute<void>(builder: (BuildContext context) { | |||
return VideoPage(videoPath: filePath); | |||
@@ -1285,6 +1285,9 @@ class _GroupChatPageItemState extends State<GroupChatPageItem> | |||
void showFullImg(BuildContext context, MsgModel msg) { | |||
print('显示图片'); | |||
if( widget.hideKeyboard!=null){ | |||
widget.hideKeyboard(); | |||
} | |||
Navigator.push(context, | |||
MaterialPageRoute<void>(builder: (BuildContext context) { | |||
return PhotoPage(msg: msg); | |||
@@ -707,7 +707,7 @@ class InputBarState extends State<InputBar> | |||
for (var i = 0; i < resultList.length; i++) { | |||
Asset photoEntity = resultList[i]; | |||
ByteData byteData = await photoEntity.getByteData(); | |||
File file = await FileCacheMgr().writeFile('temp-photo-${DateTime.now().millisecondsSinceEpoch}-$i', byteData.buffer.asInt8List(0)); | |||
File file = await FileCacheMgr().writeFile('temp-photo-${DateTime.now().millisecondsSinceEpoch}-${photoEntity.name}', byteData.buffer.asInt8List(0)); | |||
_sendPhotoFile(file); | |||
} | |||
} | |||
@@ -93,7 +93,7 @@ class _TranslateSateWidgetState extends State<TranslateSateWidget> { | |||
if (mounted) { | |||
setState(() {}); | |||
} | |||
MsgHandler.swtichTranslateState(newState); | |||
// MsgHandler.swtichTranslateState(newState); | |||
} | |||
} | |||
@@ -121,7 +121,7 @@ class _TranslateSateWidgetState extends State<TranslateSateWidget> { | |||
translateStatus = TranslateState.valueOf(status); | |||
//同步双方翻译状态 | |||
MsgHandler.swtichTranslateState(translateStatus); | |||
// MsgHandler.swtichTranslateState(translateStatus); | |||
if (mounted) { | |||
setState(() {}); | |||
} | |||
@@ -313,6 +313,11 @@ class _UtilKeyboardState extends State<UtilKeyboard> { | |||
showToast(I18n.of(context).max_file.replaceFirst('/s1', 33.toString())); | |||
return; | |||
} | |||
///ios存在着文件夹才打得开 | |||
File newFile= await FileCacheMgr().writeFile(file.path.split('/').last, file.readAsBytesSync()); | |||
int friendId = 0; | |||
if (!widget.isGroup) { | |||
@@ -336,7 +341,7 @@ class _UtilKeyboardState extends State<UtilKeyboard> { | |||
var msg = MsgHandler.createSendMsg( | |||
ChatType.FileChatType, fileMsg.writeToBuffer(), | |||
friendId: friendId, | |||
localFile: file.path, | |||
localFile: newFile.path, | |||
channelType: | |||
widget.isGroup ? ChatChannelType.Group : ChatChannelType.Session); | |||
@@ -280,8 +280,9 @@ class ChatDataMgr { | |||
} | |||
var result = getMsgBy(msg.sessionId, msg.time, true); | |||
if (result != null) { | |||
// print('消息存在!!!!'); | |||
print('消息存在!!!!'); | |||
} else { | |||
print('插入消息!!!!'); | |||
insertToDB(msg, record); | |||
} | |||
} else { | |||
@@ -386,6 +387,7 @@ class ChatDataMgr { | |||
groupUnreadProvider.updateUnreadCount(msgModel.sessionId, 1); | |||
} | |||
} else { | |||
print('更新最后一条记录msgModel friendid :${msgModel.friendId}'); | |||
lastMsgProvider.updateLastMsg(msgModel); | |||
if (msgModel.readState == 1) { | |||
unreadCountProvider.updateUnreadCount(msgModel.sessionId, 1); | |||
@@ -0,0 +1,47 @@ | |||
import 'dart:convert'; | |||
import 'package:chat/data/UserData.dart'; | |||
import 'package:chat/data/chat_data_mgr.dart'; | |||
import 'package:chat/models/group_info_model.dart'; | |||
import 'package:chat/proto/chat.pbserver.dart'; | |||
import 'package:chat/utils/MessageMgr.dart'; | |||
import 'package:chat/utils/group_member_model.dart'; | |||
import 'package:chat/utils/sql_util.dart'; | |||
import 'package:chat/utils/upload_util.dart'; | |||
import 'package:crclib/crclib.dart'; | |||
class TranslateOrder{ | |||
String orderId; | |||
int createTime; | |||
int tLanguage; | |||
int scenes; | |||
String desc; | |||
} | |||
class TranslateHKMgr { | |||
static TranslateHKMgr _instance; | |||
factory TranslateHKMgr() => _getInstance(); | |||
TranslateHKMgr._(); | |||
static TranslateHKMgr _getInstance() { | |||
if (_instance == null) { | |||
_instance = TranslateHKMgr._(); | |||
} | |||
return _instance; | |||
} | |||
TranslateOrder order; | |||
String orderId; | |||
int waitNum=0; | |||
int orderStatus=0; | |||
static const ORDER_STATUS_EMPTY=0; ///未创建订单 | |||
static const ORDER_STATUS_WAITING=1;///等待翻译官 | |||
static const ORDER_STATUS_START=1;///翻译管家开始 | |||
} |
@@ -733,8 +733,10 @@ class _AddProgramState extends State<AddProgram> { | |||
List<File> fileList = []; | |||
for (var i = 0; i < resultList.length; i++) { | |||
Asset photoEntity = resultList[i]; | |||
print('名字:${photoEntity.name}'); | |||
ByteData byteData = await photoEntity.getByteData(); | |||
File file = await FileCacheMgr().writeFile('temp-photo-${DateTime.now().millisecondsSinceEpoch}-$i', byteData.buffer.asInt8List(0)); | |||
File file = await FileCacheMgr().writeFile('temp-photo-${DateTime.now().millisecondsSinceEpoch}-${photoEntity.name}', byteData.buffer.asInt8List(0)); | |||
fileList.add(file); | |||
} | |||
print('文件列表${fileList.length}'); | |||
@@ -204,7 +204,7 @@ class _InformUserPageState extends State<InformUserPage> { | |||
for (var i = 0; i < resultList.length; i++) { | |||
Asset photoEntity = resultList[i]; | |||
ByteData byteData = await photoEntity.getByteData(); | |||
File file = await FileCacheMgr().writeFile('temp-photo-${DateTime.now().millisecondsSinceEpoch}-$i', byteData.buffer.asInt8List(0)); | |||
File file = await FileCacheMgr().writeFile('temp-photo-${DateTime.now().millisecondsSinceEpoch}-${photoEntity.name}', byteData.buffer.asInt8List(0)); | |||
fileList.add(file); | |||
} | |||
Map data = {"type": 3, "userId": UserData().basicInfo.userId}; | |||
@@ -12,6 +12,7 @@ import 'package:chat/utils/ChargeMoney.dart'; | |||
import 'package:chat/utils/app_navigator.dart'; | |||
import 'package:chat/utils/blacklist_mgr.dart'; | |||
import 'package:chat/utils/conversation_table.dart'; | |||
import 'package:chat/utils/file_cache_mgr.dart'; | |||
import 'package:chat/utils/friend_list_mgr.dart'; | |||
import 'package:chat/utils/msgHandler.dart'; | |||
import 'package:chat/utils/screen.dart'; | |||
@@ -38,6 +39,7 @@ import 'package:flutter/services.dart'; | |||
import 'package:image_cropper/image_cropper.dart'; | |||
import 'package:image_picker/image_picker.dart'; | |||
import 'package:multi_image_picker/multi_image_picker.dart'; | |||
import 'package:oktoast/oktoast.dart'; | |||
import 'package:permission_handler/permission_handler.dart'; | |||
import 'package:photo_manager/photo_manager.dart'; | |||
@@ -429,18 +431,35 @@ class _ProfilePageState extends State<ProfilePage> | |||
// ); | |||
// } | |||
// } | |||
var photos = await PhotoPicker.pickAsset( | |||
context: context, | |||
themeColor: Color(0xFFF0F0F0), | |||
textColor: Color(0xFF3F3F3F), | |||
pickType: PickType.onlyImage); | |||
if (photos != null && photos.length > 0) { | |||
List<Asset> resultList = List<Asset>(); | |||
resultList = await MultiImagePicker.pickImages( | |||
maxImages: 9, | |||
enableCamera: false, | |||
selectedAssets: [], | |||
cupertinoOptions: CupertinoOptions(takePhotoIcon: "chat"), | |||
materialOptions: MaterialOptions( | |||
actionBarColor: "#50A7F9", | |||
actionBarTitle: "Hibok", | |||
allViewTitle: "", | |||
useDetailsView: false, | |||
selectCircleStrokeColor: "#000000", | |||
), | |||
); | |||
if (resultList != null && resultList.length > 0) { | |||
List<File> fileList = []; | |||
for (var i = 0; i < photos.length; i++) { | |||
AssetEntity photoEntity = photos[i]; | |||
fileList.add(await photoEntity.file); | |||
for (var i = 0; i < resultList.length; i++) { | |||
Asset photoEntity = resultList[i]; | |||
print('名字:${photoEntity.name}'); | |||
ByteData byteData = await photoEntity.getByteData(); | |||
File file = await FileCacheMgr().writeFile('temp-photo-${DateTime.now().millisecondsSinceEpoch}-${photoEntity.name}', byteData.buffer.asInt8List(0)); | |||
fileList.add(file); | |||
} | |||
print('文件列表${fileList.length}'); | |||
Map data = {"type": 2, "userId": UserData().basicInfo.userId}; | |||
data['sign'] = TokenMgr().getSign(data); | |||
data['sex'] = UserData().basicInfo.sex; | |||
@@ -453,12 +472,43 @@ class _ProfilePageState extends State<ProfilePage> | |||
if (resData['data']['msg'] != '' && resData['data']['msg'] != null) { | |||
showToast(resData['data']['msg']); | |||
} | |||
if(resData['msg'].split('|').length !=photos.length){ | |||
if(resData['msg'].split('|').length !=fileList.length){ | |||
showToast(I18n.of(context).hava_error_photo); | |||
} | |||
MessageMgr().emit('refresh_photo'); | |||
} | |||
} | |||
// var photos = await PhotoPicker.pickAsset( | |||
// context: context, | |||
// themeColor: Color(0xFFF0F0F0), | |||
// textColor: Color(0xFF3F3F3F), | |||
// pickType: PickType.onlyImage); | |||
// if (photos != null && photos.length > 0) { | |||
// List<File> fileList = []; | |||
// for (var i = 0; i < photos.length; i++) { | |||
// AssetEntity photoEntity = photos[i]; | |||
// fileList.add(await photoEntity.file); | |||
// } | |||
// Map data = {"type": 2, "userId": UserData().basicInfo.userId}; | |||
// data['sign'] = TokenMgr().getSign(data); | |||
// data['sex'] = UserData().basicInfo.sex; | |||
// data['isBurn'] = 0; | |||
// Response res = await HttpUtil().uploadFiles( | |||
// fileList, data, 'upload/post/postfiles', 'image', | |||
// isShowLoading: true); | |||
// var resData = res.data; | |||
// if (resData['code'] == 0) { | |||
// if (resData['data']['msg'] != '' && resData['data']['msg'] != null) { | |||
// showToast(resData['data']['msg']); | |||
// } | |||
// if(resData['msg'].split('|').length !=photos.length){ | |||
// showToast(I18n.of(context).hava_error_photo); | |||
// } | |||
// MessageMgr().emit('refresh_photo'); | |||
// } | |||
// } | |||
} | |||
void _sendPicture() async { | |||
@@ -35,7 +35,7 @@ class AudioChatPage extends StatefulWidget { | |||
final bool isReplay; | |||
final bool isTranslateButler; | |||
final Function translateButlerCloseCallBack; | |||
AudioChatPage({@required this.userInfo, this.isReplay = false, this.isTranslateButler,this.translateButlerCloseCallBack}); | |||
AudioChatPage({@required this.userInfo, this.isReplay = false, this.isTranslateButler=false,this.translateButlerCloseCallBack}); | |||
@override | |||
_AudioChatPageState createState() => _AudioChatPageState(); | |||
} | |||
@@ -1,4 +1,5 @@ | |||
import 'dart:async'; | |||
import 'package:chat/chat/ChatPage.dart'; | |||
import 'package:chat/data/UserData.dart'; | |||
import 'package:chat/data/constants.dart'; | |||
import 'package:chat/generated/i18n.dart'; | |||
@@ -8,6 +9,8 @@ import 'package:chat/home/realtimehelper/real_time_helper_page.dart'; | |||
import 'package:chat/home/unread_dot_widget.dart'; | |||
import 'package:chat/models/UserInfo.dart'; | |||
import 'package:chat/models/ref_name_provider.dart'; | |||
import 'package:chat/proto/transhousekeeper.pb.dart'; | |||
import 'package:chat/utils/CustomUI.dart'; | |||
import 'package:chat/utils/HttpUtil.dart'; | |||
import 'package:chat/utils/MessageMgr.dart'; | |||
import 'package:chat/utils/TokenMgr.dart'; | |||
@@ -162,6 +165,8 @@ class _HomeMainState extends State<HomeMain> { | |||
MessageMgr().on('Show My Profile', showMyProfile); | |||
MessageMgr().on('test_Permission', msgTestPermission); | |||
MessageMgr().on(MessageMgr.RECEIVE_THIRD_SHARE, goShareInfo); | |||
MessageMgr().on(MessageMgr.TRANSLATE_HK_RECEIVE_ORDER, receiveTranslateOrder); | |||
MessageMgr().on(MessageMgr.TRANSLATE_HK_START_CHAT, startTranslateHKChat); | |||
///初始化语音播放是外放还是听筒-默认外放 | |||
SoundUtils.instance.initPlayMode(); | |||
@@ -250,6 +255,8 @@ class _HomeMainState extends State<HomeMain> { | |||
MessageMgr().off('Show My Profile', showMyProfile); | |||
MessageMgr().off('test_Permission', msgTestPermission); | |||
MessageMgr().off(MessageMgr.RECEIVE_THIRD_SHARE, goShareInfo); | |||
MessageMgr().off(MessageMgr.TRANSLATE_HK_RECEIVE_ORDER, receiveTranslateOrder); | |||
MessageMgr().off(MessageMgr.TRANSLATE_HK_START_CHAT, startTranslateHKChat); | |||
LocalNotificationUtil.instance.dispose(); | |||
if (time != null) { | |||
time.cancel(); | |||
@@ -269,6 +276,25 @@ class _HomeMainState extends State<HomeMain> { | |||
}); | |||
} | |||
receiveTranslateOrder(var data) async { | |||
CustomUI.buildTranslationHelperOrderDialog(context,false,orderId: data.orderId,scenes: data.scenes,desc: data.desc); | |||
} | |||
startTranslateHKChat(var friendID){ | |||
Navigator.of(context).push( | |||
new MaterialPageRoute( | |||
builder: (context) { | |||
return ChatPage( | |||
key: Key('Chat'), | |||
friendId: friendID, | |||
isTranslateButler: true, | |||
); | |||
}, | |||
), | |||
); | |||
} | |||
msgTestPermission(data) async { | |||
PermissionStatus status = | |||
await LocationPermissions().checkPermissionStatus(); | |||
@@ -313,79 +339,22 @@ class _HomeMainState extends State<HomeMain> { | |||
I18n.of(context).me | |||
]; | |||
// _navigationViews = [ | |||
// NavigationIconView( | |||
// title: _titles[2], | |||
// icon: IconData( | |||
// 0xe67c, | |||
// fontFamily: 'iconfont', | |||
// ), | |||
// isShowdot: true, | |||
// iconSize: 29), | |||
// NavigationIconView( | |||
// title: _titles[0], | |||
// isShowdot: true, | |||
// iconMargin: EdgeInsets.only(top: 2), | |||
// type: 5, | |||
// icon: IconData( | |||
// 0xe66e, | |||
// fontFamily: 'iconfont', | |||
// ), | |||
// iconSize: 26.5), | |||
// NavigationIconView( | |||
// title: _titles[1], | |||
// icon: IconData( | |||
// 0xe656, | |||
// fontFamily: 'iconfont', | |||
// ), | |||
// isCenter: true, | |||
// iconSize: 31), | |||
// NavigationIconView( | |||
// title: _titles[1], | |||
// isShowdot: true, | |||
// icon: IconData( | |||
// 0xe60b, | |||
// fontFamily: 'iconfont', | |||
// ), | |||
// type: 6, | |||
// iconSize: 26.5), | |||
// NavigationIconView( | |||
// title: _titles[3], | |||
// icon: IconData( | |||
// 0xe67b, | |||
// fontFamily: 'iconfont', | |||
// ), | |||
// iconSize: 26.5), | |||
// ]; | |||
// | |||
// _pages = [ | |||
// RealTimeHelperPage(), | |||
// FriendPage(), | |||
// FindPage(), | |||
// ConversActionPage(), | |||
//// GroupChatListPage(), | |||
// ProfilePage( | |||
// userId: UserData().basicInfo.userId, | |||
// ), | |||
// ]; | |||
_navigationViews = [ | |||
NavigationIconView( | |||
title: _titles[1], | |||
isShowdot: true, | |||
title: _titles[2], | |||
icon: IconData( | |||
0xe60b, | |||
0xe67c, | |||
fontFamily: 'iconfont', | |||
), | |||
type: 1, | |||
iconSize: 26.5), | |||
isShowdot: true, | |||
iconSize: 29), | |||
NavigationIconView( | |||
title: _titles[0], | |||
isShowdot: true, | |||
iconMargin: EdgeInsets.only(top: 2), | |||
type: 5, | |||
icon: IconData( | |||
0xe663, | |||
0xe66e, | |||
fontFamily: 'iconfont', | |||
), | |||
iconSize: 26.5), | |||
@@ -397,17 +366,15 @@ class _HomeMainState extends State<HomeMain> { | |||
), | |||
isCenter: true, | |||
iconSize: 31), | |||
NavigationIconView( | |||
title: _titles[3], | |||
title: _titles[1], | |||
isShowdot: true, | |||
icon: IconData( | |||
0xe66e, | |||
0xe60b, | |||
fontFamily: 'iconfont', | |||
), | |||
type: 4, | |||
type: 6, | |||
iconSize: 26.5), | |||
NavigationIconView( | |||
title: _titles[3], | |||
icon: IconData( | |||
@@ -418,17 +385,76 @@ class _HomeMainState extends State<HomeMain> { | |||
]; | |||
_pages = [ | |||
ConversActionPage(), | |||
// RealTimeHelperPage(), | |||
RealTimeHelperPage(), | |||
FriendPage(), | |||
FindPage(), | |||
// ConversActionPage(), | |||
GroupChatListPage(), | |||
ConversActionPage(), | |||
// GroupChatListPage(), | |||
ProfilePage( | |||
userId: UserData().basicInfo.userId, | |||
), | |||
]; | |||
// _navigationViews = [ | |||
// NavigationIconView( | |||
// title: _titles[1], | |||
// isShowdot: true, | |||
// icon: IconData( | |||
// 0xe60b, | |||
// fontFamily: 'iconfont', | |||
// ), | |||
// type: 1, | |||
// iconSize: 26.5), | |||
// NavigationIconView( | |||
// title: _titles[0], | |||
// isShowdot: true, | |||
// iconMargin: EdgeInsets.only(top: 2), | |||
// type: 5, | |||
// icon: IconData( | |||
// 0xe663, | |||
// fontFamily: 'iconfont', | |||
// ), | |||
// iconSize: 26.5), | |||
// NavigationIconView( | |||
// title: _titles[1], | |||
// icon: IconData( | |||
// 0xe656, | |||
// fontFamily: 'iconfont', | |||
// ), | |||
// isCenter: true, | |||
// iconSize: 31), | |||
// | |||
// NavigationIconView( | |||
// title: _titles[3], | |||
// isShowdot: true, | |||
// icon: IconData( | |||
// 0xe66e, | |||
// fontFamily: 'iconfont', | |||
// ), | |||
// type: 4, | |||
// iconSize: 26.5), | |||
// | |||
// NavigationIconView( | |||
// title: _titles[3], | |||
// icon: IconData( | |||
// 0xe67b, | |||
// fontFamily: 'iconfont', | |||
// ), | |||
// iconSize: 26.5), | |||
// ]; | |||
// | |||
// _pages = [ | |||
// ConversActionPage(), | |||
//// RealTimeHelperPage(), | |||
// FriendPage(), | |||
// FindPage(), | |||
//// ConversActionPage(), | |||
// GroupChatListPage(), | |||
// ProfilePage( | |||
// userId: UserData().basicInfo.userId, | |||
// ), | |||
// ]; | |||
} | |||
@@ -5,12 +5,14 @@ import 'package:chat/chat/ChatPage.dart'; | |||
import 'package:chat/data/UserData.dart'; | |||
import 'package:chat/data/chat_data_mgr.dart'; | |||
import 'package:chat/data/group_data_mgr.dart'; | |||
import 'package:chat/data/translate_hk_data_mgr.dart'; | |||
import 'package:chat/home/add_friend.dart'; | |||
import 'package:chat/home/group_announcement.dart'; | |||
import 'package:chat/home/group_manage_page.dart'; | |||
import 'package:chat/models/group_info_model.dart'; | |||
import 'package:chat/models/money_change.dart'; | |||
import 'package:chat/models/ref_name_provider.dart'; | |||
import 'package:chat/utils/LoadingDialog.dart'; | |||
import 'package:chat/utils/MessageMgr.dart'; | |||
import 'package:chat/utils/group_member_model.dart'; | |||
import 'package:chat/utils/msgHandler.dart'; | |||
@@ -53,41 +55,62 @@ class TranslationButlerPageState extends State<TranslationButlerPage> { | |||
int curToLang = 1; | |||
int curSourceLang = UserData().language; | |||
int curScenes = 0; | |||
List<ValueModel> langList; | |||
List<ValueModel> scenesList; | |||
List<ValueModel> langList; ///语言列表 | |||
List<ValueModel> scenesList; ///场景列表 | |||
String extraMsg; | |||
String extraMsg=''; | |||
FocusNode focusNode = new FocusNode(); | |||
String textLimitTips=''; | |||
ScrollController _scrollController = new ScrollController(); | |||
int orderStatus = 0; ///订单状态 | |||
int secondsPassed = 1;///等待时间计数 | |||
int timeStamp; ///订单开始时间戳 | |||
Timer waitTimer;///等待时间计时器 | |||
int time60=1; ///60秒一圈计数 | |||
int waitNum=0; | |||
refreshOrder(args){ | |||
orderStatus = TranslateHKMgr().orderStatus; | |||
waitNum = TranslateHKMgr().waitNum; | |||
waitTimer = Timer.periodic(Duration(seconds: 1), (Timer t) { | |||
handleTick(); | |||
}); | |||
setState(() {}); | |||
} | |||
@override | |||
void initState() { | |||
super.initState(); | |||
initData(); | |||
orderStatus = TranslateHKMgr().orderStatus; | |||
waitNum = TranslateHKMgr().waitNum; | |||
initData(); | |||
MessageMgr().on(MessageMgr.TRANSLATE_HK_REFRESH_ORDER, refreshOrder); | |||
WidgetsBinding.instance.addPostFrameCallback((_) { | |||
Future.delayed(Duration(seconds: 1), () { | |||
// CustomUI.buildTranslationHelperOrderDialog(context,true); | |||
Navigator.of(context).push( | |||
new MaterialPageRoute( | |||
builder: (context) { | |||
return ChatPage( | |||
key: Key('Chat'), | |||
friendId: 100029, | |||
isTranslateButler: true, | |||
); | |||
}, | |||
), | |||
); | |||
}); | |||
// Future.delayed(Duration(seconds: 1), () { | |||
//// CustomUI.buildTranslationHelperOrderDialog(context,true); | |||
// Navigator.of(context).push( | |||
// new MaterialPageRoute( | |||
// builder: (context) { | |||
// return ChatPage( | |||
// key: Key('Chat'), | |||
// friendId: 100029, | |||
// isTranslateButler: true, | |||
// ); | |||
// }, | |||
// ), | |||
// ); | |||
// }); | |||
@@ -113,19 +136,18 @@ class TranslationButlerPageState extends State<TranslationButlerPage> { | |||
} | |||
} | |||
bool isCreatingOrder=false; | |||
apply() { | |||
if(isCreatingOrder){ | |||
return; | |||
} | |||
isCreatingOrder=true; | |||
MsgHandler.sendCreateTranslateOrder(langList[curSourceLang].key,langList[curToLang].key,scenesList[curScenes].key,extraMsg); | |||
isApply = false; | |||
timer = Timer.periodic(Duration(seconds: 1), (Timer t) { | |||
handleTick(); | |||
}); | |||
setState(() {}); | |||
} | |||
@override | |||
@@ -152,9 +174,9 @@ class TranslationButlerPageState extends State<TranslationButlerPage> { | |||
@override | |||
void dispose() { | |||
timer?.cancel(); | |||
if (!isApply && timeStamp != null) { | |||
waitTimer?.cancel(); | |||
MessageMgr().off(MessageMgr.TRANSLATE_HK_REFRESH_ORDER, refreshOrder); | |||
if (orderStatus==TranslateHKMgr.ORDER_STATUS_WAITING && timeStamp != null) { | |||
print('保存时间戳$timeStamp'); | |||
SPUtils.save(Constants.TranslationHelper, timeStamp.toString()); | |||
} | |||
@@ -320,13 +342,13 @@ class TranslationButlerPageState extends State<TranslationButlerPage> { | |||
body: SafeArea( | |||
child: Container( | |||
color: Color(0xffE8EAF0), | |||
child: isApply ? applyPage() : waitPage(), | |||
child: orderStatus==TranslateHKMgr.ORDER_STATUS_EMPTY ? createOrderPage() : waitPage(), | |||
), | |||
), | |||
); | |||
} | |||
Widget applyPage() { | |||
Widget createOrderPage() { | |||
return ListView( | |||
controller: _scrollController, | |||
children: <Widget>[ | |||
@@ -575,7 +597,7 @@ class TranslationButlerPageState extends State<TranslationButlerPage> { | |||
textAlign: TextAlign.center, | |||
text: TextSpan(children: [ | |||
TextSpan( | |||
text: '333', | |||
text: '$waitNum', | |||
style: TextStyle( | |||
color: Color(0xffFF1010), | |||
fontSize: 27)), | |||
@@ -608,7 +630,7 @@ class TranslationButlerPageState extends State<TranslationButlerPage> { | |||
textAlign: TextAlign.center, | |||
text: TextSpan(children: [ | |||
TextSpan( | |||
text: '666', | |||
text: '${waitNum*5}', | |||
style: TextStyle( | |||
color: Color(0xff3875E9), | |||
fontSize: 27)), | |||
@@ -693,9 +715,11 @@ class TranslationButlerPageState extends State<TranslationButlerPage> { | |||
onPressed: () async { | |||
await SPUtils.save(Constants.TranslationHelper, null); | |||
setState(() { | |||
isApply = true; | |||
timer?.cancel(); | |||
orderStatus = TranslateHKMgr.ORDER_STATUS_EMPTY; | |||
waitTimer?.cancel(); | |||
secondsPassed = 0; | |||
MsgHandler.sendCancelTranslateOrder(); | |||
}); | |||
}), | |||
), | |||
@@ -717,13 +741,9 @@ class TranslationButlerPageState extends State<TranslationButlerPage> { | |||
); | |||
} | |||
bool isApply = true; | |||
int secondsPassed = 1; | |||
int timeStamp; | |||
Timer timer; | |||
int time60=1; | |||
void handleTick() { | |||
// if (isActive) { | |||
setState(() { | |||
secondsPassed = secondsPassed + 1; //需要更新UI | |||
@@ -732,7 +752,6 @@ class TranslationButlerPageState extends State<TranslationButlerPage> { | |||
time60=0; | |||
} | |||
}); | |||
// } | |||
} | |||
getFull(int sec) { | |||
@@ -32,6 +32,12 @@ class LastMessageModel { | |||
friendId = msgModel.from; | |||
} | |||
///翻译管家 | |||
if(msgModel.channelType==ChatChannelType.Session.value && msgModel.msgType==ChatType.GroupChatNoticeType.value){ | |||
friendId = msgModel.friendId; | |||
} | |||
channelType = msgModel.channelType; | |||
type = ChatType.valueOf(msgModel.msgType); | |||
@@ -7,6 +7,7 @@ import 'package:chat/generated/i18n.dart'; | |||
import 'package:chat/models/last_message_model.dart'; | |||
import 'package:chat/models/ref_name_provider.dart'; | |||
import 'package:chat/proto/chat.pb.dart'; | |||
import 'package:chat/proto/transhousekeeper.pb.dart'; | |||
import 'package:chat/utils/HttpUtil.dart'; | |||
import 'package:chat/utils/MessageMgr.dart'; | |||
import 'package:chat/utils/msgHandler.dart'; | |||
@@ -136,17 +137,36 @@ class _LastMsgDescriptionState extends State<LastMsgDescription> { | |||
break; | |||
case ChatType.GroupChatNoticeType: | |||
var notice = | |||
GroupChatNotice.fromBuffer(widget.lastMessageModel.msgContent); | |||
print('widget.lastMessageModel.type ${widget.lastMessageModel.type}'); | |||
var groupInfo = await GroupInfoMgr() | |||
.getGroupInfo(widget.lastMessageModel.sessionId); | |||
desc = MsgHandler.getGroupNoticeMsg(notice, groupInfo); | |||
print('ggdesc $desc}'); | |||
if (desc.contains('\$')) { | |||
desc = desc.substring(0, desc.indexOf('\$')); | |||
} else {} | |||
if(widget.lastMessageModel.channelType==ChatChannelType.Session.value){ | |||
///翻译管家的 通知消息 | |||
desc = '翻译管家---'; | |||
print('翻译管家的 通知消息-'); | |||
TransHKChatNotice res = TransHKChatNotice.fromBuffer(widget.lastMessageModel.msgContent); | |||
if(res.noticeType==TransHKChatNoticeType.StartChat){ | |||
return '[翻译管家服务开始]'; | |||
}else if(res.noticeType==TransHKChatNoticeType.EndChat){ | |||
return '[翻译管家服务结束]'; | |||
}else{ | |||
return ''; | |||
} | |||
}else{ | |||
var notice = | |||
GroupChatNotice.fromBuffer(widget.lastMessageModel.msgContent); | |||
print('widget.lastMessageModel.type ${widget.lastMessageModel.type}'); | |||
var groupInfo = await GroupInfoMgr() | |||
.getGroupInfo(widget.lastMessageModel.sessionId); | |||
desc = MsgHandler.getGroupNoticeMsg(notice, groupInfo); | |||
print('ggdesc $desc}'); | |||
if (desc.contains('\$')) { | |||
desc = desc.substring(0, desc.indexOf('\$')); | |||
} else {} | |||
} | |||
break; | |||
@@ -12,6 +12,8 @@ import 'package:protobuf/protobuf.dart' as $pb; | |||
import 'chat.pb.dart' as $0; | |||
import 'transhousekeeper.pbenum.dart'; | |||
export 'transhousekeeper.pbenum.dart'; | |||
class IssueTransHKOrderReq extends $pb.GeneratedMessage { | |||
@@ -276,79 +278,38 @@ class CancellationTransHKOrderPush extends $pb.GeneratedMessage { | |||
void clearOrderId() => clearField(1); | |||
} | |||
class TransHKChatStartPush extends $pb.GeneratedMessage { | |||
static final $pb.BuilderInfo _i = $pb.BuilderInfo('TransHKChatStartPush', package: const $pb.PackageName('yl_pb')) | |||
..aInt64(1, 'startTime') | |||
..a<$core.int>(2, 'targetId', $pb.PbFieldType.OU3) | |||
..a<$0.BaseUserInfo>(3, 'employer', $pb.PbFieldType.OM, $0.BaseUserInfo.getDefault, $0.BaseUserInfo.create) | |||
..a<$0.BaseUserInfo>(4, 'inter', $pb.PbFieldType.OM, $0.BaseUserInfo.getDefault, $0.BaseUserInfo.create) | |||
..hasRequiredFields = false | |||
; | |||
TransHKChatStartPush._() : super(); | |||
factory TransHKChatStartPush() => create(); | |||
factory TransHKChatStartPush.fromBuffer($core.List<$core.int> i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromBuffer(i, r); | |||
factory TransHKChatStartPush.fromJson($core.String i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromJson(i, r); | |||
TransHKChatStartPush clone() => TransHKChatStartPush()..mergeFromMessage(this); | |||
TransHKChatStartPush copyWith(void Function(TransHKChatStartPush) updates) => super.copyWith((message) => updates(message as TransHKChatStartPush)); | |||
$pb.BuilderInfo get info_ => _i; | |||
@$core.pragma('dart2js:noInline') | |||
static TransHKChatStartPush create() => TransHKChatStartPush._(); | |||
TransHKChatStartPush createEmptyInstance() => create(); | |||
static $pb.PbList<TransHKChatStartPush> createRepeated() => $pb.PbList<TransHKChatStartPush>(); | |||
static TransHKChatStartPush getDefault() => _defaultInstance ??= create()..freeze(); | |||
static TransHKChatStartPush _defaultInstance; | |||
Int64 get startTime => $_getI64(0); | |||
set startTime(Int64 v) { $_setInt64(0, v); } | |||
$core.bool hasStartTime() => $_has(0); | |||
void clearStartTime() => clearField(1); | |||
$core.int get targetId => $_get(1, 0); | |||
set targetId($core.int v) { $_setUnsignedInt32(1, v); } | |||
$core.bool hasTargetId() => $_has(1); | |||
void clearTargetId() => clearField(2); | |||
$0.BaseUserInfo get employer => $_getN(2); | |||
set employer($0.BaseUserInfo v) { setField(3, v); } | |||
$core.bool hasEmployer() => $_has(2); | |||
void clearEmployer() => clearField(3); | |||
$0.BaseUserInfo get inter => $_getN(3); | |||
set inter($0.BaseUserInfo v) { setField(4, v); } | |||
$core.bool hasInter() => $_has(3); | |||
void clearInter() => clearField(4); | |||
} | |||
class TransHKChatEndPush extends $pb.GeneratedMessage { | |||
static final $pb.BuilderInfo _i = $pb.BuilderInfo('TransHKChatEndPush', package: const $pb.PackageName('yl_pb')) | |||
..a<$core.int>(1, 'targetId', $pb.PbFieldType.OU3) | |||
..aInt64(2, 'endTime') | |||
class TransHKChatNotice extends $pb.GeneratedMessage { | |||
static final $pb.BuilderInfo _i = $pb.BuilderInfo('TransHKChatNotice', package: const $pb.PackageName('yl_pb')) | |||
..e<TransHKChatNoticeType>(1, 'noticeType', $pb.PbFieldType.OE, TransHKChatNoticeType.StartChat, TransHKChatNoticeType.valueOf, TransHKChatNoticeType.values) | |||
..a<$0.BaseUserInfo>(2, 'operatuId', $pb.PbFieldType.OM, $0.BaseUserInfo.getDefault, $0.BaseUserInfo.create) | |||
..pc<$0.BaseUserInfo>(3, 'operateduId', $pb.PbFieldType.PM,$0.BaseUserInfo.create) | |||
..hasRequiredFields = false | |||
; | |||
TransHKChatEndPush._() : super(); | |||
factory TransHKChatEndPush() => create(); | |||
factory TransHKChatEndPush.fromBuffer($core.List<$core.int> i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromBuffer(i, r); | |||
factory TransHKChatEndPush.fromJson($core.String i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromJson(i, r); | |||
TransHKChatEndPush clone() => TransHKChatEndPush()..mergeFromMessage(this); | |||
TransHKChatEndPush copyWith(void Function(TransHKChatEndPush) updates) => super.copyWith((message) => updates(message as TransHKChatEndPush)); | |||
TransHKChatNotice._() : super(); | |||
factory TransHKChatNotice() => create(); | |||
factory TransHKChatNotice.fromBuffer($core.List<$core.int> i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromBuffer(i, r); | |||
factory TransHKChatNotice.fromJson($core.String i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromJson(i, r); | |||
TransHKChatNotice clone() => TransHKChatNotice()..mergeFromMessage(this); | |||
TransHKChatNotice copyWith(void Function(TransHKChatNotice) updates) => super.copyWith((message) => updates(message as TransHKChatNotice)); | |||
$pb.BuilderInfo get info_ => _i; | |||
@$core.pragma('dart2js:noInline') | |||
static TransHKChatEndPush create() => TransHKChatEndPush._(); | |||
TransHKChatEndPush createEmptyInstance() => create(); | |||
static $pb.PbList<TransHKChatEndPush> createRepeated() => $pb.PbList<TransHKChatEndPush>(); | |||
static TransHKChatEndPush getDefault() => _defaultInstance ??= create()..freeze(); | |||
static TransHKChatEndPush _defaultInstance; | |||
$core.int get targetId => $_get(0, 0); | |||
set targetId($core.int v) { $_setUnsignedInt32(0, v); } | |||
$core.bool hasTargetId() => $_has(0); | |||
void clearTargetId() => clearField(1); | |||
Int64 get endTime => $_getI64(1); | |||
set endTime(Int64 v) { $_setInt64(1, v); } | |||
$core.bool hasEndTime() => $_has(1); | |||
void clearEndTime() => clearField(2); | |||
static TransHKChatNotice create() => TransHKChatNotice._(); | |||
TransHKChatNotice createEmptyInstance() => create(); | |||
static $pb.PbList<TransHKChatNotice> createRepeated() => $pb.PbList<TransHKChatNotice>(); | |||
static TransHKChatNotice getDefault() => _defaultInstance ??= create()..freeze(); | |||
static TransHKChatNotice _defaultInstance; | |||
TransHKChatNoticeType get noticeType => $_getN(0); | |||
set noticeType(TransHKChatNoticeType v) { setField(1, v); } | |||
$core.bool hasNoticeType() => $_has(0); | |||
void clearNoticeType() => clearField(1); | |||
$0.BaseUserInfo get operatuId => $_getN(1); | |||
set operatuId($0.BaseUserInfo v) { setField(2, v); } | |||
$core.bool hasOperatuId() => $_has(1); | |||
void clearOperatuId() => clearField(2); | |||
$core.List<$0.BaseUserInfo> get operateduId => $_getList(2); | |||
} | |||
@@ -30,3 +30,18 @@ class TransHKOrderState extends $pb.ProtobufEnum { | |||
const TransHKOrderState._($core.int v, $core.String n) : super(v, n); | |||
} | |||
class TransHKChatNoticeType extends $pb.ProtobufEnum { | |||
static const TransHKChatNoticeType StartChat = TransHKChatNoticeType._(1, 'StartChat'); | |||
static const TransHKChatNoticeType EndChat = TransHKChatNoticeType._(2, 'EndChat'); | |||
static const $core.List<TransHKChatNoticeType> values = <TransHKChatNoticeType> [ | |||
StartChat, | |||
EndChat, | |||
]; | |||
static final $core.Map<$core.int, TransHKChatNoticeType> _byValue = $pb.ProtobufEnum.initByValue(values); | |||
static TransHKChatNoticeType valueOf($core.int value) => _byValue[value]; | |||
const TransHKChatNoticeType._($core.int v, $core.String n) : super(v, n); | |||
} | |||
@@ -16,6 +16,14 @@ const TransHKOrderState$json = const { | |||
], | |||
}; | |||
const TransHKChatNoticeType$json = const { | |||
'1': 'TransHKChatNoticeType', | |||
'2': const [ | |||
const {'1': 'StartChat', '2': 1}, | |||
const {'1': 'EndChat', '2': 2}, | |||
], | |||
}; | |||
const IssueTransHKOrderReq$json = const { | |||
'1': 'IssueTransHKOrderReq', | |||
'2': const [ | |||
@@ -81,21 +89,12 @@ const CancellationTransHKOrderPush$json = const { | |||
], | |||
}; | |||
const TransHKChatStartPush$json = const { | |||
'1': 'TransHKChatStartPush', | |||
'2': const [ | |||
const {'1': 'StartTime', '3': 1, '4': 1, '5': 3, '10': 'StartTime'}, | |||
const {'1': 'TargetId', '3': 2, '4': 1, '5': 13, '10': 'TargetId'}, | |||
const {'1': 'Employer', '3': 3, '4': 1, '5': 11, '6': '.yl_pb.BaseUserInfo', '10': 'Employer'}, | |||
const {'1': 'Inter', '3': 4, '4': 1, '5': 11, '6': '.yl_pb.BaseUserInfo', '10': 'Inter'}, | |||
], | |||
}; | |||
const TransHKChatEndPush$json = const { | |||
'1': 'TransHKChatEndPush', | |||
const TransHKChatNotice$json = const { | |||
'1': 'TransHKChatNotice', | |||
'2': const [ | |||
const {'1': 'TargetId', '3': 1, '4': 1, '5': 13, '10': 'TargetId'}, | |||
const {'1': 'EndTime', '3': 2, '4': 1, '5': 3, '10': 'EndTime'}, | |||
const {'1': 'NoticeType', '3': 1, '4': 1, '5': 14, '6': '.yl_pb.TransHKChatNoticeType', '10': 'NoticeType'}, | |||
const {'1': 'OperatuId', '3': 2, '4': 1, '5': 11, '6': '.yl_pb.BaseUserInfo', '10': 'OperatuId'}, | |||
const {'1': 'OperateduId', '3': 3, '4': 3, '5': 11, '6': '.yl_pb.BaseUserInfo', '10': 'OperateduId'}, | |||
], | |||
}; | |||
@@ -13,6 +13,12 @@ enum TransHKOrderState{ | |||
Completed = 5; //已完成 | |||
} | |||
//comid = 3 | |||
enum TransHKChatNoticeType{ | |||
StartChat = 1; //开始 | |||
EndChat = 2; //结束 | |||
} | |||
//-------------------------------------------消息------------------------- | |||
//Msg=1 发布翻译管家帮助订单 | |||
message IssueTransHKOrderReq { | |||
@@ -66,17 +72,9 @@ message CancellationTransHKOrderPush { | |||
} | |||
//Msg = 30 翻译官价聊天开始推送 | |||
message TransHKChatStartPush { | |||
optional int64 StartTime = 1; //开始时间 | |||
optional uint32 TargetId = 2; //目标聊天用户 | |||
optional BaseUserInfo Employer = 3; //雇主信息 | |||
optional BaseUserInfo Inter = 4; //翻译官信息 | |||
} | |||
//Msg = 31 翻译官价聊天结束推送 | |||
message TransHKChatEndPush { | |||
optional uint32 TargetId = 1; //发送目标Id SessionId or GroudId | |||
optional int64 EndTime = 2; //结束时间 | |||
//翻译会话通告消息 | |||
message TransHKChatNotice { | |||
optional TransHKChatNoticeType NoticeType = 1; //公告类型 | |||
optional BaseUserInfo OperatuId = 2; //操作用户Id | |||
repeated BaseUserInfo OperateduId = 3; //被操作用户Ids 有可能是多人 | |||
} |
@@ -1389,9 +1389,12 @@ class CustomUI { | |||
I18n.of(context) | |||
.translation_butler_dialog_start_service, | |||
() { | |||
MsgHandler.sendReceiveOrder(orderId); | |||
Navigator.of(context).pop(); | |||
}), | |||
},onPress: (){ | |||
MsgHandler.sendReceiveOrder(); | |||
Navigator.of(context).pop(); | |||
},), | |||
) | |||
], | |||
), | |||
@@ -44,9 +44,9 @@ class HttpUtil { | |||
//static const String BaseUrl = 'http://192.168.0.223:7001/'; | |||
//static const String BaseUrl = 'http://192.168.0.207:9080/'; | |||
// static const String BaseUrl = 'http://120.79.107.63:9080/'; | |||
static const String BaseUrl = 'http://120.79.107.63:9080/'; | |||
//static const String BaseUrl = 'http://192.168.0.177:9016/'; | |||
static const String BaseUrl = 'https://datasm.chengyouhd.com/'; | |||
// static const String BaseUrl = 'https://datasm.chengyouhd.com/'; | |||
static HttpUtil _getInstance() { | |||
if (_instance == null) { | |||
@@ -6,6 +6,10 @@ class MessageMgr { | |||
static const String REFRESH_PUSH_PERMISSION ='refresh_push_permission'; | |||
static const String RECEIVE_THIRD_SHARE ='receive_third_share'; | |||
static const String TRANSLATE_HK_REFRESH_ORDER ='translate_hk_refresh_order'; | |||
static const String TRANSLATE_HK_RECEIVE_ORDER ='translate_hk_receive_order'; | |||
static const String TRANSLATE_HK_START_CHAT ='translate_hk_start_chat'; | |||
//私有构造函数 | |||
MessageMgr._internal(); | |||
@@ -189,7 +189,7 @@ class WidgetUtil { | |||
//防止头像文件被清除后 | |||
Uint8List pngBytes = file.readAsBytesSync(); | |||
print('pngBytes.lengthInBytes length;${pngBytes.lengthInBytes}'); | |||
// print('pngBytes.lengthInBytes length;${pngBytes.lengthInBytes}'); | |||
if (pngBytes.lengthInBytes > 8000) { | |||
return ClipRRect( | |||
borderRadius: BorderRadius.circular(5), | |||
@@ -221,7 +221,7 @@ class WidgetUtil { | |||
Uint8List pngBytes = byteData.buffer.asUint8List(); | |||
File file = await FileCacheMgr() | |||
.writeFile(model.sessionId.toString(), pngBytes); | |||
print('图片地址byteData${byteData.lengthInBytes}'); | |||
// print('图片地址byteData${byteData.lengthInBytes}'); | |||
if (byteData.lengthInBytes > 8000 && members.length > 1) { | |||
//图片保存成功 | |||
GroupInfoMgr().updateAvatar(model.sessionId, file.path); | |||
@@ -6,11 +6,14 @@ import 'package:chat/data/UserData.dart'; | |||
import 'package:chat/data/chat_data_mgr.dart'; | |||
import 'package:chat/data/constants.dart'; | |||
import 'package:chat/data/group_data_mgr.dart'; | |||
import 'package:chat/data/translate_hk_data_mgr.dart'; | |||
import 'package:chat/generated/i18n.dart'; | |||
import 'package:chat/home/IndexPage.dart'; | |||
import 'package:chat/home/realtimehelper/translation_butler_page.dart'; | |||
import 'package:chat/models/ChatMsg.dart'; | |||
import 'package:chat/models/group_info_model.dart'; | |||
import 'package:chat/proto/all.pbserver.dart'; | |||
import 'package:chat/proto/transhousekeeper.pb.dart'; | |||
import 'package:chat/utils/NetUtil.dart'; | |||
import 'package:chat/utils/blacklist_mgr.dart'; | |||
import 'package:chat/utils/friend_list_mgr.dart'; | |||
@@ -23,6 +26,7 @@ import 'package:flutter/material.dart'; | |||
import 'package:oktoast/oktoast.dart'; | |||
import 'package:fixnum/fixnum.dart'; | |||
import 'LoadingDialog.dart'; | |||
import 'MessageMgr.dart'; | |||
const MaxMsgContentSize = 1024 * 1024 * 3; | |||
@@ -257,9 +261,13 @@ class MsgHandler { | |||
// static int receivedCount=0; | |||
static handlerReceiveMsg(PushChat chat) async { | |||
bool isGroup = false; | |||
bool isTranslateHK= false; | |||
if (chat.channelType == ChatChannelType.Group) { | |||
print('群聊消息'); | |||
isGroup = true; | |||
}else if (chat.channelType == ChatChannelType.TransHK) { | |||
print('聊天管家消息'); | |||
isTranslateHK = true; | |||
} | |||
MsgModel msgModel; | |||
@@ -313,7 +321,7 @@ class MsgHandler { | |||
} | |||
} else { | |||
if (chat.sendUserId == 0) { | |||
print('服务器通知消息 ${chat.sendTime.toInt()}'); | |||
print('服务器通知消息 ${chat.sendTime.toInt()} 是否是翻译管家 $isTranslateHK'); | |||
if (isGroup) { | |||
if (chat.cType == ChatType.GroupChatNoticeType) { | |||
@@ -405,7 +413,40 @@ class MsgHandler { | |||
chat.contentBuff, chat.sendTime.toInt(), chat.targetId, | |||
channelType: ChatChannelType.Group.value); | |||
} | |||
} else {//私聊通知消息 | |||
} | |||
else if(isTranslateHK){ //TODO ddddd | |||
var myId = UserData().basicInfo.userId; | |||
TransHKChatNotice notice = TransHKChatNotice.fromBuffer(chat.contentBuff); | |||
BaseUserInfo friendId ; | |||
if(notice.operateduId[0].id==myId){ | |||
friendId =notice.operateduId[1]; | |||
}else{ | |||
friendId = notice.operateduId[0]; | |||
} | |||
print('notice.operateduId length ${notice.operateduId.length}'); | |||
print('friend id: ${friendId.id} '); | |||
int sessionId = chat.targetId; | |||
if (chat.cType == ChatType.GroupChatNoticeType) { | |||
print('是群公告哦'); | |||
msgModel = MsgModel(0, friendId.id, chat.cType.value, | |||
chat.contentBuff, chat.sendTime.toInt(), sessionId, | |||
channelType: ChatChannelType.Session.value); | |||
} | |||
///接到开始翻译管家消息-打开翻译管家页面 | |||
if(notice.noticeType==TransHKChatNoticeType.StartChat){ | |||
Future.delayed(Duration(seconds: 3),(){ | |||
curActiveSession = sessionId; | |||
print('curActiveSession:$curActiveSession'); | |||
MessageMgr().emit(MessageMgr.TRANSLATE_HK_START_CHAT, friendId.id); | |||
}); | |||
} | |||
}else{//私聊通知消息 | |||
if (chat.cType == ChatType.RedWalletChatType) { | |||
//系统红包通知消息 | |||
RedWallet wallet = RedWallet.fromBuffer(chat.contentBuff); | |||
@@ -430,9 +471,9 @@ class MsgHandler { | |||
print('未知私聊通知消息'); | |||
} | |||
} | |||
} else { //聊天消息 | |||
} | |||
else { //聊天消息 | |||
// receivedCount++; | |||
@@ -539,7 +580,7 @@ class MsgHandler { | |||
print('消息为空,无法保存'); | |||
return; | |||
} | |||
// print('收到消息,准备保存 会话Id:${msgModel.sessionId}'); | |||
print('收到消息,准备保存 会话Id:${msgModel.sessionId} friendId: ${msgModel.friendId} ChatType: ${msgModel.channelType}'); | |||
ChatDataMgr().saveMsg(msgModel); | |||
if (msgModel.msgType == ChatType.ShortVoiceChatType.value) { | |||
//如果是语音消息,自动下载 | |||
@@ -929,7 +970,7 @@ class MsgHandler { | |||
handlerReceiveOrder(content); | |||
}else if(msgId ==6){ | |||
handlerCancelTranslateOrder(content); | |||
}else if(msgId==50){ | |||
}else if(msgId==20){ | |||
handlerDeliveryInterpreterOrderPush(content); | |||
} | |||
break; | |||
@@ -1224,84 +1265,101 @@ class MsgHandler { | |||
//发布翻译管家帮助订单 | |||
static sendCreateTranslateOrder(int fromLanguage,int toLanguage,int scences,String extraDesc) { | |||
showToast('正在创建订单...'); | |||
debugPrint('发布翻译管家帮助订单 fromLanguage:$fromLanguage toLanguage: $toLanguage | ${fromLanguage|toLanguage}' ); | |||
// var seq = IssueInterpreterOrderReq.create(); | |||
// seq.tLanguage = fromLanguage|toLanguage; | |||
// | |||
// NetWork().sendMsg(ComId.TranslateOrder, 1, seq); | |||
var seq = IssueTransHKOrderReq.create(); | |||
seq.tLanguage = fromLanguage | toLanguage; | |||
seq.scenes = 0; | |||
seq.desc = extraDesc; | |||
NetWork().sendMsg(ComId.TranslateOrder, 1, seq); | |||
} | |||
//发布翻译管家帮助订单回应 | |||
static handlerCreateTranslateOrder(List<int> msgContent) { | |||
debugPrint('发布翻译管家帮助订单回应'); | |||
// var res = IssueInterpreterOrderRes.fromBuffer(msgContent); | |||
// if (res.errorCode == 0) { | |||
// | |||
//// GroupInfoMgr().updateMemberMsgFree(res.groupId, res.messageFree); | |||
// debugPrint('发布翻译管家帮助订单回应-订单号: ${res.orderId} 等待人数 ${res.waitNum}'); | |||
// } else { | |||
// debugPrint('发布翻译管家帮助订单回应${res.errorCode}'); | |||
// } | |||
// LoadingManage().closeLoading(); | |||
var res = IssueTransHKOrderRes.fromBuffer(msgContent); | |||
if (res.errorCode == 0) { | |||
TranslateHKMgr().orderId = res.orderId; | |||
TranslateHKMgr().waitNum = res.waitNum; | |||
TranslateHKMgr().orderStatus=TranslateHKMgr.ORDER_STATUS_WAITING; | |||
MessageMgr().emit(MessageMgr.TRANSLATE_HK_REFRESH_ORDER); | |||
// GroupInfoMgr().updateMemberMsgFree(res.groupId, res.messageFree); | |||
debugPrint('发布翻译管家帮助订单回应-订单号: ${res.orderId} 等待人数 ${res.waitNum}'); | |||
} else { | |||
debugPrint('发布翻译管家帮助订单回应${res.errorCode}'); | |||
} | |||
} | |||
//撤销订单消息 | |||
static sendCancelTranslateOrder( String orderId) { | |||
// debugPrint('取消订单 fromLanguage:$orderId' ); | |||
// var seq = CancellationInterpreterOrderReq.create(); | |||
// seq.orderId = orderId; | |||
// | |||
// NetWork().sendMsg(ComId.TranslateOrder, 5, seq); | |||
static sendCancelTranslateOrder( ) { | |||
TranslateHKMgr().orderStatus = TranslateHKMgr.ORDER_STATUS_EMPTY; | |||
String orderId= TranslateHKMgr().orderId; | |||
debugPrint('取消订单 fromLanguage:$orderId' ); | |||
var seq = CancellationTransHKOrderReq.create(); | |||
seq.orderId = orderId; | |||
NetWork().sendMsg(ComId.TranslateOrder, 5, seq); | |||
} | |||
//撤销订单消息回应 | |||
static handlerCancelTranslateOrder(List<int> msgContent) { | |||
debugPrint('撤销订单消息回应'); | |||
// var res = CancellationInterpreterOrderRes.fromBuffer(msgContent); | |||
// if (res.errorCode == 0) { | |||
// | |||
//// GroupInfoMgr().updateMemberMsgFree(res.groupId, res.messageFree); | |||
// debugPrint('撤销订单消息回应成功: ${res.orderId}'); | |||
// } else { | |||
// debugPrint('撤销订单消息回应成功失败${res.errorCode}'); | |||
// } | |||
var res = CancellationTransHKOrderRes.fromBuffer(msgContent); | |||
if (res.errorCode == 0) { | |||
debugPrint('撤销订单消息回应成功: ${res.orderId}'); | |||
} else { | |||
debugPrint('撤销订单消息回应成功失败${res.errorCode}'); | |||
} | |||
} | |||
//派送订单推送 | |||
static handlerDeliveryInterpreterOrderPush(List<int> msgContent) { | |||
// debugPrint('撤销订单消息回应'); | |||
// var res = DeliveryInterpreterOrderPush.fromBuffer(msgContent); | |||
// print('OrderId: ${res.orderId} createTime: ${res.createTime} tLanguage:${res.tLanguage} scenes:${res.scenes} desc${res.desc}'); | |||
debugPrint('派送订单推送'); | |||
var res = DeliveryTransHKOrderPush.fromBuffer(msgContent); | |||
print('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(); | |||
TranslateHKMgr().order = order; | |||
MessageMgr().emit(MessageMgr.TRANSLATE_HK_RECEIVE_ORDER, res); | |||
} | |||
//接收订单请求 | |||
static sendReceiveOrder( String orderId) { | |||
static sendReceiveOrder( ) { | |||
TranslateOrder order = TranslateHKMgr().order; | |||
debugPrint('接收订单消息请求 orderId:${order.orderId}' ); | |||
var seq = ReceivingTransHKOrderReq.create(); | |||
seq.orderId = order.orderId; | |||
// debugPrint('接收订单消息请求 orderId:$orderId' ); | |||
// var seq = ReceivingInterpreterOrderReq.create(); | |||
// seq.orderId = orderId; | |||
// | |||
// NetWork().sendMsg(ComId.TranslateOrder,3, seq); | |||
NetWork().sendMsg(ComId.TranslateOrder,3, seq); | |||
} | |||
//接收订单消息回应 | |||
static handlerReceiveOrder(List<int> msgContent) { | |||
debugPrint('接收订单消息回应'); | |||
// var res = ReceivingInterpreterOrderRes.fromBuffer(msgContent); | |||
// if (res.errorCode == 0) { | |||
// | |||
//// GroupInfoMgr().updateMemberMsgFree(res.groupId, res.messageFree); | |||
// debugPrint('接收订单消息回应成功: '); | |||
// } else { | |||
// debugPrint('接收订单消息回应失败${res.errorCode}'); | |||
// } | |||
} | |||
var res = ReceivingTransHKOrderRes.fromBuffer(msgContent); | |||
if (res.errorCode == 0) { | |||
// GroupInfoMgr().updateMemberMsgFree(res.groupId, res.messageFree); | |||
debugPrint('接收订单消息回应成功: '); | |||
} else { | |||
debugPrint('接收订单消息回应失败${res.errorCode}'); | |||
} | |||
} | |||
///翻译官价聊天开始推送 | |||
static handlerTranslateStart(List<int> msgContent) { | |||
debugPrint('翻译官价聊天开始推送'); | |||
// var res = TransHKChatStartPush.fromBuffer(msgContent); | |||
} | |||
//消息免打扰请求结果 | |||
static handlerGroupIsShowMenberNiceName(List<int> msgContent) { | |||
@@ -1428,14 +1486,15 @@ class MsgHandler { | |||
NetWork().sendMsg(ComId.Chat, 100, seq); | |||
} | |||
static swtichTranslateState(TranslateState transState) { | |||
print('请求切换人工翻译状态'); | |||
var seq = RequestSetHTranslReq.create(); | |||
seq.sessionId = curActiveSession; | |||
seq.hTransl = transState; | |||
NetWork().sendMsg(ComId.Chat, 7, seq); | |||
} | |||
///服务端已作废 | |||
// static swtichTranslateState(TranslateState transState) { | |||
// print('请求切换人工翻译状态'); | |||
// var seq = RequestSetHTranslReq.create(); | |||
// seq.sessionId = curActiveSession; | |||
// seq.hTransl = transState; | |||
// | |||
// NetWork().sendMsg(ComId.Chat, 7, seq); | |||
// } | |||
static void receiveTranslateState(msg) { | |||
var res = PushHTranslState.fromBuffer(msg); | |||
@@ -1,7 +1,7 @@ | |||
name: chat | |||
description: A new Flutter project. | |||
#修改版本号后get-clean | |||
version: 1.0.9+13 | |||
version: 1.0.9+14 | |||
environment: | |||
sdk: ">=2.1.0 <3.0.0" | |||