Exemplo n.º 1
0
        public Gift(BiliLiveJsonParser.Gift gift)
        {
            InitializeComponent();

            SenderBox.Text = gift.Sender.Name;
            ActionBox.Text = gift.Action;
            GiftBox.Text   = gift.GiftName;
            if (gift.CoinType == "gold")
            {
                // "gold"
                GiftBox.Foreground = GoldBrush;
            }
            else
            {
                // "silver"
                GiftBox.Foreground = SilverBrush;
            }
            Number = gift.Number;

            UserId = gift.Sender.Id;

            FaceImage.Source = null;
            //FaceImage.Source = FaceLoader.LoadFace(gift.Sender.Id, gift.FaceUri);
            FaceLoader.LoadFaceWithKnownUri(this, gift.FaceUri);
        }
Exemplo n.º 2
0
        public GiftCache AppendCache(BiliLiveJsonParser.Gift gift)
        {
            GiftCache giftCache = new GiftCache(DateTime.UtcNow.AddSeconds(CacheExpireDuration))
            {
                UserId   = gift.Sender.Id,
                Username = gift.Sender.Name,
                GiftId   = gift.GiftId,
                GiftName = gift.GiftName,
                Number   = gift.Number,
                CoinType = gift.CoinType,
                Action   = gift.Action,
                FaceUri  = gift.FaceUri
            };

            GiftCaches.Add(giftCache);
            StartCacheManageThread();
            return(giftCache);
        }
        public void AppendGift(BiliLiveJsonParser.Gift item)
        {
            Dispatcher.Invoke(() =>
            {
                //if (Gift.AppendGiftToExist(item))
                //    return;
                DanmakuPanel.Children.Add(new Gift(item));
                if (!DanmakuScrollViewer.IsMouseOver)
                {
                    DanmakuScrollViewer.ScrollToBottom();
                }
                CleanDanmakuTime = DateTime.UtcNow.AddSeconds(0.2);
            });

            if (CleanDanmakuTask == null || CleanDanmakuTask.IsCompleted)
            {
                CleanDanmakuTask = Task.Factory.StartNew(CleanPanel);
            }
        }
Exemplo n.º 4
0
 public bool AppendToExist(BiliLiveJsonParser.Gift gift)
 {
     CleanCache();
     lock (GiftCaches)
     {
         foreach (GiftCache cachedGift in GiftCaches)
         {
             if (gift.Sender.Id == cachedGift.UserId && gift.GiftId == cachedGift.GiftId)
             {
                 cachedGift.AppendNumber(gift.Number, DateTime.UtcNow.AddSeconds(CacheExpireDuration));
                 cachedGift.OnUpdate();
                 // Move to the end of the list
                 GiftCaches.Remove(cachedGift);
                 GiftCaches.Add(cachedGift);
                 return(true);
             }
         }
     }
     return(false);
 }
        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;
            }
        }
Exemplo n.º 6
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;
            }
        }
Exemplo n.º 7
0
        private void AppendGift(BiliLiveJsonParser.Gift gift)
        {
            if (IsLatestSurvival && latestGift != null && latestGift.Sender.Id == gift.Sender.Id && latestGift.GiftName == gift.GiftName)
            {
                Dispatcher.Invoke(new Action(() =>
                {
                    TextBlock textBlock = (TextBlock)latestGiftListBoxItem.Content;
                    Run run             = (Run)textBlock.Inlines.LastInline;
                    uint number         = uint.Parse(run.Text);
                    uint newNumber      = number + gift.Number;
                    run.Text            = newNumber.ToString();

                    ListBoxItem_Loaded(latestGiftListBoxItem, null);
                }));
            }
            else
            {
                Dispatcher.Invoke(new Action(() =>
                {
                    TextBlock textBlock = new TextBlock()
                    {
                        TextWrapping = TextWrapping.Wrap
                    };

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

                    textBlock.Inlines.Add(new Run()
                    {
                        Text = Application.Current.Resources["Sent"].ToString(), Foreground = new SolidColorBrush((Color)ColorConverter.ConvertFromString("#FFCBDAF7"))
                    });
                    textBlock.Inlines.Add(new Run()
                    {
                        Text = gift.GiftName, Foreground = new SolidColorBrush((Color)ColorConverter.ConvertFromString("#FFFA82BE"))
                    });
                    textBlock.Inlines.Add(new Run()
                    {
                        Text = " x", Foreground = new SolidColorBrush((Color)ColorConverter.ConvertFromString("#FF64D2F0"))
                    });
                    textBlock.Inlines.Add(new Run()
                    {
                        Text = gift.Number.ToString(), Foreground = new SolidColorBrush((Color)ColorConverter.ConvertFromString("#FF64D2F0"))
                    });

                    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;
                    GiftBox.Items.Add(listBoxItem);
                    RefreshScroll(GiftBox);
                    latestGiftListBoxItem = listBoxItem;
                }));
            }
            latestGift = gift;

            latestGiftTime   = DateTime.Now;
            IsLatestSurvival = true;
            if (latestGiftThread == null)
            {
                latestGiftThread = new Thread(delegate()
                {
                    while (true)
                    {
                        if (DateTime.Now > latestGiftTime.AddSeconds(ConfigManager.CurrentConfig.IntegrationTime / 1000))
                        {
                            IsLatestSurvival = false;
                            latestGiftThread = null;
                            break;
                        }
                        Thread.Sleep(1);
                    }
                });
                latestGiftThread.Start();
            }
        }