public override async Task <OverlayItemBase> GetProcessedItem(UserViewModel user, IEnumerable <string> arguments, Dictionary <string, string> extraSpecialIdentifiers) { OverlayCustomHTMLItem item = this.GetCopy(); item.HTMLText = await this.PerformReplacement(item.HTMLText, user, arguments, extraSpecialIdentifiers); return(item); }
public override async Task <OverlayItemBase> GetProcessedItem(UserViewModel user, IEnumerable <string> arguments, Dictionary <string, string> extraSpecialIdentifiers) { if (ChannelSession.Services.SongRequestService != null && this.songRequestsUpdated) { this.songRequestsUpdated = false; List <SongRequestItem> songRequests = new List <SongRequestItem>(); SongRequestItem currentlyPlaying = await ChannelSession.Services.SongRequestService.GetCurrentlyPlaying(); if (currentlyPlaying != null) { songRequests.Add(currentlyPlaying); } IEnumerable <SongRequestItem> allSongRequests = this.testSongRequestsList; if (this.testSongRequestsList.Count == 0) { allSongRequests = await ChannelSession.Services.SongRequestService.GetAllRequests(); } foreach (SongRequestItem songRequest in allSongRequests) { if (!songRequests.Any(sr => sr.Equals(songRequest))) { songRequests.Add(songRequest); } } this.SongRequestUpdates.Clear(); this.currentSongRequests.Clear(); OverlaySongRequests copy = this.Copy <OverlaySongRequests>(); for (int i = 0; i < songRequests.Count() && i < this.TotalToShow; i++) { this.currentSongRequests.Add(songRequests.ElementAt(i)); } while (this.currentSongRequests.Count > 0) { OverlayCustomHTMLItem overlayItem = (OverlayCustomHTMLItem)await base.GetProcessedItem(user, arguments, extraSpecialIdentifiers); copy.SongRequestUpdates.Add(new OverlaySongRequestItem() { HTMLText = overlayItem.HTMLText }); this.currentSongRequests.RemoveAt(0); } return(copy); } return(null); }
public override async Task <OverlayItemBase> GetProcessedItem(UserViewModel user, IEnumerable <string> arguments, Dictionary <string, string> extraSpecialIdentifiers) { return(await this.semaphore.WaitAndRelease(async() => { if (this.allMessages.Count > 0 || this.DeletedMessages.Count > 0) { OverlayChatMessages copy = this.Copy <OverlayChatMessages>(); this.DeletedMessages.Clear(); if (this.allMessages.Count > 0) { int skip = this.allMessages.Count; if (skip > this.TotalToShow) { skip = skip - this.TotalToShow; } else { skip = 0; } this.messagesToProcess = new List <ChatMessageViewModel>(this.allMessages.Skip(skip)); this.allMessages.Clear(); while (this.messagesToProcess.Count > 0) { OverlayCustomHTMLItem overlayItem = (OverlayCustomHTMLItem)await base.GetProcessedItem(user, arguments, extraSpecialIdentifiers); copy.Messages.Add(new OverlayChatMessage() { ID = this.messagesToProcess.ElementAt(0).ID, Message = overlayItem.HTMLText, }); this.messagesToProcess.RemoveAt(0); } } return copy; } return null; })); }
public override async Task <OverlayItemBase> GetProcessedItem(UserViewModel user, IEnumerable <string> arguments, Dictionary <string, string> extraSpecialIdentifiers) { if (this.gameQueueUpdated) { this.gameQueueUpdated = false; List <UserViewModel> users = new List <UserViewModel>((this.testGameQueueList.Count > 0) ? this.testGameQueueList : ChannelSession.GameQueue.ToList()); this.GameQueueUpdates.Clear(); OverlayGameQueue copy = this.Copy <OverlayGameQueue>(); for (int i = 0; i < users.Count && i < this.TotalToShow; i++) { extraSpecialIdentifiers[GameQueueUserPositionSpecialIdentifier] = (i + 1).ToString(); OverlayCustomHTMLItem overlayItem = (OverlayCustomHTMLItem)await base.GetProcessedItem(users[i], arguments, extraSpecialIdentifiers); copy.GameQueueUpdates.Add(new OverlayGameQueueItem() { HTMLText = overlayItem.HTMLText }); } return(copy); } return(null); }
public override async Task <OverlayItemBase> GetProcessedItem(UserViewModel user, IEnumerable <string> arguments, Dictionary <string, string> extraSpecialIdentifiers) { OverlayLeaderboard copy = (OverlayLeaderboard)this.GetCopy(); if (this.LeaderboardType == LeaderboardTypeEnum.Subscribers && this.refreshSubscribers) { this.refreshSubscribers = false; List <KeyValuePair <UserViewModel, DateTimeOffset> > usersToShow = new List <KeyValuePair <UserViewModel, DateTimeOffset> >(); var orderedUsers = userSubDates.OrderByDescending(kvp => kvp.Value.TotalDaysFromNow()); for (int i = 0; i < this.TotalToShow && i < orderedUsers.Count(); i++) { usersToShow.Add(orderedUsers.ElementAt(i)); } foreach (KeyValuePair <UserViewModel, DateTimeOffset> userToShow in usersToShow) { extraSpecialIdentifiers["DETAILS"] = userToShow.Value.GetAge(); OverlayCustomHTMLItem htmlItem = (OverlayCustomHTMLItem)await base.GetProcessedItem(userToShow.Key, arguments, extraSpecialIdentifiers); copy.LeaderboardEntries.Add(htmlItem.HTMLText); } return(copy); } else if (this.LeaderboardType == LeaderboardTypeEnum.Donations && this.refreshDonations) { this.refreshDonations = false; List <UserDonationModel> topDonators = new List <UserDonationModel>(); var orderedUsers = this.userDonations.OrderByDescending(kvp => kvp.Value.Amount); for (int i = 0; i < this.TotalToShow && i < orderedUsers.Count(); i++) { topDonators.Add(orderedUsers.ElementAt(i).Value); } foreach (UserDonationModel topDonator in topDonators) { extraSpecialIdentifiers["DETAILS"] = topDonator.AmountText; OverlayCustomHTMLItem htmlItem = (OverlayCustomHTMLItem)await base.GetProcessedItem(topDonator.User, arguments, extraSpecialIdentifiers); copy.LeaderboardEntries.Add(htmlItem.HTMLText); } return(copy); } else if (this.LeaderboardType == LeaderboardTypeEnum.CurrencyRank) { if (ChannelSession.Settings.Currencies.ContainsKey(this.CurrencyID)) { UserCurrencyViewModel currency = ChannelSession.Settings.Currencies[this.CurrencyID]; if (this.lastCurrencyRefresh < DateTimeOffset.Now) { this.lastCurrencyRefresh = DateTimeOffset.Now.AddMinutes(1); Dictionary <uint, int> currencyAmounts = new Dictionary <uint, int>(); foreach (UserDataViewModel userData in ChannelSession.Settings.UserData.Values) { currencyAmounts[userData.ID] = userData.GetCurrencyAmount(currency); } this.currencyUsersToShow.Clear(); for (int i = 0; i < this.TotalToShow && i < currencyAmounts.Count; i++) { try { KeyValuePair <uint, int> top = currencyAmounts.Aggregate((current, highest) => (current.Key <= 0 || current.Value < highest.Value) ? highest : current); if (!top.Equals(default(KeyValuePair <uint, int>))) { this.currencyUsersToShow.Add(ChannelSession.Settings.UserData[top.Key]); currencyAmounts.Remove(top.Key); } } catch (Exception ex) { Util.Logger.Log(ex); } } } foreach (UserDataViewModel userToShow in this.currencyUsersToShow) { extraSpecialIdentifiers["DETAILS"] = userToShow.GetCurrencyAmount(currency).ToString(); OverlayCustomHTMLItem htmlItem = (OverlayCustomHTMLItem)await base.GetProcessedItem(new UserViewModel(userToShow), arguments, extraSpecialIdentifiers); copy.LeaderboardEntries.Add(htmlItem.HTMLText); } return(copy); } } return(null); }