コード例 #1
0
 private void AppendRhythmStorm(BiliLiveJsonParser.Danmaku danmaku)
 {
     rhythmStormCount++;
     Dispatcher.Invoke(new Action(() =>
     {
         RhythmStormTextBox.Text   = danmaku.Content;
         RhythmStormCountBox.Text  = " x" + rhythmStormCount;
         RhythmStormBox.Visibility = Visibility.Visible;
         ((Storyboard)Resources["ShowRhythmStorm"]).Begin();
     }));
     lastRhythmTime = DateTime.Now;
     if (rhythmStormThread == null)
     {
         rhythmStormThread = new Thread(delegate()
         {
             while (true)
             {
                 if (DateTime.Now > lastRhythmTime.AddSeconds(ConfigManager.CurrentConfig.IntegrationTime / 1000))
                 {
                     rhythmStormCount  = 0;
                     rhythmStormThread = null;
                     break;
                 }
                 Thread.Sleep(1);
             }
         });
         rhythmStormThread.Start();
     }
 }
コード例 #2
0
 private void SpeakDanmaku(BiliLiveJsonParser.Danmaku item)
 {
     if (speechProcessor.IsAvalable)
     {
         string ssmlDoc = SsmlHelper.Danmaku(item.Sender.Name, item.Message);
         speechProcessor.Speak(ssmlDoc);
     }
 }
コード例 #3
0
        private void AppendDanmaku(BiliLiveJsonParser.Danmaku danmaku)
        {
            if (danmaku.Type != 0)
            {
                AppendRhythmStorm(danmaku);
                return;
            }
            Dispatcher.Invoke(new Action(() =>
            {
                TextBlock textBlock = new TextBlock()
                {
                    TextWrapping = TextWrapping.Wrap
                };

                Run user = new Run()
                {
                    Text       = danmaku.Sender.Name,
                    Foreground = new SolidColorBrush((Color)ColorConverter.ConvertFromString("#FFADBCD9")),
                    Tag        = danmaku.Sender.Id
                };
                user.MouseLeftButtonDown += User_MouseLeftButtonDown;
                textBlock.Inlines.Add(user);

                textBlock.Inlines.Add(new Run()
                {
                    Text = " : ", Foreground = new SolidColorBrush((Color)ColorConverter.ConvertFromString("#FF818181"))
                });

                Run content = new Run()
                {
                    Text       = danmaku.Content,
                    Foreground = new SolidColorBrush((Color)ColorConverter.ConvertFromString("#FFFFFFFF")),
                    Tag        = danmaku.Sender.Name + " : "
                };
                content.MouseLeftButtonDown += Content_MouseLeftButtonDown;
                textBlock.Inlines.Add(content);

                ListBoxItem listBoxItem = new ListBoxItem()
                {
                    Content = textBlock, HorizontalContentAlignment = HorizontalAlignment.Left, VerticalContentAlignment = VerticalAlignment.Center
                };
                listBoxItem.MouseRightButtonUp += ListBoxItem_MouseRightButtonUp;
                listBoxItem.MouseLeftButtonUp  += ListBoxItem_MouseLeftButtonUp;
                listBoxItem.MouseLeave         += ListBoxItem_MouseLeave;
                listBoxItem.Loaded             += ListBoxItem_Loaded;
                DanmakuBox.Items.Add(listBoxItem);
                RefreshScroll(DanmakuBox);
            }));
        }
コード例 #4
0
        public void AppendDanmaku(BiliLiveJsonParser.Danmaku item)
        {
            Dispatcher.Invoke(() =>
            {
                DanmakuPanel.Children.Add(new Danmaku(item));
                if (!DanmakuScrollViewer.IsMouseOver)
                {
                    DanmakuScrollViewer.ScrollToBottom();
                }
                CleanDanmakuTime = DateTime.UtcNow.AddSeconds(0.2);
            });

            if (CleanDanmakuTask == null || CleanDanmakuTask.IsCompleted)
            {
                CleanDanmakuTask = Task.Factory.StartNew(CleanPanel);
            }
        }
コード例 #5
0
        public Danmaku(BiliLiveJsonParser.Danmaku danmaku)
        {
            InitializeComponent();

            SenderBox.Text  = danmaku.Sender.Name;
            MessageBox.Text = danmaku.Message;

            UserId = danmaku.Sender.Id;

            FaceImage.Source = null;
            //BitmapImage bitmapImage = FaceLoader.LoadFormCache(UserId);
            //FaceImage.Source = bitmapImage;
            //if (!FaceLoader.LoadFormCache(this))
            //    //SetFace(bitmapImage);
            //    //if(bitmapImage == null)
            //    FaceLoader.Enqueue(this);
            FaceLoader.LoadFace(this);
        }
コード例 #6
0
        public void ProcessItem(BiliLiveJsonParser.IItem item)
        {
            switch (item.Cmd)
            {
            case BiliLiveJsonParser.Cmds.DANMU_MSG:
                BiliLiveJsonParser.Danmaku danmaku = (BiliLiveJsonParser.Danmaku)item;
                if (danmaku.Type == 0)
                {
                    if (OptionDict[DanmakuSpeechConfig.SpeechFilterOptions.DanmakuSpeech])
                    {
                        SpeakDanmaku(danmaku);
                    }
                }
                break;

            case BiliLiveJsonParser.Cmds.SUPER_CHAT_MESSAGE:
                BiliLiveJsonParser.SuperChat superChat = (BiliLiveJsonParser.SuperChat)item;
                if (OptionDict[DanmakuSpeechConfig.SpeechFilterOptions.SuperChatSpeech])
                {
                    SpeakSuperChat(superChat);
                }
                break;

            case BiliLiveJsonParser.Cmds.SEND_GIFT:
                BiliLiveJsonParser.Gift gift = (BiliLiveJsonParser.Gift)item;
                if (!giftCacheManager.AppendToExist(gift))
                {
                    giftCacheManager.AppendCache(gift);
                }
                break;

            case BiliLiveJsonParser.Cmds.COMBO_SEND:
                BiliLiveJsonParser.ComboSend comboSend = (BiliLiveJsonParser.ComboSend)item;
                if (OptionDict[DanmakuSpeechConfig.SpeechFilterOptions.ComboSendSpeech])
                {
                    SpeakComboSend(comboSend);
                }
                break;
            }
        }
コード例 #7
0
        public void AppendRythmStorm(BiliLiveJsonParser.Danmaku item)
        {
            Dispatcher.Invoke(() =>
            {
                RythmStormPanel.Children.Add(new Danmaku(item));
                if (!RythmStormScrollViewer.IsMouseOver)
                {
                    RythmStormScrollViewer.ScrollToBottom();
                }
                CleanRythmStormTime = DateTime.UtcNow.AddSeconds(0.2);
                HideRythmStormTime  = DateTime.UtcNow.AddSeconds(5);
            });

            if (CleanRythmStormTask == null || CleanRythmStormTask.IsCompleted)
            {
                CleanRythmStormTask = Task.Factory.StartNew(CleanRythmStorm);
            }
            if (ShowRythmStormTask == null || ShowRythmStormTask.IsCompleted)
            {
                ShowRythmStormTask = Task.Factory.StartNew(ShowRythmStorm);
            }
        }
コード例 #8
0
        public void ProcessItem(BiliLiveJsonParser.IItem item)
        {
            if (Window == null)
            {
                return;
            }

            switch (item.Cmd)
            {
            case BiliLiveJsonParser.Cmds.DANMU_MSG:
                BiliLiveJsonParser.Danmaku danmaku = (BiliLiveJsonParser.Danmaku)item;
                if (danmaku.Type == 0)
                {
                    if (OptionDict[DanmakuShowConfig.DisplayFilterOptions.Danmaku])
                    {
                        Window.AppendDanmaku(danmaku);
                    }
                }
                else
                if (OptionDict[DanmakuShowConfig.DisplayFilterOptions.RythmStorm])
                {
                    Window.AppendRythmStorm(danmaku);
                }
                break;

            case BiliLiveJsonParser.Cmds.SUPER_CHAT_MESSAGE:
                BiliLiveJsonParser.SuperChat superChat = (BiliLiveJsonParser.SuperChat)item;
                if (OptionDict[DanmakuShowConfig.DisplayFilterOptions.SuperChat])
                {
                    Window.AppendSuperChat(superChat);
                }
                break;

            case BiliLiveJsonParser.Cmds.SEND_GIFT:
                BiliLiveJsonParser.Gift gift = (BiliLiveJsonParser.Gift)item;
                if (!giftCacheManager.AppendToExist(gift))
                {
                    GiftCacheManager.GiftCache giftCache = giftCacheManager.AppendCache(gift);
                    if (gift.CoinType == "gold" && OptionDict[DanmakuShowConfig.DisplayFilterOptions.GoldenGift])
                    {
                        Window.AppendGift(giftCache);
                    }
                    else if (gift.CoinType == "silver" && OptionDict[DanmakuShowConfig.DisplayFilterOptions.SilverGift])
                    {
                        Window.AppendGift(giftCache);
                    }
                }
                break;

            case BiliLiveJsonParser.Cmds.COMBO_SEND:
                BiliLiveJsonParser.ComboSend comboSend = (BiliLiveJsonParser.ComboSend)item;
                if (OptionDict[DanmakuShowConfig.DisplayFilterOptions.ComboSend])
                {
                    Window.AppendComboSend(comboSend);
                }
                break;

            case BiliLiveJsonParser.Cmds.WELCOME:
                BiliLiveJsonParser.Welcome welcome = (BiliLiveJsonParser.Welcome)item;
                if (OptionDict[DanmakuShowConfig.DisplayFilterOptions.Welcome])
                {
                    Window.AppendWelcome(welcome);
                }
                break;

            case BiliLiveJsonParser.Cmds.WELCOME_GUARD:
                BiliLiveJsonParser.WelcomeGuard welcomeGuard = (BiliLiveJsonParser.WelcomeGuard)item;
                if (OptionDict[DanmakuShowConfig.DisplayFilterOptions.WelcomeGuard])
                {
                    Window.AppendWelcomeGuard(welcomeGuard);
                }
                break;

            case BiliLiveJsonParser.Cmds.GUARD_BUY:
                BiliLiveJsonParser.GuardBuy guardBuy = (BiliLiveJsonParser.GuardBuy)item;
                if (OptionDict[DanmakuShowConfig.DisplayFilterOptions.GuardBuy])
                {
                    Window.AppendGuardBuy(guardBuy);
                }
                break;

            case BiliLiveJsonParser.Cmds.INTERACT_WORD:
                BiliLiveJsonParser.InteractWord interactWord = (BiliLiveJsonParser.InteractWord)item;
                if (interactWord.MessageType == BiliLiveJsonParser.InteractWord.MessageTypes.Entry && OptionDict[DanmakuShowConfig.DisplayFilterOptions.InteractEntry])
                {
                    Window.AppendInteractWord(interactWord);
                }
                else if (interactWord.MessageType == BiliLiveJsonParser.InteractWord.MessageTypes.Attention && OptionDict[DanmakuShowConfig.DisplayFilterOptions.InteractAttention])
                {
                    Window.AppendInteractWord(interactWord);
                }
                else if (interactWord.MessageType == BiliLiveJsonParser.InteractWord.MessageTypes.Share && OptionDict[DanmakuShowConfig.DisplayFilterOptions.InteractShare])
                {
                    Window.AppendInteractWord(interactWord);
                }
                else if (interactWord.MessageType == BiliLiveJsonParser.InteractWord.MessageTypes.SpecialAttention && OptionDict[DanmakuShowConfig.DisplayFilterOptions.InteractSpecialAttention])
                {
                    Window.AppendInteractWord(interactWord);
                }
                else if (interactWord.MessageType == BiliLiveJsonParser.InteractWord.MessageTypes.MutualAttention && OptionDict[DanmakuShowConfig.DisplayFilterOptions.InteractMutualAttention])
                {
                    Window.AppendInteractWord(interactWord);
                }
                break;

            case BiliLiveJsonParser.Cmds.ROOM_BLOCK_MSG:
                BiliLiveJsonParser.RoomBlock roomBlock = (BiliLiveJsonParser.RoomBlock)item;
                if (OptionDict[DanmakuShowConfig.DisplayFilterOptions.RoomBlock])
                {
                    Window.AppendRoomBlock(roomBlock);
                }
                break;
            }
        }