Пример #1
0
        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);
        }
Пример #2
0
        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);
        }
Пример #3
0
        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;
            }));
        }
Пример #4
0
        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);
        }