Smuxi.Engine.XmppProtocolManager.OnChatState C# (CSharp) Method

OnChatState() private method

private OnChatState ( Message msg ) : void
msg Message
return void
        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;
            }
        }