Esempio n. 1
0
        // Add code to be executed when game is started running.
        public override void OnGameStarted(Game game)
        {
            PlayniteUiHelper.ResetToggle();

            // start timer si log is enable.
            if (settings.EnableLogging)
            {
                dataHWiNFO_start();
            }

            DateTime DateSession = DateTime.Now.ToUniversalTime();

            GameActivitiesLog = PluginDatabase.Get(game);
            GameActivitiesLog.Items.Add(new Activity
            {
                DateSession = DateSession,
                SourceID    = game.SourceId,
                PlatformID  = game.PlatformId
            });
            GameActivitiesLog.ItemsDetails.Items.TryAdd(DateSession, new List <ActivityDetailsData>());
        }
        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");
                }
            });
        }
Esempio n. 3
0
        public void GetActivityForGamesLogGraphics(GameActivities gameActivities, bool withTitle, DateTime?dateSelected = null, string title = "", int variateurLog = 0, int limit = 10)
        {
            Task.Run(() =>
            {
                try
                {
                    this.Dispatcher.BeginInvoke(DispatcherPriority.Loaded, new ThreadStart(delegate
                    {
                        if (!gameActivities.HasDataDetails(dateSelected, title))
                        {
                            this.Visibility = Visibility.Collapsed;
                            return;
                        }
                        else
                        {
                            this.Visibility = Visibility.Visible;
                        }
                    }));


                    List <ActivityDetailsData> ActivitiesDetails  = gameActivities.GetSessionActivityDetails(dateSelected, title);
                    string[] activityForGameLogLabels             = new string[0];
                    List <ActivityDetailsData> gameLogsDefinitive = new List <ActivityDetailsData>();
                    if (ActivitiesDetails.Count > 0)
                    {
                        if (ActivitiesDetails.Count > limit)
                        {
                            // Variateur
                            int conteurEnd   = ActivitiesDetails.Count + variateurLog;
                            int conteurStart = conteurEnd - limit;

                            if (conteurEnd > ActivitiesDetails.Count)
                            {
                                int temp     = conteurEnd - ActivitiesDetails.Count;
                                conteurEnd   = ActivitiesDetails.Count;
                                conteurStart = conteurEnd - limit;

                                variateurLog = _variateurLogTemp;
                            }

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

                                variateurLog = _variateurLogTemp;
                            }

                            _variateurLogTemp = variateurLog;

                            // Create data
                            int sCount = 0;
                            activityForGameLogLabels = new string[limit];
                            for (int iLog = conteurStart; iLog < conteurEnd; iLog++)
                            {
                                gameLogsDefinitive.Add(ActivitiesDetails[iLog]);
                                activityForGameLogLabels[sCount] = Convert.ToDateTime(ActivitiesDetails[iLog].Datelog).ToLocalTime().ToString(Constants.TimeUiFormat);
                                sCount += 1;
                            }
                        }
                        else
                        {
                            gameLogsDefinitive = ActivitiesDetails;

                            activityForGameLogLabels = new string[ActivitiesDetails.Count];
                            for (int iLog = 0; iLog < ActivitiesDetails.Count; iLog++)
                            {
                                activityForGameLogLabels[iLog] = Convert.ToDateTime(ActivitiesDetails[iLog].Datelog).ToLocalTime().ToString(Constants.TimeUiFormat);
                            }
                        }
                    }
                    else
                    {
                        return;
                    }

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

                    this.Dispatcher.BeginInvoke(DispatcherPriority.Background, new ThreadStart(delegate
                    {
                        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");

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

                        PART_ChartLogActivity.Series                = activityForGameLogSeries;
                        PART_ChartLogActivityLabelsY.MinValue       = 0;
                        PART_ChartLogActivityLabelsX.Labels         = activityForGameLogLabels;
                        PART_ChartLogActivityLabelsY.LabelFormatter = activityForGameLogFormatter;

                        if (withTitle)
                        {
                            lGameSeriesLog.Visibility = Visibility.Visible;
                            lGameSeriesLog.Content    = resources.GetString("LOCGameActivityLogTitleDate") + " "
                                                        + ((DateTime)ActivitiesDetails[0].Datelog).ToString(Constants.DateUiFormat);
                        }
                    }));
                }
                catch (Exception ex)
                {
                    Common.LogError(ex, "GameActivity");
                }
            });
        }
Esempio n. 4
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);
        }
Esempio n. 5
0
        public void ConvertDB(IPlayniteAPI PlayniteApi)
        {
            GlobalProgressOptions globalProgressOptions = new GlobalProgressOptions(
                "GameActivity - Database migration",
                false
                );

            globalProgressOptions.IsIndeterminate = true;

            PlayniteApi.Dialogs.ActivateGlobalProgress((activateGlobalProgress) =>
            {
                Stopwatch stopWatch = new Stopwatch();
                stopWatch.Start();
                logger.Info($"GameActivity - ConvertDB()");

                int Converted = 0;

                foreach (var item in Items)
                {
                    try
                    {
                        if (PlayniteApi.Database.Games.Get(item.Key) != null)
                        {
                            GameActivities GameActivitiesLog = GameActivity.PluginDatabase.Get(item.Key);

                            foreach (var Activity in item.Value.Activities)
                            {
                                DateTime DateSession = (DateTime)Activity.DateSession;

                                GameActivitiesLog.Items.Add(new Activity
                                {
                                    DateSession    = Activity.DateSession,
                                    SourceID       = Activity.SourceID,
                                    ElapsedSeconds = Activity.ElapsedSeconds
                                });

                                var ActivitiesDetails = item.Value.GetSessionActivityDetails(DateSession);

                                List <ActivityDetailsData> ListActivityDetails = new List <ActivityDetailsData>();
                                foreach (var ActivityDetails in ActivitiesDetails)
                                {
                                    ListActivityDetails.Add(new ActivityDetailsData
                                    {
                                        Datelog = ActivityDetails.Datelog,
                                        FPS     = ActivityDetails.FPS,
                                        CPU     = ActivityDetails.CPU,
                                        CPUT    = ActivityDetails.CPUT,
                                        GPU     = ActivityDetails.GPU,
                                        GPUT    = ActivityDetails.GPUT,
                                        RAM     = ActivityDetails.RAM
                                    });
                                }

                                GameActivitiesLog.ItemsDetails.Items.TryAdd(DateSession, ListActivityDetails);
                            }

                            Thread.Sleep(10);
                            GameActivity.PluginDatabase.Update(GameActivitiesLog);
                            Converted++;
                        }
                        else
                        {
                            logger.Warn($"GameActivity - Game is deleted - {item.Key.ToString()}");
                        }
                    }
                    catch (Exception ex)
                    {
                        Common.LogError(ex, "GameActivity", $"Failed to load ConvertDB from {item.Key} - {item.Value.GameName}");
                    }
                }

                logger.Info($"GameActivity - Converted {Converted} / {Items.Count}");

                stopWatch.Stop();
                TimeSpan ts = stopWatch.Elapsed;
                logger.Info($"GameActivity - Migration - {String.Format("{0:00}:{1:00}.{2:00}", ts.Minutes, ts.Seconds, ts.Milliseconds / 10)}");
            }, globalProgressOptions);

            IsOld = false;
        }