Exemple #1
0
        protected void OnPropertyChanged(object sender, System.ComponentModel.PropertyChangedEventArgs e)
        {
            try
            {
                if (e.PropertyName == "GameSelectedData" || e.PropertyName == "PluginSettings")
                {
                    this.Dispatcher.BeginInvoke(DispatcherPriority.Loaded, new ThreadStart(delegate
                    {
                        long ElapsedSeconds = PluginDatabase.GameSelectedData.GetLastSessionActivity().ElapsedSeconds;

                        LongToTimePlayedConverter converter = new LongToTimePlayedConverter();
                        string PlaytimeString         = (string)converter.Convert(ElapsedSeconds, null, null, CultureInfo.CurrentCulture);
                        PART_GaButtonPlaytime.Content = PlaytimeString;
                    }));
                }
                else
                {
                    this.Dispatcher.BeginInvoke(DispatcherPriority.Loaded, new ThreadStart(delegate
                    {
                        long ElapsedSeconds = 0;

                        LongToTimePlayedConverter converter = new LongToTimePlayedConverter();
                        string PlaytimeString         = (string)converter.Convert(ElapsedSeconds, null, null, CultureInfo.CurrentCulture);
                        PART_GaButtonPlaytime.Content = PlaytimeString;
                    }));
                }
            }
            catch (Exception ex)
            {
                Common.LogError(ex, "GameActivity");
            }
        }
Exemple #2
0
        private void SetStats()
        {
            if (PluginDatabase.Database.UserHltbData != null && PluginDatabase.Database.UserHltbData.TitlesList != null)
            {
                List <TitleList> titleLists = PluginDatabase.Database.UserHltbData.TitlesList;


                PART_CompletionsCount.Content = titleLists.FindAll(x => x.Completion != null).Count;


                long TimeSinglePlayer = 0;
                long TimeCoOp         = 0;
                long TimeVs           = 0;

                foreach (TitleList titleList in titleLists)
                {
                    if (titleList.HltbUserData.Completionist != 0)
                    {
                        TimeSinglePlayer += titleList.HltbUserData.Completionist;
                    }
                    else if (titleList.HltbUserData.MainExtra != 0)
                    {
                        TimeSinglePlayer += titleList.HltbUserData.MainExtra;
                    }
                    else if (titleList.HltbUserData.MainStory != 0)
                    {
                        TimeSinglePlayer += titleList.HltbUserData.MainStory;
                    }

                    TimeCoOp += titleList.HltbUserData.CoOp;
                    TimeCoOp += titleList.HltbUserData.Vs;
                }

                LongToTimePlayedConverter converter = new LongToTimePlayedConverter();

                PART_TimeSinglePlayer.Content = (string)converter.Convert((long)TimeSinglePlayer, null, null, CultureInfo.CurrentCulture);
                PART_TimeCoOp.Content         = (string)converter.Convert((long)TimeCoOp, null, null, CultureInfo.CurrentCulture);
                PART_TimeVs.Content           = (string)converter.Convert((long)TimeVs, null, null, CultureInfo.CurrentCulture);
            }
        }
Exemple #3
0
        internal void SetData(string SourceID)
        {
            StatisticsClass stats;

            if (SourceID == "null")
            {
                stats = StatisticsDatabase.Statistics;
                SwitchDataGames.Visibility   = Visibility.Visible;
                SwitchDataSources.Visibility = Visibility.Visible;
            }
            else
            {
                stats = StatisticsDatabase.Get(Guid.Parse(SourceID));
                SwitchDataGames.Visibility   = Visibility.Hidden;
                SwitchDataSources.Visibility = Visibility.Hidden;
            }

            // Reduce amount of genres
            stats.GameGenres = stats.GameGenres
                               .Where(x => x.Count >= _settings.MinGenreCount)
                               .OrderByDescending(x => x.Count)
                               .TakeMax(_settings.MaxGenres).ToList();

            long   Total             = 0;
            long   TotalInstalled    = 0;
            long   TotalNotLaunching = 0;
            long   TotalFavorite     = 0;
            string TotalPlaytime     = "0h 00min";

            long NotPlayed  = 0;
            long Played     = 0;
            long Beaten     = 0;
            long Completed  = 0;
            long Playing    = 0;
            long Abandoned  = 0;
            long OnHold     = 0;
            long PlanToPlay = 0;

            SeriesCollection StatsGraphicsPlaytimeSeries = new SeriesCollection();

            string[] StatsGraphicsPlaytimeLabels = new string[0];
            ChartValues <CustomerForTime> SourcePlaytimeSeries = new ChartValues <CustomerForTime>();

            SeriesCollection SourceGraphicsGenresSeries = new SeriesCollection();

            if (stats != null)
            {
                // Information
                Total             = stats.Total;
                TotalInstalled    = stats.GameIsInstalled.Count;
                TotalNotLaunching = stats.GameIsNotLaunching.Count;
                TotalFavorite     = stats.GameFavorite.Count;

                LongToTimePlayedConverter converter = new LongToTimePlayedConverter();
                TotalPlaytime = (string)converter.Convert(stats.Playtime, null, null, CultureInfo.CurrentCulture);

                // Game completation
                List <Counter> GameCompletionStatus = stats.GameCompletionStatus;

                for (int i = 0; i < GameCompletionStatus.Count; i++)
                {
                    if (GameCompletionStatus[i].Name == "" + CompletionStatus.NotPlayed)
                    {
                        NotPlayed = GameCompletionStatus[i].Count;
                    }

                    if (GameCompletionStatus[i].Name == "" + CompletionStatus.Played)
                    {
                        Played = GameCompletionStatus[i].Count;
                    }

                    if (GameCompletionStatus[i].Name == "" + CompletionStatus.Beaten)
                    {
                        Beaten = GameCompletionStatus[i].Count;
                    }

                    if (GameCompletionStatus[i].Name == "" + CompletionStatus.Completed)
                    {
                        Completed = GameCompletionStatus[i].Count;
                    }

                    if (GameCompletionStatus[i].Name == "" + CompletionStatus.Playing)
                    {
                        Playing = GameCompletionStatus[i].Count;
                    }

                    if (GameCompletionStatus[i].Name == "" + CompletionStatus.Abandoned)
                    {
                        Abandoned = GameCompletionStatus[i].Count;
                    }

                    if (GameCompletionStatus[i].Name == "" + CompletionStatus.OnHold)
                    {
                        OnHold = GameCompletionStatus[i].Count;
                    }

                    if (GameCompletionStatus[i].Name == "" + CompletionStatus.PlanToPlay)
                    {
                        PlanToPlay = GameCompletionStatus[i].Count;
                    }
                }

                // Graphics playtime
                int             counter = 0;
                List <dataTemp> temp    = new List <dataTemp>();
                if (SourceID == "null")
                {
                    ConcurrentDictionary <Guid, StatisticsClass> StatisticsSourceDatabase = StatisticsDatabase.StatisticsSourceDatabase;
                    StatsGraphicsPlaytimeLabels = new string[StatisticsSourceDatabase.Count];
                    temp = new List <dataTemp>();

                    if (!(bool)SwitchDataGames.IsChecked)
                    {
                        foreach (var item in StatisticsSourceDatabase)
                        {
                            temp.Add(new dataTemp {
                                Name = item.Value.Name, Count = item.Value.Playtime
                            });
                        }
                        temp.Sort((a, b) => a.Count.CompareTo(b.Count));

                        foreach (var item in temp)
                        {
                            SourcePlaytimeSeries.Add(new CustomerForTime
                            {
                                Name   = item.Name,
                                Values = item.Count
                            });
                            StatsGraphicsPlaytimeLabels[counter] = item.Name;
                            counter += 1;
                        }
                    }
                    else
                    {
                        foreach (var itemAll in StatisticsSourceDatabase)
                        {
                            foreach (var item in itemAll.Value.GameSource)
                            {
                                temp.Add(new dataTemp {
                                    Name = item.Name, Count = item.Count
                                });
                            }
                        }

                        temp.Sort((a, b) => b.Count.CompareTo(a.Count));
                        if (temp.Count > 10)
                        {
                            temp = temp.GetRange(0, 10);
                        }
                        temp.Reverse();

                        StatsGraphicsPlaytimeLabels = new string[10];

                        foreach (var item in temp)
                        {
                            if (counter < 10)
                            {
                                SourcePlaytimeSeries.Add(new CustomerForTime
                                {
                                    Name   = item.Name,
                                    Values = item.Count
                                });
                                StatsGraphicsPlaytimeLabels[counter] = item.Name;
                                counter += 1;
                            }
                        }
                    }
                }
                else
                {
                    List <Counter> StatisticsSourceDatabase = StatisticsDatabase.Get(Guid.Parse(SourceID)).GameSource;

                    temp = new List <dataTemp>();
                    foreach (var item in StatisticsSourceDatabase)
                    {
                        temp.Add(new dataTemp {
                            Name = item.Name, Count = item.Count
                        });
                    }

                    temp.Sort((a, b) => b.Count.CompareTo(a.Count));
                    if (temp.Count > 10)
                    {
                        temp = temp.GetRange(0, 10);
                    }
                    temp.Reverse();

                    StatsGraphicsPlaytimeLabels = new string[10];

                    foreach (var item in temp)
                    {
                        if (counter < 10)
                        {
                            SourcePlaytimeSeries.Add(new CustomerForTime
                            {
                                Name   = item.Name,
                                Values = item.Count
                            });
                            StatsGraphicsPlaytimeLabels[counter] = item.Name;
                            counter += 1;
                        }
                    }
                }

                StatsGraphicsPlaytimeSeries.Add(new RowSeries
                {
                    Title  = "Playtime",
                    Values = SourcePlaytimeSeries
                });

                //Graphics genres
                temp = new List <dataTemp>();
                foreach (var item in stats.GameGenres)
                {
                    temp.Add(new dataTemp {
                        Name = item.Name, Count = item.Count
                    });
                }
                temp.Sort((a, b) => b.Count.CompareTo(a.Count));

                foreach (var item in temp)
                {
                    SourceGraphicsGenresSeries.Add(new PieSeries
                    {
                        Title  = item.Name,
                        Values = new ChartValues <CustomerForSingle> {
                            new CustomerForSingle {
                                Name = item.Name, Values = item.Count
                            }
                        },
                        DataLabels = true
                    });
                }
            }


            countTotalGames.Content        = Total;
            countTotalInstalled.Content    = TotalInstalled;
            countTotalNotLaunching.Content = TotalNotLaunching;
            countTotalFavorite.Content     = TotalFavorite;
            countTotalPlaytime.Content     = TotalPlaytime;

            countNotPlayed.Value         = NotPlayed;
            countNotPlayed.Maximum       = (stats == null) ? 1 : stats.Total;
            labelCountNotPlayed.Content  = (stats == null) ? "" : (int)Math.Round((double)(100 * NotPlayed) / stats.Total) + "%";
            countPlayed.Value            = Played;
            countPlayed.Maximum          = (stats == null) ? 1 : stats.Total;
            labelCountPlayed.Content     = (stats == null) ? "" : (int)Math.Round((double)(100 * Played) / stats.Total) + "%";
            countBeaten.Value            = Beaten;
            countBeaten.Maximum          = (stats == null) ? 1 : stats.Total;
            labelCountBeaten.Content     = (stats == null) ? "" : (int)Math.Round((double)(100 * Beaten) / stats.Total) + "%";
            countCompleted.Value         = Completed;
            countCompleted.Maximum       = (stats == null) ? 1 : stats.Total;
            labelCountCompleted.Content  = (stats == null) ? "" : (int)Math.Round((double)(100 * Completed) / stats.Total) + "%";
            countPlaying.Value           = Playing;
            countPlaying.Maximum         = (stats == null) ? 1 : stats.Total;
            labelCountPlaying.Content    = (stats == null) ? "" : (int)Math.Round((double)(100 * Playing) / stats.Total) + "%";
            countAbandoned.Value         = Abandoned;
            countAbandoned.Maximum       = (stats == null) ? 1 : stats.Total;
            labelCountAbandoned.Content  = (stats == null) ? "" : (int)Math.Round((double)(100 * Abandoned) / stats.Total) + "%";
            countOnHold.Value            = OnHold;
            countOnHold.Maximum          = (stats == null) ? 1 : stats.Total;
            labelCountOnHold.Content     = (stats == null) ? "" : (int)Math.Round((double)(100 * OnHold) / stats.Total) + "%";
            countPlanToPlay.Value        = PlanToPlay;
            countPlanToPlay.Maximum      = (stats == null) ? 1 : stats.Total;
            labelCountPlanToPlay.Content = (stats == null) ? "" : (int)Math.Round((double)(100 * PlanToPlay) / stats.Total) + "%";


            //let create a mapper so LiveCharts know how to plot our CustomerViewModel class
            var customerVmMapper = Mappers.Xy <CustomerForTime>()
                                   .Y((value, index) => index)
                                   .X(value => value.Values);

            //lets save the mapper globally
            Charting.For <CustomerForTime>(customerVmMapper);


            //let create a mapper so LiveCharts know how to plot our CustomerViewModel class
            var customerVmMapperPie = Mappers.Xy <CustomerForSingle>()
                                      .X((value, index) => index)
                                      .Y(value => value.Values);

            //lets save the mapper globally
            Charting.For <CustomerForSingle>(customerVmMapperPie);


            StatsGraphicPlaytime.Series  = StatsGraphicsPlaytimeSeries;
            StatsGraphicPlaytimeY.Labels = StatsGraphicsPlaytimeLabels;

            StatsGraphicGenres.Series = SourceGraphicsGenresSeries;
        }
        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");
                }
            });
        }
        public HowLongToBeat(HowLongToBeatData data, Game game, IPlayniteAPI PlayniteApi)
        {
            this.data = data;

            InitializeComponent();

            HltbDataUser gameData = data.GetData();

            CoverImage = PlayniteApi.Database.GetFullFilePath(game.CoverImage);
            GameName   = game.Name;


            int ElIndicator = 0;

            Hltb_El1.Visibility       = System.Windows.Visibility.Hidden;
            Hltb_El1_Color.Visibility = System.Windows.Visibility.Hidden;
            Hltb_El2.Visibility       = System.Windows.Visibility.Hidden;
            Hltb_El2_Color.Visibility = System.Windows.Visibility.Hidden;
            Hltb_El3.Visibility       = System.Windows.Visibility.Hidden;
            Hltb_El3_Color.Visibility = System.Windows.Visibility.Hidden;

            if (gameData.GameHltbData.MainStory != 0)
            {
                ElIndicator += 1;
                SetDataInView(ElIndicator, resources.GetString("LOCHowLongToBeatMainStory"), gameData.GameHltbData.MainStoryFormat);
            }

            if (gameData.GameHltbData.MainExtra != 0)
            {
                ElIndicator += 1;
                SetDataInView(ElIndicator, resources.GetString("LOCHowLongToBeatMainExtra"), gameData.GameHltbData.MainExtraFormat);
            }

            if (gameData.GameHltbData.Completionist != 0)
            {
                ElIndicator += 1;
                SetDataInView(ElIndicator, resources.GetString("LOCHowLongToBeatCompletionist"), gameData.GameHltbData.CompletionistFormat);
            }

            if (gameData.GameHltbData.Solo != 0)
            {
                ElIndicator += 1;
                SetDataInView(ElIndicator, resources.GetString("LOCHowLongToBeatSolo"), gameData.GameHltbData.SoloFormat);
            }

            if (gameData.GameHltbData.CoOp != 0)
            {
                ElIndicator += 1;
                SetDataInView(ElIndicator, resources.GetString("LOCHowLongToBeatCoOp"), gameData.GameHltbData.CoOpFormat);
            }

            if (gameData.GameHltbData.Vs != 0)
            {
                ElIndicator += 1;
                SetDataInView(ElIndicator, resources.GetString("LOCHowLongToBeatVs"), gameData.GameHltbData.VsFormat);
            }


            LongToTimePlayedConverter converter = new LongToTimePlayedConverter();

            PlaytimeFormat = (string)converter.Convert((long)game.Playtime, null, null, CultureInfo.CurrentCulture);


            HltbProgressBar.Children.Add(new HltbProgressBar(game.Playtime, gameData));
            HltbProgressBar.UpdateLayout();


            // Set Binding data
            DataContext = this;
        }
Exemple #6
0
        public override void RefreshElements(Game GameSelected, bool force = false)
        {
#if DEBUG
            logger.Debug($"GameActivity [Ignored] - RefreshElements({GameSelected.Name})");
#endif
            CancellationTokenSource tokenSource = new CancellationTokenSource();
            CancellationToken       ct          = tokenSource.Token;

            Task TaskRefresh = Task.Run(() =>
            {
                try
                {
                    Initial();

                    // Reset resources
                    List <ResourcesList> resourcesLists = new List <ResourcesList>();
                    resourcesLists.Add(new ResourcesList {
                        Key = "Ga_HasData", Value = false
                    });
                    resourcesLists.Add(new ResourcesList {
                        Key = "Ga_HasDataLog", Value = false
                    });
                    resourcesLists.Add(new ResourcesList {
                        Key = "Ga_LastDateSession", Value = string.Empty
                    });
                    resourcesLists.Add(new ResourcesList {
                        Key = "Ga_LastDateTimeSession", Value = string.Empty
                    });
                    resourcesLists.Add(new ResourcesList {
                        Key = "Ga_LastPlaytimeSession", Value = string.Empty
                    });

                    resourcesLists.Add(new ResourcesList {
                        Key = "Ga_IntegrationShowGraphic", Value = PluginDatabase.PluginSettings.IntegrationShowGraphic
                    });
                    resourcesLists.Add(new ResourcesList {
                        Key = "Ga_IntegrationShowGraphicLog", Value = PluginDatabase.PluginSettings.IntegrationShowGraphicLog
                    });
                    ui.AddResources(resourcesLists);


                    // Load data
                    if (!GameActivity.PluginDatabase.IsLoaded)
                    {
                        return;
                    }
                    GameActivities gameActivities = GameActivity.PluginDatabase.Get(GameSelected);

                    if (gameActivities.HasData)
                    {
                        resourcesLists = new List <ResourcesList>();
                        resourcesLists.Add(new ResourcesList {
                            Key = "Ga_IntegrationShowGraphic", Value = PluginDatabase.PluginSettings.IntegrationShowGraphic
                        });
                        resourcesLists.Add(new ResourcesList {
                            Key = "Ga_IntegrationShowGraphicLog", Value = PluginDatabase.PluginSettings.IntegrationShowGraphicLog
                        });

                        resourcesLists.Add(new ResourcesList {
                            Key = "Ga_HasData", Value = gameActivities.HasData
                        });

                        try
                        {
                            var data = gameActivities.GetSessionActivityDetails();
                            resourcesLists.Add(new ResourcesList {
                                Key = "Ga_HasDataLog", Value = gameActivities.HasDataDetails()
                            });
                        }
                        catch
                        {
                        }

                        try
                        {
                            resourcesLists.Add(new ResourcesList {
                                Key = "Ga_LastDateSession", Value = gameActivities.GetLastSession().ToLocalTime().ToString(Constants.DateUiFormat)
                            });
                            resourcesLists.Add(new ResourcesList
                            {
                                Key   = "Ga_LastDateTimeSession",
                                Value = gameActivities.GetLastSession().ToLocalTime().ToString(Constants.DateUiFormat)
                                        + " " + gameActivities.GetLastSession().ToLocalTime().ToString(Constants.TimeUiFormat)
                            });
                        }
                        catch
                        {
                        }

                        try
                        {
                            LongToTimePlayedConverter converter = new LongToTimePlayedConverter();
                            string playtime = (string)converter.Convert((long)gameActivities.GetLastSessionActivity().ElapsedSeconds, null, null, CultureInfo.CurrentCulture);
                            resourcesLists.Add(new ResourcesList {
                                Key = "Ga_LastPlaytimeSession", Value = playtime
                            });
                        }
                        catch
                        {
                        }
                    }
                    else
                    {
                        logger.Warn($"GameActivity - No data for {GameSelected.Name}");
                    }

                    // If not cancel, show
                    if (!ct.IsCancellationRequested && GameSelected.Id == ActivityDatabase.GameSelected.Id)
                    {
                        ui.AddResources(resourcesLists);

                        if (_PlayniteApi.ApplicationInfo.Mode == ApplicationMode.Desktop)
                        {
                            PluginDatabase.SetCurrent(gameActivities);
                        }
                    }
                }
                catch (Exception ex)
                {
                    Common.LogError(ex, "GameActivity");
                }
            }, ct);

            taskHelper.Add(TaskRefresh, tokenSource);
        }
        public HowLongToBeatView(HowLongToBeatData data, Game game, IPlayniteAPI PlayniteApi, HowLongToBeatSettings settings)
        {
            _data = data;

            InitializeComponent();

            HltbDataUser gameData = data.GetData();

            if (data.hasData && gameData != null && gameData.GameHltbData != null)
            {
                if (string.IsNullOrEmpty(game.CoverImage))
                {
                    CoverImage = gameData.GameHltbData.UrlImg;
                }
                else
                {
                    CoverImage = gameData.GameHltbData.UrlImg;
                    if (!settings.ShowHltbImg)
                    {
                        CoverImage = PlayniteApi.Database.GetFullFilePath(game.CoverImage);
                    }
                }
                GameName = game.Name;
                HltbName = resources.GetString("LOCSourceLabel") + ": " + gameData.GameHltbData.Name;


                int ElIndicator = 0;

                Hltb_El1.Visibility       = Visibility.Hidden;
                Hltb_El1_Color.Visibility = Visibility.Hidden;
                Hltb_El2.Visibility       = Visibility.Hidden;
                Hltb_El2_Color.Visibility = Visibility.Hidden;
                Hltb_El3.Visibility       = Visibility.Hidden;
                Hltb_El3_Color.Visibility = Visibility.Hidden;

                if (gameData.GameHltbData.MainStory != 0)
                {
                    ElIndicator += 1;
                    SetDataInView(ElIndicator, resources.GetString("LOCHowLongToBeatMainStory"), gameData.GameHltbData.MainStoryFormat);
                }

                if (gameData.GameHltbData.MainExtra != 0)
                {
                    ElIndicator += 1;
                    SetDataInView(ElIndicator, resources.GetString("LOCHowLongToBeatMainExtra"), gameData.GameHltbData.MainExtraFormat);
                }

                if (gameData.GameHltbData.Completionist != 0)
                {
                    ElIndicator += 1;
                    SetDataInView(ElIndicator, resources.GetString("LOCHowLongToBeatCompletionist"), gameData.GameHltbData.CompletionistFormat);
                }

                if (gameData.GameHltbData.Solo != 0)
                {
                    ElIndicator += 1;
                    SetDataInView(ElIndicator, resources.GetString("LOCHowLongToBeatSolo"), gameData.GameHltbData.SoloFormat);
                }

                if (gameData.GameHltbData.CoOp != 0)
                {
                    ElIndicator += 1;
                    SetDataInView(ElIndicator, resources.GetString("LOCHowLongToBeatCoOp"), gameData.GameHltbData.CoOpFormat);
                }

                if (gameData.GameHltbData.Vs != 0)
                {
                    ElIndicator += 1;
                    SetDataInView(ElIndicator, resources.GetString("LOCHowLongToBeatVs"), gameData.GameHltbData.VsFormat);
                }


                Hltb_El1_Color.Background = new SolidColorBrush(settings.ColorFirst);
                Hltb_El2_Color.Background = new SolidColorBrush(settings.ColorSecond);
                Hltb_El3_Color.Background = new SolidColorBrush(settings.ColorThird);


                LongToTimePlayedConverter converter = new LongToTimePlayedConverter();
                PlaytimeFormat = (string)converter.Convert((long)game.Playtime, null, null, CultureInfo.CurrentCulture);

                if (!data.isEmpty)
                {
                    HltbProgressBar hltbProgressBar = new HltbProgressBar();
                    hltbProgressBar.SetHltbData(game.Playtime, data, settings);
                    PART_HltbProgressBar.Children.Add(hltbProgressBar);
                }
            }

            // Set Binding data
            DataContext = this;
        }
        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 HowLongToBeatView(IPlayniteAPI PlayniteApi, HowLongToBeatSettings settings, GameHowLongToBeat gameHowLongToBeat)
        {
            _gameHowLongToBeat = gameHowLongToBeat;

            InitializeComponent();


            HltbDataUser gameData = _gameHowLongToBeat.Items.FirstOrDefault();

            if (gameData == null)
            {
                return;
            }

            if (_gameHowLongToBeat.HasData || _gameHowLongToBeat.HasDataEmpty)
            {
                CoverImage = gameData.UrlImg;

                if (!settings.ShowHltbImg)
                {
                    if (!_gameHowLongToBeat.CoverImage.IsNullOrEmpty())
                    {
                        CoverImage = PlayniteApi.Database.GetFullFilePath(_gameHowLongToBeat.CoverImage);
                    }
                }

                GameName = _gameHowLongToBeat.Name;
                HltbName = resources.GetString("LOCSourceLabel") + ": " + gameData.Name;
            }

            if (_gameHowLongToBeat.HasData)
            {
                int ElIndicator = 0;

                Hltb_El1.Visibility       = Visibility.Hidden;
                Hltb_El1_Color.Visibility = Visibility.Hidden;
                Hltb_El2.Visibility       = Visibility.Hidden;
                Hltb_El2_Color.Visibility = Visibility.Hidden;
                Hltb_El3.Visibility       = Visibility.Hidden;
                Hltb_El3_Color.Visibility = Visibility.Hidden;

                TitleList titleList = PluginDatabase.GetUserHltbData(_gameHowLongToBeat.GetData().Id);

                if (gameData.GameHltbData.MainStory != 0)
                {
                    ElIndicator += 1;
                    SetDataInView(ElIndicator, resources.GetString("LOCHowLongToBeatMainStory"), gameData.GameHltbData.MainStoryFormat, (titleList != null) ? titleList.HltbUserData.MainStoryFormat : string.Empty);
                    SetColor(ElIndicator, PluginDatabase.PluginSettings.ColorFirst);
                }

                if (gameData.GameHltbData.MainExtra != 0)
                {
                    ElIndicator += 1;
                    SetDataInView(ElIndicator, resources.GetString("LOCHowLongToBeatMainExtra"), gameData.GameHltbData.MainExtraFormat, (titleList != null) ? titleList.HltbUserData.MainExtraFormat : string.Empty);
                    SetColor(ElIndicator, PluginDatabase.PluginSettings.ColorSecond);
                }

                if (gameData.GameHltbData.Completionist != 0)
                {
                    ElIndicator += 1;
                    SetDataInView(ElIndicator, resources.GetString("LOCHowLongToBeatCompletionist"), gameData.GameHltbData.CompletionistFormat, (titleList != null) ? titleList.HltbUserData.CompletionistFormat : string.Empty);
                    SetColor(ElIndicator, PluginDatabase.PluginSettings.ColorThird);
                }

                if (gameData.GameHltbData.Solo != 0)
                {
                    ElIndicator += 1;
                    SetDataInView(ElIndicator, resources.GetString("LOCHowLongToBeatSolo"), gameData.GameHltbData.SoloFormat, (titleList != null) ? titleList.HltbUserData.SoloFormat : string.Empty);
                    SetColor(ElIndicator, PluginDatabase.PluginSettings.ColorFirstMulti);
                }

                if (gameData.GameHltbData.CoOp != 0)
                {
                    ElIndicator += 1;
                    SetDataInView(ElIndicator, resources.GetString("LOCHowLongToBeatCoOp"), gameData.GameHltbData.CoOpFormat, (titleList != null) ? titleList.HltbUserData.CoOpFormat : string.Empty);
                    SetColor(ElIndicator, PluginDatabase.PluginSettings.ColorSecondMulti);
                }

                if (gameData.GameHltbData.Vs != 0)
                {
                    ElIndicator += 1;
                    SetDataInView(ElIndicator, resources.GetString("LOCHowLongToBeatVs"), gameData.GameHltbData.VsFormat, (titleList != null) ? titleList.HltbUserData.VsFormat : string.Empty);
                    SetColor(ElIndicator, PluginDatabase.PluginSettings.ColorThirdMulti);
                }


                LongToTimePlayedConverter converter = new LongToTimePlayedConverter();
                PlaytimeFormat = (string)converter.Convert((long)_gameHowLongToBeat.Playtime, null, null, CultureInfo.CurrentCulture);

                hltbProgressBar = new HltbProgressBar();
                PART_HltbProgressBar.Children.Add(hltbProgressBar);
            }

            // Set Binding data
            DataContext = this;
        }