// Append list item

        private void AppendHistory(BiliLiveJsonParser.Item item)
        {
            if (!(item.GetType() == typeof(BiliLiveJsonParser.Danmaku) && ((BiliLiveJsonParser.Danmaku)item).Type != 0))
            {
                ConfigManager.CurrentStatus.RecievedItems.Add(item);
                while (ConfigManager.CurrentStatus.RecievedItems.Count > ConfigManager.CurrentConfig.HistoryCapacity)
                {
                    ConfigManager.CurrentStatus.RecievedItems.RemoveAt(0);
                }
            }
        }
        // Listener recieved

        private void BiliLiveListener_JsonRecieved(Json.Value json)
        {
            Log += json.ToString() + "\r\n";
            if (debugWindow != null)
            {
                debugWindow.AppendLog(json.ToString());
            }
            BiliLiveJsonParser.Item item = BiliLiveJsonParser.Parse(json);
            AppendItem(item);
            AppendHistory(item);
        }
        private void AppendItem(BiliLiveJsonParser.Item item)
        {
            if (item != null)
            {
                // If not Rhythm storm
                if (!(item.GetType() == typeof(BiliLiveJsonParser.Danmaku) && ((BiliLiveJsonParser.Danmaku)item).Type != 0))
                {
                    Dispatcher.Invoke(new Action(() =>
                    {
                        if (item.GetType() == typeof(BiliLiveJsonParser.Danmaku) || item.GetType() == typeof(BiliLiveJsonParser.Welcome) || item.GetType() == typeof(BiliLiveJsonParser.WelcomeGuard) || item.GetType() == typeof(BiliLiveJsonParser.RoomBlock))
                        {
                            while (DanmakuBox.Items.Count >= ConfigManager.CurrentConfig.ListCapacity)
                            {
                                RemoveFirstItem(DanmakuBox);
                            }
                        }
                        else
                        {
                            while (GiftBox.Items.Count >= ConfigManager.CurrentConfig.ListCapacity)
                            {
                                RemoveFirstItem(GiftBox);
                            }
                        }
                    }));
                }

                switch (item.Cmd)
                {
                case BiliLiveJsonParser.Item.Cmds.LIVE:
                case BiliLiveJsonParser.Item.Cmds.PREPARING:
                    biliLiveInfo.UpdateInfo(ConfigManager.CurrentConfig.Timeout);
                    break;

                case BiliLiveJsonParser.Item.Cmds.DANMU_MSG:
                    AppendDanmaku((BiliLiveJsonParser.Danmaku)item);
                    break;

                case BiliLiveJsonParser.Item.Cmds.SEND_GIFT:
                    AppendGift((BiliLiveJsonParser.Gift)item);
                    break;

                case BiliLiveJsonParser.Item.Cmds.COMBO_END:
                    AppendGiftCombo((BiliLiveJsonParser.GiftCombo)item);
                    break;

                case BiliLiveJsonParser.Item.Cmds.WELCOME:
                    AppendWelcome((BiliLiveJsonParser.Welcome)item);
                    break;

                case BiliLiveJsonParser.Item.Cmds.WELCOME_GUARD:
                    AppendWelcomeGuard((BiliLiveJsonParser.WelcomeGuard)item);
                    break;

                case BiliLiveJsonParser.Item.Cmds.ROOM_BLOCK_MSG:
                    AppendRoomBlock((BiliLiveJsonParser.RoomBlock)item);
                    break;

                case BiliLiveJsonParser.Item.Cmds.GUARD_BUY:
                    AppendGuardBuy((BiliLiveJsonParser.GuardBuy)item);
                    break;

                case BiliLiveJsonParser.Item.Cmds.UNKNOW:
                    //AppendMessage(item.Json.ToString(), (Color)ColorConverter.ConvertFromString("#FFC8C83C"));
                    break;

                default:
                    break;
                }
            }
        }