void OnChatState(Message msg)
{
if (!ShowChatStates) {
return;
}
if (msg.Body != null) {
return;
}
switch (msg.Type) {
case XmppMessageType.chat:
case XmppMessageType.headline:
case XmppMessageType.normal:
{
var chat = GetChat(msg.From, ChatType.Person) as PersonChatModel;
bool isNew = false;
// no full jid chat
if (chat == null) {
// create chat
chat = GetOrCreatePersonChat(msg.From.Bare, out isNew);
if (isNew) {
if (!OpenNewChatOnChatState) {
return;
}
if (msg.Chatstate != Chatstate.composing) {
// there is NO reason to open a new chat window for
// a chatstate other than composing
return;
}
Session.AddChat(chat);
}
}
var builder = CreateMessageBuilder();
switch (msg.Chatstate) {
case Chatstate.composing:
builder.AppendChatState(chat.Person, MessageType.ChatStateComposing);
break;
case Chatstate.paused:
builder.AppendChatState(chat.Person, MessageType.ChatStatePaused);
break;
default:
builder.AppendChatState(chat.Person, MessageType.ChatStateReset);
break;
}
Session.AddMessageToChat(chat, builder.ToMessage());
if (isNew) {
Session.SyncChat(chat);
}
}
break;
default:
break;
}
}