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