/// <summary>
        /// Get data for the selected game.
        /// </summary>
        /// <param name="gameID"></param>
        /// <param name="variateur"></param>
        public void getActivityForGamesTimeGraphics(string gameID)
        {
            gameSeriesContener.Children.Clear();
            GameActivityClass gameActivity   = GameActivityDatabases.Get(Guid.Parse(gameID));
            List <Activity>   gameActivities = gameActivity.Activities;

            var graph = new GameActivityGameGraphicTime(settings, gameActivity, variateurTime);

            graph.gameSeriesDataClick += new DataClickHandler(GameSeries_DataClick);
            gameSeriesContener.Children.Add(graph);
            gameSeriesContener.UpdateLayout();

            gameLabel.Content = resources.GetString("LOCGameActivityTimeTitle");
        }
        /// <summary>
        /// Get data detail for the selected game.
        /// </summary>
        /// <param name="gameID"></param>
        public void getActivityForGamesLogGraphics(string gameID, string dateSelected = "")
        {
            gameSeriesContener.Children.Clear();
            GameActivityClass gameActivity   = GameActivityDatabases.Get(Guid.Parse(gameID));
            List <Activity>   gameActivities = gameActivity.Activities;

            gameSeriesContener.Children.Add(new GameActivityGameGraphicLog(settings, gameActivity, dateSelected, variateurLog, false));
            gameSeriesContener.UpdateLayout();

            if (dateSelected == "")
            {
                gameLabel.Content = resources.GetString("LOCGameActivityLogTitle");
            }
            else
            {
                gameLabel.Content = resources.GetString("LOCGameActivityLogTitleDate") + " "
                                    + Convert.ToDateTime(dateSelected).ToString(Playnite.Common.Constants.DateUiFormat);
            }
        }
        /// <summary>
        /// Get list games with an activities.
        /// </summary>
        public void getActivityByListGame()
        {
            activityListByGame = new List <listGame>();

            List <GameActivityClass> listGameActivities = GameActivityDatabases.GetListGameActivity();
            string gameID = "";

            for (int iGame = 0; iGame < listGameActivities.Count; iGame++)
            {
                try
                {
                    gameID = listGameActivities[iGame].GameID.ToString();
                    string gameTitle = listGameActivities[iGame].GameName;
                    string gameIcon;

                    Activity lastSessionActivity = listGameActivities[iGame].GetLastSessionActivity();
                    long     elapsedSeconds      = lastSessionActivity.ElapsedSeconds;
                    DateTime dateSession         = Convert.ToDateTime(lastSessionActivity.DateSession).AddSeconds(-elapsedSeconds).ToLocalTime();


                    BitmapImage iconImage = new BitmapImage();
                    if (String.IsNullOrEmpty(listGameActivities[iGame].GameIcon) == false)
                    {
                        iconImage.BeginInit();
                        gameIcon            = dbPlaynite.GetFullFilePath(listGameActivities[iGame].GameIcon);
                        iconImage.UriSource = new Uri(gameIcon, UriKind.RelativeOrAbsolute);
                        iconImage.EndInit();
                    }

                    activityListByGame.Add(new listGame()
                    {
                        listGameID             = gameID,
                        listGameTitle          = gameTitle,
                        listGameIcon           = iconImage,
                        listGameLastActivity   = dateSession,
                        listGameElapsedSeconds = elapsedSeconds,
                        avgCPU  = listGameActivities[iGame].avgCPU(listGameActivities[iGame].GetLastSession()) + "%",
                        avgGPU  = listGameActivities[iGame].avgGPU(listGameActivities[iGame].GetLastSession()) + "%",
                        avgRAM  = listGameActivities[iGame].avgRAM(listGameActivities[iGame].GetLastSession()) + "%",
                        avgFPS  = listGameActivities[iGame].avgFPS(listGameActivities[iGame].GetLastSession()) + "",
                        avgCPUT = listGameActivities[iGame].avgCPUT(listGameActivities[iGame].GetLastSession()) + "°",
                        avgGPUT = listGameActivities[iGame].avgGPUT(listGameActivities[iGame].GetLastSession()) + "°",

                        enableWarm = settings.EnableWarning,
                        maxCPUT    = "" + settings.MaxCpuTemp,
                        maxGPUT    = "" + settings.MaxGpuTemp,
                        minFPS     = "" + settings.MinFps,
                        maxCPU     = "" + settings.MaxCpuUsage,
                        maxGPU     = "" + settings.MaxGpuUsage,
                        maxRAM     = "" + settings.MaxRamUsage
                    });

                    iconImage = null;
                }
                catch (Exception ex)
                {
                    Common.LogError(ex, "GameActivity", $"Failed to load listGameActivities from {gameID}");
                    PlayniteApi.Dialogs.ShowErrorMessage($"Failed to load listGameActivities from {gameID}.", "GameActivity error");
                }
            }

            lvGames.ItemsSource = activityListByGame;

            // Sorting
            try
            {
                var columnBinding = _lastHeaderClicked.Column.DisplayMemberBinding as Binding;
                var sortBy        = columnBinding?.Path.Path ?? _lastHeaderClicked.Column.Header as string;

                // Specific sort with another column
                if (_lastHeaderClicked.Name == "lvElapsedSecondsFormat")
                {
                    columnBinding = lvElapsedSeconds.Column.DisplayMemberBinding as Binding;
                    sortBy        = columnBinding?.Path.Path ?? _lastHeaderClicked.Column.Header as string;
                }
                Sort(sortBy, _lastDirection);
            }
            // If first view
            catch
            {
                CollectionView view = (CollectionView)CollectionViewSource.GetDefaultView(lvGames.ItemsSource);
                view.SortDescriptions.Add(new SortDescription("listGameLastActivity", ListSortDirection.Descending));
            }
        }
        /// <summary>
        /// Get data graphic activity by week.
        /// </summary>
        /// <param name="year"></param>
        /// <param name="month"></param>
        public void getActivityByWeek(int year, int month)
        {
            //https://www.codeproject.com/Questions/1276907/Get-every-weeks-start-and-end-date-from-series-end
            //usage:
            DateTime StartDate     = new DateTime(year, month, 1, 0, 0, 0);
            DateTime SeriesEndDate = new DateTime(year, month, DateTime.DaysInMonth(year, month), 23, 59, 59);
            //find first monday
            DateTime firstMonday = Enumerable.Range(0, 7)
                                   .SkipWhile(x => StartDate.AddDays(x).DayOfWeek != DayOfWeek.Monday)
                                   .Select(x => StartDate.AddDays(x))
                                   .First();
            //get count of days
            TimeSpan ts = (TimeSpan)(SeriesEndDate - firstMonday);
            //create new list of WeekStartEnd class
            List <WeekStartEnd> datesPeriodes = new List <WeekStartEnd>();

            //add dates to list
            for (int i = 0; i < ts.Days; i += 7)
            {
                datesPeriodes.Add(new WeekStartEnd()
                {
                    Monday = firstMonday.AddDays(i), Sunday = firstMonday.AddDays(i + 6).AddHours(23).AddMinutes(59).AddSeconds(59)
                });
            }

            // Source activty by month
            JObject activityByWeek1 = new JObject();
            JObject activityByWeek2 = new JObject();
            JObject activityByWeek3 = new JObject();
            JObject activityByWeek4 = new JObject();
            JObject activityByWeek5 = new JObject();

            JArray           activityByWeek       = new JArray();
            SeriesCollection activityByWeekSeries = new SeriesCollection();

            if (isMonthSources)
            {
                // Insert sources
                for (int iSource = 0; iSource < listSources.Count; iSource++)
                {
                    activityByWeek1.Add((string)listSources[iSource], 0);
                    activityByWeek2.Add((string)listSources[iSource], 0);
                    activityByWeek3.Add((string)listSources[iSource], 0);
                    activityByWeek4.Add((string)listSources[iSource], 0);
                    activityByWeek5.Add((string)listSources[iSource], 0);
                }

                activityByWeek.Add(activityByWeek1);
                activityByWeek.Add(activityByWeek2);
                activityByWeek.Add(activityByWeek3);
                activityByWeek.Add(activityByWeek4);
                activityByWeek.Add(activityByWeek5);

                List <GameActivityClass> listGameActivities = GameActivityDatabases.GetListGameActivity();
                for (int iGame = 0; iGame < listGameActivities.Count; iGame++)
                {
                    List <Activity> gameActivities = listGameActivities[iGame].Activities;
                    for (int iActivity = 0; iActivity < gameActivities.Count; iActivity++)
                    {
                        long     elapsedSeconds = gameActivities[iActivity].ElapsedSeconds;
                        DateTime dateSession    = Convert.ToDateTime(gameActivities[iActivity].DateSession).AddSeconds(-elapsedSeconds).ToLocalTime();
                        string   sourceName     = gameActivities[iActivity].SourceName;

                        // Cumul data
                        for (int iWeek = 0; iWeek < datesPeriodes.Count; iWeek++)
                        {
                            if (datesPeriodes[iWeek].Monday <= dateSession && dateSession <= datesPeriodes[iWeek].Sunday)
                            {
                                activityByWeek[iWeek][sourceName] = (long)activityByWeek[iWeek][sourceName] + elapsedSeconds;
                            }
                        }
                    }
                }


                // Check source with data (only view this)
                JArray listNoDelete = new JArray();
                for (int i = 0; i < activityByWeek.Count; i++)
                {
                    foreach (var item in (JObject)activityByWeek[i])
                    {
                        if ((long)item.Value != 0 && listNoDelete.TakeWhile(x => x.ToString() == item.Key).Count() != 1)
                        {
                            listNoDelete.Add(item.Key);
                        }
                    }
                }
                listNoDelete = JArray.FromObject(listNoDelete.Distinct().ToArray());


                // Prepare data.
                string[] labels = new string[listNoDelete.Count];
                for (int iSource = 0; iSource < listNoDelete.Count; iSource++)
                {
                    labels[iSource] = (string)listNoDelete[iSource];
                    if (settings.showLauncherIcons)
                    {
                        labels[iSource] = TransformIcon.Get((string)listNoDelete[iSource]);
                    }

                    IChartValues Values = new ChartValues <CustomerForTime>()
                    {
                        new CustomerForTime {
                            Name = (string)listNoDelete[iSource], Values = (int)activityByWeek[0][(string)listNoDelete[iSource]]
                        },
                        new CustomerForTime {
                            Name = (string)listNoDelete[iSource], Values = (int)activityByWeek[1][(string)listNoDelete[iSource]]
                        },
                        new CustomerForTime {
                            Name = (string)listNoDelete[iSource], Values = (int)activityByWeek[2][(string)listNoDelete[iSource]]
                        },
                        new CustomerForTime {
                            Name = (string)listNoDelete[iSource], Values = (int)activityByWeek[3][(string)listNoDelete[iSource]]
                        }
                    };

                    if (datesPeriodes.Count == 5)
                    {
                        Values.Add(new CustomerForTime {
                            Name = (string)listNoDelete[iSource], Values = (int)activityByWeek[4][(string)listNoDelete[iSource]]
                        });
                    }

                    activityByWeekSeries.Add(new StackedColumnSeries
                    {
                        Title      = labels[iSource],
                        Values     = Values,
                        StackMode  = StackMode.Values,
                        DataLabels = false
                    });
                }
            }


            // Set data in graphics.
            string[] activityByWeekLabels = new[]
            {
                resources.GetString("LOCGameActivityWeekLabel") + " " + Tools.WeekOfYearISO8601(datesPeriodes[0].Monday),
                resources.GetString("LOCGameActivityWeekLabel") + " " + Tools.WeekOfYearISO8601(datesPeriodes[1].Monday),
                resources.GetString("LOCGameActivityWeekLabel") + " " + Tools.WeekOfYearISO8601(datesPeriodes[2].Monday),
                resources.GetString("LOCGameActivityWeekLabel") + " " + Tools.WeekOfYearISO8601(datesPeriodes[3].Monday)
            };
            if (datesPeriodes.Count == 5)
            {
                activityByWeekLabels = new[]
                {
                    resources.GetString("LOCGameActivityWeekLabel") + " " + Tools.WeekOfYearISO8601(datesPeriodes[0].Monday),
                    resources.GetString("LOCGameActivityWeekLabel") + " " + Tools.WeekOfYearISO8601(datesPeriodes[1].Monday),
                    resources.GetString("LOCGameActivityWeekLabel") + " " + Tools.WeekOfYearISO8601(datesPeriodes[2].Monday),
                    resources.GetString("LOCGameActivityWeekLabel") + " " + Tools.WeekOfYearISO8601(datesPeriodes[3].Monday),
                    resources.GetString("LOCGameActivityWeekLabel") + " " + Tools.WeekOfYearISO8601(datesPeriodes[4].Monday)
                };
            }


            //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 => (string)converter.Convert((long)value, null, null, CultureInfo.CurrentCulture);

            acwLabelsY.LabelFormatter = activityForGameLogFormatter;

            acwSeries.Series    = activityByWeekSeries;
            acwLabelsY.MinValue = 0;
            ((CustomerToolTipForMultipleTime)acwSeries.DataTooltip).ShowIcon = settings.showLauncherIcons;
            acwLabelsX.Labels = activityByWeekLabels;
        }
        /// <summary>
        /// Get data graphic activity by month with time by source or by genre.
        /// </summary>
        /// <param name="year"></param>
        /// <param name="month"></param>
        public void getActivityByMonth(int year, int month)
        {
            DateTime startOfMonth = new DateTime(year, month, 1, 0, 0, 0);
            DateTime endOfMonth   = new DateTime(year, month, DateTime.DaysInMonth(year, month), 23, 59, 59);

            JObject activityByMonth = new JObject();

            // Total hours by source.
            if (isMonthSources)
            {
                List <GameActivityClass> listGameActivities = GameActivityDatabases.GetListGameActivity();
                for (int iGame = 0; iGame < listGameActivities.Count; iGame++)
                {
                    try
                    {
                        List <Activity> gameActivities = listGameActivities[iGame].Activities;
                        for (int iActivity = 0; iActivity < gameActivities.Count; iActivity++)
                        {
                            long     elapsedSeconds = gameActivities[iActivity].ElapsedSeconds;
                            DateTime dateSession    = Convert.ToDateTime(gameActivities[iActivity].DateSession).AddSeconds(-elapsedSeconds).ToLocalTime();
                            string   sourceName     = gameActivities[iActivity].SourceName;

                            // Cumul data
                            if (activityByMonth[sourceName] != null)
                            {
                                if (startOfMonth <= dateSession && dateSession <= endOfMonth)
                                {
                                    activityByMonth[sourceName] = (long)activityByMonth[sourceName] + elapsedSeconds;
                                }
                            }
                            else
                            {
                                if (startOfMonth <= dateSession && dateSession <= endOfMonth)
                                {
                                    activityByMonth.Add(new JProperty(sourceName, elapsedSeconds));
                                }
                            }
                        }
                    }
                    catch (Exception ex)
                    {
                        Common.LogError(ex, "GameActivity", $"Error in getActivityByMonth({year}, {month}) with {listGameActivities[iGame].GameName}");
                    }
                }

                gridMonth.Width      = 605;
                acwSeries.Visibility = Visibility.Visible;
                acwLabel.Visibility  = Visibility.Visible;
            }
            // Total hours by genres.
            else
            {
                List <GameActivityClass> listGameActivities = GameActivityDatabases.GetListGameActivity();
                for (int iGame = 0; iGame < listGameActivities.Count; iGame++)
                {
                    try
                    {
                        List <Genre>    listGameListGenres = listGameActivities[iGame].Genres;
                        List <Activity> gameActivities     = listGameActivities[iGame].Activities;
                        for (int iActivity = 0; iActivity < gameActivities.Count; iActivity++)
                        {
                            long     elapsedSeconds = gameActivities[iActivity].ElapsedSeconds;
                            DateTime dateSession    = Convert.ToDateTime(gameActivities[iActivity].DateSession).AddSeconds(-elapsedSeconds).ToLocalTime();

                            for (int iGenre = 0; iGenre < listGameListGenres.Count; iGenre++)
                            {
                                // Cumul data
                                if (activityByMonth[listGameListGenres[iGenre].Name] != null)
                                {
                                    if (startOfMonth <= dateSession && dateSession <= endOfMonth)
                                    {
                                        activityByMonth[listGameListGenres[iGenre].Name] = (long)activityByMonth[listGameListGenres[iGenre].Name] + elapsedSeconds;
                                    }
                                }
                                else
                                {
                                    if (startOfMonth <= dateSession && dateSession <= endOfMonth)
                                    {
                                        activityByMonth.Add(new JProperty(listGameListGenres[iGenre].Name, elapsedSeconds));
                                    }
                                }
                            }
                        }
                    }
                    catch (Exception ex)
                    {
                        Common.LogError(ex, "GameActivity", $"Error in getActivityByMonth({year}, {month}) with {listGameActivities[iGame].GameName}");
                    }
                }

                gridMonth.Width      = 1223;
                acwSeries.Visibility = Visibility.Hidden;
                acwLabel.Visibility  = Visibility.Hidden;
            }


            // Set data in graphic.
            ChartValues <CustomerForTime> series = new ChartValues <CustomerForTime>();

            string[] labels   = new string[activityByMonth.Count];
            int      compteur = 0;

            foreach (var item in activityByMonth)
            {
                series.Add(new CustomerForTime
                {
                    Name   = item.Key,
                    Values = (long)item.Value,
                });
                labels[compteur] = item.Key;
                if (settings.showLauncherIcons)
                {
                    labels[compteur] = TransformIcon.Get(labels[compteur]);
                }
                compteur = compteur + 1;
            }

            SeriesCollection ActivityByMonthSeries = new SeriesCollection
            {
                new ColumnSeries
                {
                    Title  = "",
                    Values = series
                }
            };

            string[] ActivityByMonthLabels = labels;

            //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 => (string)converter.Convert((long)value, null, null, CultureInfo.CurrentCulture);

            acmLabelsY.LabelFormatter = activityForGameLogFormatter;

            acmSeries.Series    = ActivityByMonthSeries;
            acmLabelsY.MinValue = 0;
            ((CustomerToolTipForTime)acmSeries.DataTooltip).ShowIcon = settings.showLauncherIcons;
            acmLabelsX.Labels = ActivityByMonthLabels;
        }
Exemplo n.º 6
0
        /// <summary>
        /// Get data detail for the selected game.
        /// </summary>
        /// <param name="gameID"></param>
        public void getActivityForGamesLogGraphics(string gameID, string dateSelected = "")
        {
            // TODO Get by date for click on time sessions
            GameActivityClass          gameActivity          = GameActivityDatabases.Get(Guid.Parse(gameID));
            List <ActivityDetailsData> gameActivitiesDetails = gameActivity.GetSessionActivityDetails(dateSelected);

            string[] activityForGameLogLabels             = new string[0];
            List <ActivityDetailsData> gameLogsDefinitive = new List <ActivityDetailsData>();

            if (gameActivitiesDetails.Count > 0)
            {
                if (gameActivitiesDetails.Count > 10)
                {
                    // Variateur
                    int conteurEnd   = gameActivitiesDetails.Count + variateurLog;
                    int conteurStart = conteurEnd - 10;

                    if (conteurEnd > gameActivitiesDetails.Count)
                    {
                        int temp = conteurEnd - gameActivitiesDetails.Count;
                        conteurEnd   = gameActivitiesDetails.Count;
                        conteurStart = conteurEnd - 10;

                        variateurLog = variateurLogTemp;
                    }

                    if (conteurStart < 0)
                    {
                        conteurStart = 0;
                        conteurEnd   = 10;

                        variateurLog = variateurLogTemp;
                    }

                    variateurLogTemp = variateurLog;

                    // Create data
                    int sCount = 0;
                    activityForGameLogLabels = new string[10];
                    for (int iLog = conteurStart; iLog < conteurEnd; iLog++)
                    {
                        gameLogsDefinitive.Add(gameActivitiesDetails[iLog]);
                        activityForGameLogLabels[sCount] = Convert.ToDateTime(gameActivitiesDetails[iLog].Datelog).ToLocalTime().ToString("HH:mm");
                        sCount += 1;
                    }
                }
                else
                {
                    gameLogsDefinitive = gameActivitiesDetails;

                    activityForGameLogLabels = new string[gameActivitiesDetails.Count];
                    for (int iLog = 0; iLog < gameActivitiesDetails.Count; iLog++)
                    {
                        activityForGameLogLabels[iLog] = Convert.ToDateTime(gameActivitiesDetails[iLog].Datelog).ToLocalTime().ToString("HH:mm");
                    }
                }
            }

            // Set data in graphic.
            ChartValues <int> CPUseries = new ChartValues <int>();
            ChartValues <int> GPUseries = new ChartValues <int>();
            ChartValues <int> RAMseries = new ChartValues <int>();
            ChartValues <int> FPSseries = new ChartValues <int>();

            for (int iLog = 0; iLog < gameLogsDefinitive.Count; iLog++)
            {
                CPUseries.Add(gameLogsDefinitive[iLog].CPU);
                GPUseries.Add(gameLogsDefinitive[iLog].GPU);
                RAMseries.Add(gameLogsDefinitive[iLog].RAM);
                FPSseries.Add(gameLogsDefinitive[iLog].FPS);
            }

            SeriesCollection activityForGameLogSeries = new SeriesCollection
            {
                new ColumnSeries
                {
                    Title  = "cpu usage (%)",
                    Values = CPUseries
                },
                new ColumnSeries
                {
                    Title  = "gpu usage (%)",
                    Values = GPUseries
                },
                new ColumnSeries
                {
                    Title  = "ram usage (%)",
                    Values = RAMseries
                },
                new LineSeries
                {
                    Title  = "fps",
                    Values = FPSseries
                }
            };
            Func <double, string> activityForGameLogFormatter = value => value.ToString("N");

            gameSeries.DataTooltip                 = new LiveCharts.Wpf.DefaultTooltip();
            gameSeries.DataTooltip.Background      = (Brush)resources.GetResource("CommonToolTipBackgroundBrush");
            gameSeries.DataTooltip.Padding         = new Thickness(10);
            gameSeries.DataTooltip.BorderThickness = (Thickness)resources.GetResource("CommonToolTipBorderThickness");
            gameSeries.DataTooltip.BorderBrush     = (Brush)resources.GetResource("CommonToolTipBorderBrush");
            gameSeries.DataTooltip.Foreground      = (Brush)resources.GetResource("CommonToolTipForeground");

            if (dateSelected == "")
            {
                gameLabel.Content = resources.GetString("LOCGameActivityLogTitle");
            }
            else
            {
                gameLabel.Content = resources.GetString("LOCGameActivityLogTitleDate") + " " + dateSelected;
            }

            gameSeries.Series          = activityForGameLogSeries;
            gameLabelsX.MinValue       = 0;
            gameLabelsX.Labels         = activityForGameLogLabels;
            gameLabelsY.LabelFormatter = activityForGameLogFormatter;
        }
Exemplo n.º 7
0
        /// <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;
        }