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");
                }
            });
        }
Ejemplo n.º 3
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;
        }