public void GetActivityForGamesTimeGraphics(GameActivityClass gameActivity, int variateurTime) { //DateTime dateStart = DateTime.Now.AddDays(variateurTime); string[] listDate = new string[10]; ChartValues <CustomerForTime> series = new ChartValues <CustomerForTime>(); List <Activity> gameActivities = gameActivity.Activities; // Find last activity date DateTime dateStart = new DateTime(1982, 12, 15, 0, 0, 0); for (int iActivity = 0; iActivity < gameActivities.Count; iActivity++) { DateTime dateSession = Convert.ToDateTime(gameActivities[iActivity].DateSession).ToLocalTime(); if (dateSession > dateStart) { dateStart = dateSession; } } dateStart = dateStart.AddDays(variateurTime); // Periode data showned for (int iDay = 0; iDay < 10; iDay++) { listDate[iDay] = dateStart.AddDays(iDay - 9).ToString("yyyy-MM-dd"); series.Add(new CustomerForTime { Name = dateStart.AddDays(iDay - 9).ToString("yyyy-MM-dd"), Values = 0, }); } // Search data in periode for (int iActivity = 0; iActivity < gameActivities.Count; iActivity++) { long elapsedSeconds = gameActivities[iActivity].ElapsedSeconds; string dateSession = Convert.ToDateTime(gameActivities[iActivity].DateSession).ToLocalTime().ToString("yyyy-MM-dd"); for (int iDay = 0; iDay < 10; iDay++) { if (listDate[iDay] == dateSession) { string tempName = series[iDay].Name; long tempElapsed = series[iDay].Values + elapsedSeconds; series[iDay] = new CustomerForTime { Name = tempName, Values = tempElapsed, }; } } } // Set data in graphic. SeriesCollection activityForGameSeries = new SeriesCollection { new ColumnSeries { Title = "", Values = series } }; for (int iDay = 0; iDay < listDate.Length; iDay++) { listDate[iDay] = Convert.ToDateTime(listDate[iDay]).ToString(Playnite.Common.Constants.DateUiFormat); } string[] activityForGameLabels = listDate; //let create a mapper so LiveCharts know how to plot our CustomerViewModel class var customerVmMapper = Mappers.Xy <CustomerForTime>() .X((value, index) => index) .Y(value => value.Values); //lets save the mapper globally Charting.For <CustomerForTime>(customerVmMapper); LongToTimePlayedConverter converter = new LongToTimePlayedConverter(); Func <double, string> activityForGameLogFormatter = value => (string)converter.Convert((long)value, null, null, CultureInfo.CurrentCulture); gameLabelsY.LabelFormatter = activityForGameLogFormatter; gameSeries.DataTooltip = new CustomerToolTipForTime(); gameLabelsY.MinValue = 0; gameSeries.Series = activityForGameSeries; gameLabelsX.Labels = activityForGameLabels; }
public void GetActivityForGamesTimeGraphics(GameActivities gameActivities, int variateurTime = 0, int limit = 9) { Task.Run(() => { try { this.Dispatcher.BeginInvoke(DispatcherPriority.Loaded, new ThreadStart(delegate { if (!gameActivities.HasData) { this.Visibility = Visibility.Collapsed; return; } else { this.Visibility = Visibility.Visible; } })); string[] listDate = new string[limit + 1]; ChartValues <CustomerForTime> series1 = new ChartValues <CustomerForTime>(); ChartValues <CustomerForTime> series2 = new ChartValues <CustomerForTime>(); ChartValues <CustomerForTime> series3 = new ChartValues <CustomerForTime>(); ChartValues <CustomerForTime> series4 = new ChartValues <CustomerForTime>(); ChartValues <CustomerForTime> series5 = new ChartValues <CustomerForTime>(); bool HasData2 = false; bool HasData3 = false; bool HasData4 = false; bool HasData5 = false; List <Activity> Activities = gameActivities.Items; // Find last activity date DateTime dateStart = new DateTime(1982, 12, 15, 0, 0, 0); for (int iActivity = 0; iActivity < Activities.Count; iActivity++) { DateTime dateSession = Convert.ToDateTime(Activities[iActivity].DateSession).ToLocalTime(); if (dateSession > dateStart) { dateStart = dateSession; } } dateStart = dateStart.AddDays(variateurTime); // Periode data showned for (int i = limit; i >= 0; i--) { listDate[(limit - i)] = dateStart.AddDays(-i).ToString("yyyy-MM-dd"); CustomerForTime customerForTime = new CustomerForTime { Name = dateStart.AddDays(-i).ToString("yyyy-MM-dd"), Values = 0 }; series1.Add(customerForTime); series2.Add(customerForTime); series3.Add(customerForTime); series4.Add(customerForTime); series5.Add(customerForTime); } LocalDateConverter localDateConverter = new LocalDateConverter(); // Search data in periode for (int iActivity = 0; iActivity < Activities.Count; iActivity++) { long elapsedSeconds = Activities[iActivity].ElapsedSeconds; string dateSession = Convert.ToDateTime(Activities[iActivity].DateSession).ToLocalTime().ToString("yyyy-MM-dd"); //for (int iDay = 0; iDay < 10; iDay++) for (int iDay = limit; iDay >= 0; iDay--) { if (listDate[iDay] == dateSession) { string tempName = series1[iDay].Name; try { tempName = (string)localDateConverter.Convert(DateTime.ParseExact(series1[iDay].Name, "yyyy-MM-dd", null), null, null, null); } catch { } if (PluginDatabase.PluginSettings.CumulPlaytimeSession) { series1[iDay] = new CustomerForTime { Name = tempName, Values = series1[iDay].Values + elapsedSeconds, }; continue; } else { if (series1[iDay].Values == 0) { series1[iDay] = new CustomerForTime { Name = tempName, Values = elapsedSeconds, }; continue; } if (series2[iDay].Values == 0) { HasData2 = true; series2[iDay] = new CustomerForTime { Name = tempName, Values = elapsedSeconds, }; continue; } if (series3[iDay].Values == 0) { HasData3 = true; series3[iDay] = new CustomerForTime { Name = tempName, Values = elapsedSeconds, }; continue; } if (series4[iDay].Values == 0) { HasData4 = true; series4[iDay] = new CustomerForTime { Name = tempName, Values = elapsedSeconds, }; continue; } if (series5[iDay].Values == 0) { HasData5 = true; series5[iDay] = new CustomerForTime { Name = tempName, Values = elapsedSeconds, }; continue; } } } } } this.Dispatcher.BeginInvoke(DispatcherPriority.Background, new ThreadStart(delegate { // Set data in graphic. SeriesCollection activityForGameSeries = new SeriesCollection(); activityForGameSeries.Add(new ColumnSeries { Title = "1", Values = series1 }); if (HasData2) { activityForGameSeries.Add(new ColumnSeries { Title = "2", Values = series2 }); } if (HasData3) { activityForGameSeries.Add(new ColumnSeries { Title = "3", Values = series3 }); } if (HasData4) { activityForGameSeries.Add(new ColumnSeries { Title = "4", Values = series4 }); } if (HasData5) { activityForGameSeries.Add(new ColumnSeries { Title = "5", Values = series5 }); } for (int iDay = 0; iDay < listDate.Length; iDay++) { listDate[iDay] = Convert.ToDateTime(listDate[iDay]).ToString(Constants.DateUiFormat); } string[] activityForGameLabels = listDate; //let create a mapper so LiveCharts know how to plot our CustomerViewModel class var customerVmMapper = Mappers.Xy <CustomerForTime>() .X((value, index) => index) .Y(value => value.Values); //lets save the mapper globally Charting.For <CustomerForTime>(customerVmMapper); LongToTimePlayedConverter converter = new LongToTimePlayedConverter(); Func <double, string> activityForGameLogFormatter = value => (string)converter.Convert((long)value, null, null, CultureInfo.CurrentCulture); PART_ChartTimeActivityLabelsY.LabelFormatter = activityForGameLogFormatter; PART_ChartTimeActivity.DataTooltip = new CustomerToolTipForTime(); PART_ChartTimeActivityLabelsY.MinValue = 0; PART_ChartTimeActivity.Series = activityForGameSeries; PART_ChartTimeActivityLabelsX.Labels = activityForGameLabels; })); } catch (Exception ex) { Common.LogError(ex, "GameActivity"); } }); }
/// <summary> /// Get data for the selected game. /// </summary> /// <param name="gameID"></param> /// <param name="variateur"></param> public void getActivityForGamesTimeGraphics(string gameID) { DateTime dateStart = DateTime.Now.AddDays(variateurTime); string[] listDate = new string[10]; ChartValues <CustomerForTime> series = new ChartValues <CustomerForTime>(); // Periode data showned for (int iDay = 0; iDay < 10; iDay++) { listDate[iDay] = dateStart.AddDays(iDay - 9).ToString("yyyy-MM-dd"); //series.Add(0); series.Add(new CustomerForTime { Name = dateStart.AddDays(iDay - 9).ToString("yyyy-MM-dd"), Values = 0, //ValuesFormat = (int)TimeSpan.FromSeconds(0).TotalHours + "h " + TimeSpan.FromSeconds(0).ToString(@"mm") + "min" }); } // Search data in periode GameActivityClass gameActivity = GameActivityDatabases.Get(Guid.Parse(gameID)); List <Activity> gameActivities = gameActivity.Activities; for (int iActivity = 0; iActivity < gameActivities.Count; iActivity++) { long elapsedSeconds = gameActivities[iActivity].ElapsedSeconds; string dateSession = Convert.ToDateTime(gameActivities[iActivity].DateSession).ToLocalTime().ToString("yyyy-MM-dd"); for (int iDay = 0; iDay < 10; iDay++) { if (listDate[iDay] == dateSession) { string tempName = series[iDay].Name; double tempElapsed = series[iDay].Values + elapsedSeconds; series[iDay] = new CustomerForTime { Name = tempName, Values = tempElapsed, }; } } } // Set data in graphic. SeriesCollection activityForGameSeries = new SeriesCollection { new ColumnSeries { Title = "", Values = series } }; string[] activityForGameLabels = listDate; //let create a mapper so LiveCharts know how to plot our CustomerViewModel class var customerVmMapper = Mappers.Xy <CustomerForTime>() .X((value, index) => index) .Y(value => value.Values); //lets save the mapper globally Charting.For <CustomerForTime>(customerVmMapper); Func <double, string> activityForGameLogFormatter = value => (int)TimeSpan.FromSeconds(value).TotalHours + "h " + TimeSpan.FromSeconds(value).ToString(@"mm") + "min"; gameLabelsY.LabelFormatter = activityForGameLogFormatter; gameSeries.DataTooltip = new CustomerToolTipForTime(); gameLabelsY.MinValue = 0; gameLabel.Content = resources.GetString("LOCGameActivityTimeTitle"); gameSeries.Series = activityForGameSeries; gameLabelsX.Labels = activityForGameLabels; }