Esempio n. 1
0
        private void PopulateStatistics(TrackingStatistics stats)
        {
            if (this.InvokeRequired)
            {
                populateStatisticsDelegate d = new populateStatisticsDelegate(PopulateStatistics);
                this.Invoke(d, new object[] { stats });
            }
            else
            {
                //Encounter chart
                chartWeeklyEncounters.Series.Clear();
                chartWeeklyEncounters.ResetAutoValues();
                Series totalEncounters = new Series
                {
                    ChartType           = SeriesChartType.Column,
                    Name                = "Temtem encountered",
                    IsValueShownAsLabel = true,
                    LabelBackColor      = Color.White
                };
                for (int i = 0; i < 7; i++)
                {
                    totalEncounters.Points.AddXY(stats.dailyEncounters[i].date, stats.dailyEncounters[i].totalTemtemEncountered);
                }
                chartWeeklyEncounters.Series.Add(totalEncounters);

                //Playtime chart
                chartWeeklyPlaytime.Series.Clear();
                chartWeeklyPlaytime.ResetAutoValues();
                Series totalPlaytime = new Series
                {
                    ChartType           = SeriesChartType.Column,
                    Name                = "Playtime(minutes)",
                    IsValueShownAsLabel = true,
                    LabelBackColor      = Color.White
                };
                for (int i = 0; i < 7; i++)
                {
                    totalPlaytime.Points.AddXY(stats.dailyPlaytime[i].date, stats.dailyPlaytime[i].totalPlaytimeMinutes);
                }
                chartWeeklyPlaytime.Series.Add(totalPlaytime);
            }
        }
        public Task <TrackingStatistics> GetEncounterStatistics(Tuple <DateTime, DateTime> week)
        {
            Task <TrackingStatistics> dbTask = Task.Factory.StartNew <TrackingStatistics>(() => {
                lock (dblock)
                {
                    TrackingStatistics ts = new TrackingStatistics
                    {
                        dailyEncounters = new List <DailyEncounterStatistics>(),
                        dailyPlaytime   = new List <DailyPlaytimeStatistics>()
                    };
                    for (int i = 0; i < 7; i++)
                    {
                        ts.dailyEncounters.Add(new DailyEncounterStatistics()
                        {
                            date = week.Item1.AddDays(i),
                            totalTemtemEncountered = 0
                        });
                        ts.dailyPlaytime.Add(new DailyPlaytimeStatistics()
                        {
                            date = week.Item1.AddDays(i),
                            totalPlaytimeMinutes = 0
                        });
                    }
                    using (SQLiteConnection con = new SQLiteConnection(dbPath))
                    {
                        con.Open();
                        //Get double encounters
                        using (SQLiteCommand cmd = new SQLiteCommand(GET_DOUBLE_ENCOUNTERS, con))
                        {
                            cmd.Parameters.AddWithValue("@weekStart", GetTimeISO8601(week.Item1));
                            cmd.Parameters.AddWithValue("@weekEnd", GetTimeISO8601(week.Item2));
                            using (SQLiteDataReader rdr = cmd.ExecuteReader())
                            {
                                while (rdr.Read())
                                {
                                    int.TryParse(rdr.GetString(0), out int dayOfWeek);
                                    dayOfWeek         = dayOfWeek == 0 ? 6 : dayOfWeek - 1; //Move everything back by 1, set Sunday last day
                                    int doubleBattles = rdr.GetInt32(1);
                                    ts.dailyEncounters[dayOfWeek].totalTemtemEncountered += doubleBattles * 2;
                                    ts.doubleBattlesTotal += doubleBattles;
                                }
                            }
                        }
                        //Get single encounters
                        using (SQLiteCommand cmd = new SQLiteCommand(GET_SINGLE_ENCOUNTERS, con))
                        {
                            cmd.Parameters.AddWithValue("@weekStart", GetTimeISO8601(week.Item1));
                            cmd.Parameters.AddWithValue("@weekEnd", GetTimeISO8601(week.Item2));
                            using (SQLiteDataReader rdr = cmd.ExecuteReader())
                            {
                                while (rdr.Read())
                                {
                                    int.TryParse(rdr.GetString(0), out int dayOfWeek);
                                    dayOfWeek         = dayOfWeek == 0 ? 6 : dayOfWeek - 1; //Move everything back by 1, set Sunday last day
                                    int singleBattles = rdr.GetInt32(1);
                                    ts.dailyEncounters[dayOfWeek].totalTemtemEncountered += singleBattles;
                                    ts.singleBattlesTotal += singleBattles;
                                }
                            }
                        }

                        //Get session totaly
                        using (SQLiteCommand cmd = new SQLiteCommand(GET_DAILY_TOTALS, con))
                        {
                            cmd.Parameters.AddWithValue("@weekStart", GetTimeISO8601(week.Item1));
                            cmd.Parameters.AddWithValue("@weekEnd", GetTimeISO8601(week.Item2));
                            using (SQLiteDataReader rdr = cmd.ExecuteReader())
                            {
                                while (rdr.Read())
                                {
                                    int.TryParse(rdr.GetString(0), out int dayOfWeek);
                                    dayOfWeek       = dayOfWeek == 0 ? 6 : dayOfWeek - 1; //Move everything back by 1, set Sunday last day
                                    int sessionTime = rdr.GetInt32(1);
                                    ts.dailyPlaytime[dayOfWeek].totalPlaytimeMinutes = sessionTime / 60000;
                                }
                            }
                        }
                    }
                    return(ts);
                }
            });

            return(dbTask);
        }