⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 messagehistorymanager.cs

📁 飞信的收发使用csharp进行开发
💻 CS
📖 第 1 页 / 共 2 页
字号:
            }
        }

        public string GetLatestMessage(Imps.Client.Core.Contact contact)
        {
            string content = "";
            UiErrorHelper.HandEventSafely(this._framework, delegate {
                List<Imps.Client.Pc.Message> latestMessageList = this.GetLatestMessageList(contact);
                if (latestMessageList.Count > 0)
                {
                    StringBuilder builder = new StringBuilder();
                    foreach (Imps.Client.Pc.Message message in latestMessageList)
                    {
                        builder.Append(string.Format(StringTable.Conversation.MsgSendIMFormat, message.From, message.Time, message.Content));
                    }
                    content = builder.ToString();
                }
            });
            return content;
        }

        public List<Imps.Client.Pc.Message> GetLatestMessageList(Imps.Client.Core.Contact contact)
        {
            int num = 5;
            List<Imps.Client.Pc.Message> list = new List<Imps.Client.Pc.Message>();
            try
            {
                string messageHistoryPath = this.GetMessageHistoryPath(contact);
                if (System.IO.File.Exists(messageHistoryPath))
                {
                    XmlDocument document = new XmlDocument();
                    try
                    {
                        document.Load(messageHistoryPath);
                    }
                    catch (Exception)
                    {
                        System.IO.File.Delete(messageHistoryPath);
                        return list;
                    }
                    XmlNodeList childNodes = null;
                    if (document.DocumentElement.ChildNodes.Count < num)
                    {
                        childNodes = document.DocumentElement.ChildNodes;
                    }
                    else
                    {
                        childNodes = document.DocumentElement.SelectNodes(string.Format("Message[position()>{0} and position()<={1}]", document.DocumentElement.ChildNodes.Count - num, document.DocumentElement.ChildNodes.Count));
                    }
                    foreach (XmlNode node in childNodes)
                    {
                        list.Add(this.GetMessageByXmlNode(node));
                    }
                }
                return list;
            }
            catch (Exception exception)
            {
                ClientLogger.WriteException(exception);
            }
            return list;
        }

        private Imps.Client.Pc.Message GetMessageByXmlNode(XmlNode node)
        {
            string str = node.Attributes["MessageID"].Value;
            string str2 = node.Attributes["From"].Value;
            string str3 = node.Attributes["Date"].Value;
            string str4 = node.Attributes["Time"].Value;
            string str5 = "";
            if (node.Attributes["FromUri"] != null)
            {
                str5 = node.Attributes["FromUri"].Value;
            }
            string str6 = "";
            XmlNode node2 = node.SelectSingleNode("To");
            if (node2 != null)
            {
                foreach (XmlNode node3 in node2.ChildNodes)
                {
                    str6 = str6 + node3.Attributes["FriendlyName"].Value + ",";
                }
                if (str6.EndsWith(","))
                {
                    str6 = str6.Substring(0, str6.Length - 1);
                }
            }
            string innerText = node.SelectSingleNode("Text").InnerText;
            Imps.Client.Pc.Message message = new Imps.Client.Pc.Message();
            message.MessageId = str;
            message.From = str2;
            message.To = str6;
            message.Date = str3;
            message.Time = str4;
            message.Content = innerText;
            message.FromUri = str5;
            return message;
        }

        private string GetMessageHistoryPath(Imps.Client.Core.Contact contact)
        {
            return ConversationManager.GetContactMessageHistoryPath(this.CurrentUser, contact);
        }

        public void InitContactMessageHistoryList(Imps.Client.Core.Contact contact, IList<Imps.Client.Pc.Message> list, string key)
        {
            try
            {
                string messageHistoryPath = this.GetMessageHistoryPath(contact);
                if (System.IO.File.Exists(messageHistoryPath))
                {
                    XmlNodeList childNodes;
                    XmlDocument document = new XmlDocument();
                    document.Load(messageHistoryPath);
                    if (!string.IsNullOrEmpty(key))
                    {
                        childNodes = document.DocumentElement.SelectNodes("//Message[contains(Text,'" + key + "')]");
                    }
                    else
                    {
                        childNodes = document.DocumentElement.ChildNodes;
                    }
                    foreach (XmlNode node in childNodes)
                    {
                        Imps.Client.Pc.Message messageByXmlNode = this.GetMessageByXmlNode(node);
                        messageByXmlNode.OwnerContact = contact;
                        list.Add(messageByXmlNode);
                    }
                }
            }
            catch (Exception exception)
            {
                ClientLogger.WriteException(exception);
            }
        }

        public void ShowMessageHistory(IWin32Window owner)
        {
            this.ShowMessageHistory(owner, null);
        }

        public void ShowMessageHistory(IWin32Window owner, string contactUri)
        {
            UiErrorHelper.HandEventSafely(this._framework, delegate {
                FormClosedEventHandler handler = null;
                FormClosedEventHandler handler2 = null;
                Imps.Client.Core.Contact contact = null;
                if (contactUri != null)
                {
                    contact = this.CurrentUser.ContactList.Contacts.FindContact(contactUri);
                }
                MessageHistoryForm form = null;
                if (contact != null)
                {
                    if (this.MsgHisForms.ContainsKey(contact))
                    {
                        form = this.MsgHisForms[contact];
                        form.Activate();
                        Imps.Client.Utils.Win32.NativeMethods.ShowWindow(form.Handle, 9);
                    }
                    else
                    {
                        form = new MessageHistoryForm(this._framework, contact);
                        this.MsgHisForms.Add(contact, form);
                        if (handler == null)
                        {
                            handler = delegate {
                                this.MsgHisForms.Remove(contact);
                            };
                        }
                        form.FormClosed += handler;
                        form.Show();
                    }
                }
                else if ((this._msgForm != null) && !this._msgForm.IsDisposed)
                {
                    this._msgForm.Activate();
                    Imps.Client.Utils.Win32.NativeMethods.ShowWindow(this._msgForm.Handle, 9);
                }
                else
                {
                    this._msgForm = new MessageHistoryForm(this._framework, null);
                    this._msgForm.Show();
                    if (handler2 == null)
                    {
                        handler2 = delegate {
                            this._msgForm = null;
                        };
                    }
                    this._msgForm.FormClosed += handler2;
                }
            });
        }

        private Imps.Client.Core.User CurrentUser
        {
            get
            {
                return this._framework.AccountManager.CurrentUser;
            }
        }

        private Dictionary<Imps.Client.Core.Contact, MessageHistoryForm> MsgHisForms
        {
            get
            {
                if (this._msgHisForms == null)
                {
                    this._msgHisForms = new Dictionary<Imps.Client.Core.Contact, MessageHistoryForm>();
                }
                return this._msgHisForms;
            }
        }

        private delegate string DeleteXmlContentDelegate();
    }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -