/// <summary> /// 往前加载数据 /// </summary> /// <param name="count">增加加载数量</param> public void LoadPreviousMessages(Action <List <MessageModel> > completed, SDKClient.SDKProperty.MessageType msgType = SDKClient.SDKProperty.MessageType.all, DateTime?date = null, bool isReset = false, int count = 20) { if (isLoading) { completed?.Invoke(null); return; } Task.Delay(300).ContinueWith((t) => { bool isForword = false; isLoading = true; if (isReset) { _hisMessages.Clear(); } MessageModel topMost = _hisMessages.FirstOrDefault(); List <SDKClient.DB.messageDB> datas; SDKClient.SDKProperty.chatType chatType = _targetChat.IsGroup ? SDKClient.SDKProperty.chatType.groupChat : SDKClient.SDKProperty.chatType.chat; if (topMost != null) { if (currentMsgKdy != topMost.MsgKey) { isForword = true; currentMsgKdy = topMost.MsgKey; datas = SDKClient.SDKClient.Instance.GetHistoryMsg(this.Model.ID, topMost.MsgKey, count, date, messageType: msgType, chatType: chatType); } else { completed?.Invoke(null); isLoading = false; return; } } else { datas = SDKClient.SDKClient.Instance.GetHistoryMsg(this.Model.ID, count, date, messageType: msgType, chatType: chatType); } List <MessageModel> previous = new List <MessageModel>(); int fromId; if (this.Model.ID == AppData.Current.LoginUser.ID) { datas = datas.Where(m => m.sessionType == (int)SDKClient.SDKProperty.SessionType.FileAssistant).ToList(); } for (int i = 0; i < datas.Count; i++) { var m = datas[i]; //if (_hisMessages.Any(old => old.MsgKey == m.msgId)) //{ // continue; ; //} //System.Threading.Thread.CurrentThread.Join(5); if (int.TryParse(m.from, out fromId) && fromId > 0) { #region 消息类型 MessageType type; try { type = (MessageType)Enum.Parse(typeof(MessageType), m.msgType.ToLower()); } catch { //Views.MessageBox.ShowBox("收到未知消息类型:" + m.msgType); continue; } #endregion IChat sender; bool isMine = AppData.Current.LoginUser.User.ID == fromId; if (_targetChat.IsGroup) //群成员发送的消息,要现实的是成员在 我给好友备注的昵称>群成员自己设置的昵称>群成员名称 { UserModel user = AppData.Current.GetUserModel(fromId); GroupModel group = AppData.Current.GetGroupModel(m.roomId); sender = user.GetInGroupMember(group);// AppData.Current.GetUserModel(fromId); } else //单聊好友发送的消息,只显示头像,不显示昵称(聊天框已有昵称显示) { sender = AppData.Current.GetUserModel(fromId); if (type == MessageType.invitejoingroup) { type = MessageType.txt; } } //FileResourceModel file = new FileResourceModel() //{ // Length = m.fileSize, // FileName = m.fileName, // Key = m.resourceId, // SmallKey = m.resourcesmallId, //}; MessageModel msg = new MessageModel() { MsgKey = m.msgId, Sender = sender, SendTime = m.msgTime, MsgType = type, IsMine = isMine, //Content = m.content, //ResourceModel = file, }; msg.ResourceModel = new FileResourceModel() { Key = m.resourceId, SmallKey = m.resourcesmallId, Length = m.fileSize, FileName = Path.GetFileName(m.fileName), //如果文件名包含绝对路径,那么不从manjinba/file路径中文件 FullName = m.fileName, //fileState 0:未开始,1:下载中,2:已完成,3:取消,4:异常 DBState = m.fileState, }; if (type == MessageType.redenvelopesreceive || (type == MessageType.redenvelopessendout && msg.IsMine))////不显示对方接收的红包和自己发送的红包消息 { continue; } string info = string.Empty; switch (type) { case MessageType.foreigndyn: var foreigndynPackage = Util.Helpers.Json.ToObject <SDKClient.Model.MessagePackage>(m.Source); if (foreigndynPackage == null) { return; } string dynContent = foreigndynPackage.data.body.text; string msgHyperlink = foreigndynPackage.data.body.url; string msgstr = foreigndynPackage.data.body.img; if (string.IsNullOrEmpty(msgstr)) { msg.ShareMsgImage = IMAssets.ImageDeal.NewsDefaultIcon; } else { if (FileHelper.IsUrlRegex(msgstr)) { msg.ShareMsgImage = msgstr; } else { msg.ResourceModel = new FileResourceModel { SmallKey = msgstr }; msg.ShareMsgImage = IMAssets.ImageDeal.NewsDefaultIcon; } } msg.MsgHyperlink = msgHyperlink; msg.MsgSource = m.Source; msg.Content = string.IsNullOrEmpty(dynContent) ? msgHyperlink : dynContent; //msg.ShareMsgImage= msg.TipMessage = "[链接]" + dynContent; //链接消息,请在手机端查看"; break; case MessageType.img: info = "[图片]"; msg.Content = m.fileName; if (AppData.MainMV.ChatListVM.SelectedItem is ChatViewModel chat) { var target = chat.Chat.Messages.FirstOrDefault(old => old.MsgKey == msg.MsgKey); if (target != null) { target.Sender = sender; msg = target; msg.MessageState = target.MessageState; } } break; case MessageType.file: info = "[文件]"; msg.Content = m.fileName; break; case MessageType.onlinefile: if (File.Exists(m.content)) { msg.Content = m.content; msg.MsgType = MessageType.file; } else { var package = Util.Helpers.Json.ToObject <SDKClient.Model.MessagePackage>(m.Source); var body = package.data.body; //string onlineName = Path.GetFileName($"{package.data.body.fileName}"); //string onlinePath = Path.Combine(SDKClient.SDKClient.Instance.property.CurrentAccount.filePath, onlineName); //onlinePath = Helper.FileHelper.GetFileName(onlinePath, 1); //onlineName = Path.GetFileName(onlinePath); string onlinePath = m.fileName; string onlineName = Path.GetFileName(onlinePath); FileResourceModel onlineFile = new FileResourceModel() { Key = body.id, Length = body.fileSize, FileName = onlineName, //如果文件名包含绝对路径,那么不从manjinba/file路径中文件 FullName = onlinePath, RefInfo = new SDKClient.Model.OnlineFileBody() { id = body.id, fileSize = body.fileSize, fileName = onlineName, Port = body.Port, IP = body.IP, }, DBState = m.fileState }; msg.ResourceModel = onlineFile; msg.MsgType = MessageType.file; msg.Content = onlinePath; } info = "[文件]"; break; case MessageType.invitejoingroup: //info = "[群名片]"; info = msg.Content = "[群名片]"; break; case MessageType.audio: info = "[语音]"; msg.Content = msg.IsMine ? "您发送了一条语音消息,请在手机端查看" : "对方发送语音消息,请在手机端查看"; break; case MessageType.smallvideo: case MessageType.video: info = "[小视频]"; var videoPackage = Util.Helpers.Json.ToObject <SDKClient.Model.MessagePackage>(m.Source); var videoBody = videoPackage.data.body; string videoPath = m.fileName; string videoName = Path.GetFileName(videoPath); FileResourceModel video = new FileResourceModel() { Key = videoBody.id, PreviewKey = videoBody.previewId, Length = videoBody.fileSize, FileName = videoName, FullName = videoPath, RecordTime = videoBody.recordTime, }; video.PreviewImagePath = Path.Combine(SDKClient.SDKClient.Instance.property.CurrentAccount.imgPath, video.PreviewKey); msg.ResourceModel = video; msg.Content = videoPath; //if (AppData.MainMV.ChatListVM.SelectedItem is ChatViewModel chatVM) //{ // var target = chatVM.Chat.Messages.FirstOrDefault(old => old.MsgKey == msg.MsgKey); // if (target != null) // { // target.Sender = sender; // msg = target; // msg.ResourceModel = target.ResourceModel; // } //} break; case MessageType.txt: info = msg.Content = m.content; break; case MessageType.bigtxt: msg.Content = m.content; info = m.content; break; //case MessageType.onlinefile: // break; case MessageType.setmemberpower: var p = Util.Helpers.Json.ToObject <SetMemberPowerPackage>(m.Source); msg.Sender = new UserModel() { DisplayName = "系统消息" }; msg.MsgType = MessageType.notification; int index = 0; foreach (var item in p.data.userIds) { UserModel user = AppData.Current.GetUserModel(item); var group = this._targetChat.Chat as GroupModel; var member = user.GetInGroupMember(group); if (string.IsNullOrEmpty(user.Name)) { SDKClient.SDKClient.Instance.GetUser(item); } if (p.data.type == "admin") { if (item == AppData.MainMV.LoginUser.ID) { msg.Content = "你成为群管理员"; } else { if (string.IsNullOrEmpty(member.DisplayName)) { msg.Content = $"[{p.data.userNames[index]}] 成为群管理员"; } else { msg.Content = string.Format("[{0}] 成为群管理员", member.DisplayName); } } member.IsManager = true; } else { if (item == AppData.MainMV.LoginUser.ID) { msg.Content = "你被取消群管理员"; } else { if (string.IsNullOrEmpty(member.DisplayName)) { msg.Content = $"[{p.data.userNames[index]}] 被取消群管理员"; } else { msg.Content = string.Format("[{0}] 被取消群管理员", member.DisplayName); } } member.IsManager = false; } index++; } break; //case MessageType.dismissgroup: // var dismissGroupPackage = Util.Helpers.Json.ToObject<DismissGroupPackage>(m.Source); // this.ShowDismissMsg(dismissGroupPackage, isForward); // continue; case MessageType.addgroupnotice: var noticePackage = Util.Helpers.Json.ToObject <SDKClient.Model.MessagePackage>(m.Source); var noticeData = noticePackage.data.body; GroupNoticeModel groupNoticeModel = new GroupNoticeModel() { NoticeTitle = noticeData.title, NoticeId = noticeData.noticeId, GroupNoticeContent = noticeData.content }; msg.Content = noticeData.content; msg.SendTime = noticeData.publishTime ?? DateTime.Now; msg.NoticeModel = groupNoticeModel; info = msg.NoticeModel.NoticeTitle; if (this.Model is ChatModel chatModell) { if (chatModell.IsGroup) { GroupModel groupModell = chatModell.Chat as GroupModel; int groupId = groupModell.ID; msg.NoticeModel.GroupMId = groupId; } } break; case MessageType.usercard: MessagePackage packageMSG = Util.Helpers.Json.ToObject <SDKClient.Model.MessagePackage>(m.Source); string userName = packageMSG.data.body.name; string userPhoto = packageMSG.data.body.photo; string userPhone = packageMSG.data.body.phone; int userId = packageMSG.data.body.userId; PersonCardModel pcm = new PersonCardModel() { Name = userName, PhotoImg = userPhoto, PhoneNumber = userPhone, UserId = userId }; ///string imgPath = packageMSG.data.body.photo; var imageFullPath = IMClient.Helper.ImageHelper.GetFriendFace(userPhoto, (a) => { //msg.PersonCardModel.PhotoImg = a; }); pcm.PhotoImg = imageFullPath; msg.ContentMD5 = userPhoto; msg.Content = "[个人名片]"; msg.TipMessage = "[个人名片]" + pcm.Name; msg.PersonCardModel = pcm; break; default: msg.Sender = new UserModel() { DisplayName = "系统消息" }; msg.MsgType = MessageType.notification; info = msg.Content = m.content; break; } //if (isForword) //{ // previous.Insert(0, msg); //} //else { var tempMsg = previous.ToList().FirstOrDefault(n => n.MsgKey == msg.MsgKey); if (tempMsg == null) { previous.Add(msg); } } } } if (isForword) { previous.Reverse(); } _hisMessages.InsertRange(0, previous); completed?.Invoke(previous); isLoading = false; }); }
private void Grid_Click(object sender, RoutedEventArgs e) { Button btn = e.Source as Button; if (btn != null) { string uid = btn.Uid; switch (uid) { case "Cancel": case "Close": GroupNotice groupNotice = this.DataContext as GroupNotice; if (groupNotice != null) { if (groupNotice.NoticeType == 0) { if (!AppData.ordinaryGroupNoticeDic.ContainsKey(groupNotice.GroupId)) { AppData.ordinaryGroupNoticeDic.Add(groupNotice.GroupId, groupNotice); } } else { if (!AppData.joinGroupNeedKnowDic.ContainsKey(groupNotice.GroupId)) { AppData.joinGroupNeedKnowDic.Add(groupNotice.GroupId, groupNotice); } } } this.Close(); break; case "Sure": GroupNotice gn = this.DataContext as GroupNotice; if (AppData.CanInternetAction()) { if (gn != null) { List <ChatViewModel> list = AppData.MainMV.ChatListVM.Items.ToList().Where(x => x.IsGroup).Where(x => x.TargetVM != null).ToList(); ChatViewModel chatVM = list.FirstOrDefault(x => ((x.TargetVM as GroupViewModel).Model as GroupModel).ID == gn.GroupId); if (gn.NoticeType == 0) { if (!AppData.ordinaryGroupNoticeDic.ContainsKey(gn.GroupId)) { AppData.ordinaryGroupNoticeDic.Add(gn.GroupId, gn); } } else { if (!AppData.joinGroupNeedKnowDic.ContainsKey(gn.GroupId)) { AppData.joinGroupNeedKnowDic.Add(gn.GroupId, gn); } } GroupViewModel gvm = AppData.MainMV.GroupListVM.Items.ToList().FirstOrDefault(x => (x.Model as GroupModel).ID == gn.GroupId); if (CheckDataLegal(gn)) { int index = 0; //bool isFirstBadWordTitle = SDKClient.SDKProperty.stringSearchEx.FindFirst(gn.NoticeTitle, out index); bool isContainsBadWordTitle = SDKClient.SDKProperty.stringSearchEx.ContainsAny(gn.NoticeTitle); //bool isFirstBadWordContent = SDKClient.SDKProperty.stringSearchEx.FindFirst(gn.NoticeContent, out index); bool isContainsBadWordContent = SDKClient.SDKProperty.stringSearchEx.ContainsAny(gn.NoticeContent); if (!isContainsBadWordTitle && !isContainsBadWordContent) { MessageModel msg = new MessageModel() { Sender = AppData.Current.LoginUser.User, SendTime = DateTime.Now, MsgType = MessageType.addgroupnotice, IsMine = true, Content = gn.NoticeContent }; GroupNoticeModel gnModel = new GroupNoticeModel() { NoticeTitle = gn.NoticeTitle, NoticeId = gn.NoticeId, GroupMId = (gvm.Model as GroupModel).ID, GroupNoticeContent = gn.NoticeContent }; msg.NoticeModel = gnModel; msg.TipMessage = string.Format("{0}", msg.NoticeModel.NoticeTitle); if (gn.NoticeTitle.Equals("入群须知")) { SDKClient.SDKClient.Instance.AddNotice(gn.NoticeTitle, gn.NoticeContent, gn.GroupId, gn.GroupName, (result) => { if (result.Item1) { gn.NoticeId = result.Item2; App.Current.Dispatcher.Invoke(new Action(() => { AppData.MainMV.TipMessage = "发布成功!"; if (AppData.joinGroupNeedKnowDic.ContainsKey(gn.GroupId)) { AppData.joinGroupNeedKnowDic.Remove(gn.GroupId); } gvm.RefreshNoticeList(gn); msg.MsgKey = result.Item3; gnModel.NoticeId = result.Item2; msg.NoticeModel = gnModel; chatVM.AddMessage(msg); })); } else { App.Current.Dispatcher.Invoke(new Action(() => { AppData.MainMV.TipMessage = "发布失败!"; if (!AppData.joinGroupNeedKnowDic.ContainsKey(gn.GroupId)) { AppData.joinGroupNeedKnowDic.Add(gn.GroupId, gn); } })); } }, SDKClient.SDKProperty.NoticeType.JoinGroupNotice); } else { SDKClient.SDKClient.Instance.AddNotice(gn.NoticeTitle, gn.NoticeContent, gn.GroupId, gn.GroupName, (result) => { if (result.Item1) { gn.NoticeId = result.Item2; App.Current.Dispatcher.Invoke(new Action(() => { AppData.MainMV.TipMessage = "发布成功!"; if (AppData.ordinaryGroupNoticeDic.ContainsKey(gn.GroupId)) { AppData.ordinaryGroupNoticeDic.Remove(gn.GroupId); } gvm.RefreshNoticeList(gn); msg.MsgKey = result.Item3; gnModel.NoticeId = result.Item2; msg.NoticeModel = gnModel; chatVM.AddMessage(msg); })); } else { App.Current.Dispatcher.Invoke(new Action(() => { AppData.MainMV.TipMessage = "发布失败!"; if (!AppData.ordinaryGroupNoticeDic.ContainsKey(gn.GroupId)) { AppData.ordinaryGroupNoticeDic.Add(gn.GroupId, gn); } })); } }, SDKClient.SDKProperty.NoticeType.Common); } this.Close(); } else { if (isContainsBadWordTitle) { TitleContainsBadWord(gn.NoticeTitle); } else { if (isContainsBadWordContent) { ContentContainsBadWord(gn.NoticeContent); } } } } else { App.Current.Dispatcher.Invoke(new Action(() => { if (gn.NoticeType == 0) { if (AppData.ordinaryGroupNoticeDic.ContainsKey(gn.GroupId)) { this.DataContext = AppData.ordinaryGroupNoticeDic[gn.GroupId]; } } else { if (AppData.joinGroupNeedKnowDic.ContainsKey(gn.GroupId)) { this.DataContext = AppData.joinGroupNeedKnowDic[gn.GroupId]; } } //AppData.MainMV.TipMessage = "发布失败!"; })); return; } } //else //{ // App.Current.Dispatcher.Invoke(new Action(() => // { // AppData.MainMV.TipMessage = "请检查数据合法性!"; // })); //} } else { App.Current.Dispatcher.Invoke(new Action(() => { if (gn.NoticeType == 0) { if (!AppData.ordinaryGroupNoticeDic.ContainsKey(gn.GroupId)) { AppData.ordinaryGroupNoticeDic.Add(gn.GroupId, gn); } } else { if (!AppData.joinGroupNeedKnowDic.ContainsKey(gn.GroupId)) { AppData.joinGroupNeedKnowDic.Add(gn.GroupId, gn); } } AppData.MainMV.TipMessage = "网络异常,请检查网络设置!"; })); } break; } } }
/// <summary> /// 往前加载数据 /// </summary> /// <param name="count">增加加载数量</param> public void LoadPreviousMessages(Action <List <MessageModel> > completed, SDKClient.SDKProperty.MessageType msgType = SDKClient.SDKProperty.MessageType.all, DateTime?date = null, bool isReset = false, int count = 30) { if (isLoading) { completed?.Invoke(null); return; } Task.Run(() => { bool isForword = false; isLoading = true; if (isReset) { _hisMessages.Clear(); } MessageModel topMost = _hisMessages.FirstOrDefault(); List <SDKClient.DTO.MessageEntity> datas; //SDKClient.SDKProperty.chatType chatType = _targetChat.IsGroup ? SDKClient.SDKProperty.chatType.groupChat : SDKClient.SDKProperty.chatType.chat; if (topMost != null) { isForword = true; //datas = SDKClient.SDKClient.Instance.GetHistoryMsg(this.Model.ID, topMost.MsgKey, count, date, messageType: msgType, chatType: chatType); DateTime sendTime = topMost.SendTime; if (sendTime == null) { sendTime = DateTime.Now; } datas = SDKClient.SDKClient.Instance.GetHistoryMsgEntity(this.Model.ID, topMost.MsgKey, 10, sendTime, messageType: msgType); } else { //datas = SDKClient.SDKClient.Instance.GetHistoryMsg(this.Model.ID, count, date, messageType: msgType, chatType: chatType); datas = SDKClient.SDKClient.Instance.GetHistoryMsgEntity(this.Model.ID, string.Empty, 10, date, messageType: msgType); } List <MessageModel> previous = new List <MessageModel>(); int fromId; for (int i = 0; i < datas.Count; i++) { var m = datas[i]; //if (_hisMessages.Any(old => old.MsgKey == m.msgId)) //{ // continue; ; //} //System.Threading.Thread.CurrentThread.Join(5); if (int.TryParse(m.From, out fromId) && fromId > 0) { #region 消息类型 MessageType type; try { type = (MessageType)Enum.Parse(typeof(MessageType), m.MsgType.ToLower()); } catch { //Views.MessageBox.ShowBox("收到未知消息类型:" + m.msgType); continue; } #endregion IChat sender; bool isMine = AppData.Current.LoginUser.User.ID == fromId; //if (_targetChat.IsGroup) //群成员发送的消息,要现实的是成员在 我给好友备注的昵称>群成员自己设置的昵称>群成员名称 //{ // UserModel user = AppData.Current.GetUserModel(fromId); // GroupModel group = AppData.Current.GetGroupModel(m.RoomId); // sender = user.GetInGroupMember(group); //} //else //单聊好友发送的消息,只显示头像,不显示昵称(聊天框已有昵称显示) //{ sender = AppData.Current.GetUserModel(fromId); if (string.IsNullOrEmpty(sender.DisplayName)) { sender.DisplayName = m.SenderName; } if (type == MessageType.invitejoingroup) { type = MessageType.txt; } //} MessageModel msg = new MessageModel() { MsgKey = m.MsgId, Sender = sender, SendTime = m.MsgTime, IsMine = fromId != this.Model.ID, MsgType = type, }; msg.ResourceModel = new FileResourceModel() { Key = m.ResourceId, SmallKey = m.ResourcesmallId, Length = m.FileSize, FileName = Path.GetFileName(m.FileName), //如果文件名包含绝对路径,那么不从manjinba/file路径中文件 FullName = m.FileName, }; if (type == MessageType.redenvelopesreceive || type == MessageType.retract || (type == MessageType.redenvelopessendout && msg.IsMine))////不显示对方接收的红包和自己发送的红包消息 { continue; } string info = string.Empty; switch (type) { case MessageType.img: info = "[图片]"; msg.Content = m.FileName; if (AppData.MainMV.ChatListVM.SelectedItem is ChatViewModel chat) { var target = chat.Chat.Messages.FirstOrDefault(old => old.MsgKey == msg.MsgKey); if (target != null) { target.Sender = sender; msg = target; } } break; case MessageType.file: info = "[文件]"; msg.Content = m.FileName; break; case MessageType.onlinefile: if (File.Exists(m.Content)) { msg.Content = m.Content; msg.MsgType = MessageType.file; } else { var package = Util.Helpers.Json.ToObject <SDKClient.Model.MessagePackage>(m.Source); var body = package.data.body; //string onlineName = Path.GetFileName($"{package.data.body.fileName}"); //string onlinePath = Path.Combine(SDKClient.SDKClient.Instance.property.CurrentAccount.filePath, onlineName); //onlinePath = Helper.FileHelper.GetFileName(onlinePath, 1); //onlineName = Path.GetFileName(onlinePath); string onlinePath = m.FileName; string onlineName = Path.GetFileName(onlinePath); FileResourceModel onlineFile = new FileResourceModel() { Key = body.id, Length = body.fileSize, FileName = onlineName, //如果文件名包含绝对路径,那么不从manjinba/file路径中文件 FullName = onlinePath, RefInfo = new SDKClient.Model.OnlineFileBody() { id = body.id, fileSize = body.fileSize, fileName = onlineName, Port = body.Port, IP = body.IP, }, DBState = m.FileState }; msg.ResourceModel = onlineFile; msg.MsgType = MessageType.file; msg.Content = onlinePath; } info = "[文件]"; break; case MessageType.invitejoingroup: //info = "[群名片]"; info = msg.Content = "[群名片]"; break; case MessageType.audio: info = "[语音]"; msg.Content = msg.IsMine ? "您发送了一条语音消息,请在手机端查看" : "对方发送语音消息,请在手机端查看"; break; case MessageType.smallvideo: case MessageType.video: info = "[小视频]"; var videoPackage = Util.Helpers.Json.ToObject <SDKClient.Model.MessagePackage>(m.Source); var videoBody = videoPackage.data.body; string videoPath = m.FileName; string videoName = Path.GetFileName(videoPath); FileResourceModel video = new FileResourceModel() { Key = videoBody.id, PreviewKey = videoBody.previewId, Length = videoBody.fileSize, FileName = videoName, FullName = videoPath, RecordTime = videoBody.recordTime, }; video.PreviewImagePath = Path.Combine(SDKClient.SDKClient.Instance.property.CurrentAccount.imgPath, video.PreviewKey); msg.ResourceModel = video; msg.Content = videoPath; //if (AppData.MainMV.ChatListVM.SelectedItem is ChatViewModel chatVM) //{ // var target = chatVM.Chat.Messages.FirstOrDefault(old => old.MsgKey == msg.MsgKey); // if (target != null) // { // target.Sender = sender; // msg = target; // msg.ResourceModel = target.ResourceModel; // } //} break; case MessageType.txt: info = msg.Content = m.Content; break; case MessageType.retract: msg.MsgType = MessageType.notification; info = msg.Content = msg.IsMine ? "您撤回了一条消息" : "对方撤回了一条消息"; break; case MessageType.bigtxt: break; //case MessageType.onlinefile: // break; //case MessageType.setmemberpower: // var p = Util.Helpers.Json.ToObject<SetMemberPowerPackage>(m.Source); // msg.Sender = new UserModel() { DisplayName = "系统消息" }; // msg.MsgType = MessageType.notification; // int index = 0; // foreach (var item in p.data.userIds) // { // UserModel user = AppData.Current.GetUserModel(item); // var group = this._targetChat.Chat as GroupModel; // var member = user.GetInGroupMember(group); // if (string.IsNullOrEmpty(user.Name)) // { // SDKClient.SDKClient.Instance.GetUser(item); // } // if (p.data.type == "admin") // { // if (item == AppData.MainMV.LoginUser.ID) // { // msg.Content = "你成为群管理员"; // } // else // { // if (string.IsNullOrEmpty(member.DisplayName)) // { // msg.Content = $"[{p.data.userNames[index]}] 成为群管理员"; // } // else // { // msg.Content = string.Format("[{0}] 成为群管理员", member.DisplayName); // } // } // member.IsManager = true; // } // else // { // if (item == AppData.MainMV.LoginUser.ID) // { // msg.Content = "你被取消群管理员"; // } // else // { // if (string.IsNullOrEmpty(member.DisplayName)) // { // msg.Content = $"[{p.data.userNames[index]}] 被取消群管理员"; // } // else // { // msg.Content = string.Format("[{0}] 被取消群管理员", member.DisplayName); // } // } // member.IsManager = false; // } // index++; // } // break; //case MessageType.dismissgroup: // var dismissGroupPackage = Util.Helpers.Json.ToObject<DismissGroupPackage>(m.Source); // this.ShowDismissMsg(dismissGroupPackage, isForward); // continue; case MessageType.addgroupnotice: var noticePackage = Util.Helpers.Json.ToObject <SDKClient.Model.MessagePackage>(m.Source); var noticeData = noticePackage.data.body; GroupNoticeModel groupNoticeModel = new GroupNoticeModel() { NoticeTitle = noticeData.title, NoticeId = noticeData.noticeId }; msg.Content = noticeData.content; msg.SendTime = noticeData.publishTime ?? DateTime.Now; msg.NoticeModel = groupNoticeModel; info = msg.NoticeModel.NoticeTitle; if (this.Model is ChatModel chatModell) { if (chatModell.IsGroup) { GroupModel groupModell = chatModell.Chat as GroupModel; int groupId = groupModell.ID; msg.NoticeModel.GroupMId = groupId; } } break; case MessageType.goods: info = "[商品链接]"; msg.MsgType = MessageType.txt; msg.Content = m.Data.afterurl; break; case MessageType.order: info = "[订单链接]"; msg.MsgType = MessageType.txt; msg.Content = m.Data.afterurl; break; case MessageType.custom: info = "[商品链接]"; msg.MsgType = MessageType.txt; msg.Content = m.Data.afterurl; break; default: msg.Sender = new UserModel() { DisplayName = "系统消息" }; msg.MsgType = MessageType.notification; info = msg.Content = m.Content; break; } //if (isForword) //{ // previous.Insert(0, msg); //} //else { previous.Add(msg); } } } previous.Reverse(); //if (isForword) //{ // previous.Reverse(); //} _hisMessages.InsertRange(0, previous); completed?.Invoke(previous); isLoading = false; }); }