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