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); }
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); } }
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; } }
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; } }
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(); } }