Esempio n. 1
0
        /// <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;
            });
        }
Esempio n. 2
0
        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;
                }
            }
        }
Esempio n. 3
0
        /// <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;
            });
        }