Beispiel #1
0
 public void AddChat(params WeChatUser[] chat)
 {
     foreach (var item in chat)
     {
         if (ChatList.Any(p => p.UserName == item.UserName))
         {
             continue;
         }
         ChatList.Add(item);
         ChatImageDownloadService.Add(item);
     }
 }
Beispiel #2
0
        public void ModChat(params WeChatUser[] chat)
        {
            var selected = SelectedItem;

            foreach (var item in chat)
            {
                var local = ChatList.FirstOrDefault(p => p.UserName == item.UserName);
                if (local != null)
                {
                    if (SelectedItem == local)
                    {
                        selected = item;
                    }

                    item.MessageList.AddRange(local.MessageList);  //将本地聊天的信息拷贝过来
                    ChatList.Remove(local);
                }
                ChatList.Insert(0, item);  //将修改后的聊天放在首位
                ChatImageDownloadService.Add(item);
            }
            SelectedItem = selected;
        }
Beispiel #3
0
        public void SyncMessage(params WeChatMessage[] messages)
        {
            var selected = SelectedItem;

            foreach (var msg in messages)
            {
                if (msg.IsLoadMoreChats)
                {
                    continue;
                }
                string chatUserName = msg.IsReceive ? msg.FromUserName : msg.ToUserName;
                var    chat         = ChatList.FirstOrDefault(p => p.UserName == chatUserName);
                if (chat != null)
                {
                    //消息在当前聊天列表中产生
                    ChatList.Move(ChatList.IndexOf(chat), 0);
                }
                else
                {
                    //当前列表没有找到
                    chat = ContactListManager.FindContact(chatUserName);
                    if (chat == null)
                    {
                        continue;
                    }
                    ChatList.Insert(0, chat);
                    ChatImageDownloadService.Add(chat);
                }
                if (msg.MsgType != 51)  //51类型消息不插入消息列表
                {
                    chat.LastMessage   = msg.Content;
                    chat.LastShortTime = msg.ShortTime;
                    msg.IsRoom         = chat.IsRoomContact();

                    if (msg.MsgType != 10000) //如果不是系统消息
                    {
                        if (msg.IsReceive)    //只有收到消息需要显示名称
                        {
                            //是收到消息
                            if (msg.IsRoom)
                            {
                                //如果是群消息,且不是邀请人进群的消息
                                var member = chat.MemberList.FirstOrDefault(p => msg.Content.StartsWith(p.UserName));
                                if (member == null)
                                {
                                    continue;
                                }
                                msg.Content          = msg.Content.Replace(member.UserName + ":<br/>", "");
                                chat.LastMessage     = member.ShowName + ":" + msg.Content;
                                msg.FromUserName     = member.UserName;
                                msg.FromUserShowName = member.ShowName;
                            }
                            else
                            {
                                //不是群消息则显示对方显示名称
                                msg.FromUserShowName = chat.ShowName;
                            }
                        }

                        //处理消息头像
                        msg.Uri = msg.FromUserName.GetIconUrl();
                        MessageImageDownloadService.Add(msg);

                        var last = chat.MessageList.Where(p => p.ShowShortTime).LastOrDefault();
                        if (last == null || (msg.CreateDateTime - last.CreateDateTime).Minutes > 3)  //如果新消息之前的消息不存在或者不在三分钟内,则显示时间
                        {
                            msg.ShowShortTime = true;
                        }
                    }
                    chat.MessageList.Add(msg);
                }
            }
            SelectedItem = selected;
        }