📄 messagehistorymanager.cs
字号:
}
}
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 + -