Exemple #1
0
        private void UpdateTotalsYearDelta(YearlyTally previousYearTally)
        {
            DaysInYearDelta         = DaysSinceStart - previousYearTally.DaysSinceStart;
            YearDeltaPages          = TotalPages - previousYearTally.TotalPages;
            YearDeltaBooks          = TotalBooks - previousYearTally.TotalBooks;
            YearDeltaBooksInEnglish = TotalBooksInEnglish - previousYearTally.TotalBooksInEnglish;
            YearDeltaBookFormat     = TotalBookFormat - previousYearTally.TotalBookFormat;
            YearDeltaComicFormat    = TotalComicFormat - previousYearTally.TotalComicFormat;
            YearDeltaAudioFormat    = TotalAudioFormat - previousYearTally.TotalAudioFormat;

            YearDeltaPageRate = YearDeltaPages / (float)DaysInYearDelta;

            if (YearDeltaBooks >= 1)
            {
                TotalDaysPerBook              = DaysInYearDelta / (float)YearDeltaBooks;
                TotalPagesPerBook             = YearDeltaPages / (float)YearDeltaBooks;
                TotalBooksPercentageInEnglish = YearDeltaBooksInEnglish / (float)YearDeltaBooks;
            }
        }
Exemple #2
0
        private void UpdateTotalsSinceStart(YearlyTally currentTally)
        {
            TotalPages          = currentTally.TotalPages;
            TotalBooks          = currentTally.TotalBooks;
            TotalBooksInEnglish = currentTally.TotalBooksInEnglish;
            TotalBookFormat     = currentTally.TotalBookFormat;
            TotalComicFormat    = currentTally.TotalComicFormat;
            TotalAudioFormat    = currentTally.TotalAudioFormat;

            if (DaysSinceStart >= 1)
            {
                TotalPageRate = TotalPages / (float)DaysSinceStart;
            }

            if (TotalBooks >= 1)
            {
                TotalDaysPerBook              = DaysSinceStart / (float)TotalBooks;
                TotalPagesPerBook             = TotalPages / (float)TotalBooks;
                TotalBooksPercentageInEnglish = TotalBooksInEnglish / (float)TotalBooks;
            }
        }
Exemple #3
0
        public static List <YearlyTally> GetYearlyTalliesForBooks(List <BookRead> allBooks)
        {
            List <BookRead> sortedBooks = allBooks.OrderBy(x => x.Date).ToList();
            DateTime        firstDay    = sortedBooks.First().Date;
            int             totalDays   = 1 + (int)(sortedBooks.Last().Date - firstDay).TotalDays;

            YearlyTally[] yearlyTallies = new YearlyTally[totalDays];

            for (int i = 0; i < totalDays; i++)
            {
                yearlyTallies[i] = new YearlyTally(firstDay, i);
            }

            YearlyTally currentTally = new YearlyTally();

            // fill in the days with books
            Dictionary <int, int> updatedDays = new Dictionary <int, int>();

            foreach (BookRead book in allBooks)
            {
                int daysSinceStart = (int)(book.Date - firstDay).TotalDays;

                currentTally.TotalPages += book.Pages;
                currentTally.TotalBooks++;

                if (book.OriginalLanguage == EnglishLanguage)
                {
                    currentTally.TotalBooksInEnglish++;
                }

                if (book.Format == BookFormat.Book)
                {
                    currentTally.TotalBookFormat++;
                }
                if (book.Format == BookFormat.Comic)
                {
                    currentTally.TotalComicFormat++;
                }
                if (book.Format == BookFormat.Audio)
                {
                    currentTally.TotalAudioFormat++;
                }

                yearlyTallies[daysSinceStart].UpdateTotalsSinceStart(currentTally);

                if (!updatedDays.ContainsKey(daysSinceStart))
                {
                    updatedDays.Add(daysSinceStart, daysSinceStart);
                }
            }

            // fill in the missing days with the totals for the day before
            for (int i = 1; i < totalDays; i++)
            {
                if (updatedDays.ContainsKey(i))
                {
                    continue;
                }

                yearlyTallies[i].UpdateTotalsSinceStart(yearlyTallies[i - 1]);
            }


            for (int i = DaysPerYear; i < totalDays; i++)
            {
                var previousYearTally = yearlyTallies[i - DaysPerYear];
                yearlyTallies[i].UpdateTotalsYearDelta(previousYearTally);
            }

            return(yearlyTallies.ToList());
        }