public GameActivityGameGraphicLog(GameActivitySettings settings, GameActivityClass gameActivity, string dateSelected = "", int variateurLog = 0, bool withTitle = true) { InitializeComponent(); this.variateurLog = variateurLog; GetActivityForGamesLogGraphics(gameActivity, withTitle, dateSelected); }
// Create FrameworkElement with game activity datas public StackPanel CreateGa(GameActivityClass gameActivity, bool ShowTitle, bool ShowGraphic, bool ShowGraphicLog, bool IsCustom = false) { StackPanel spGa = new StackPanel(); spGa.Name = "PART_GameActivity"; if (ShowTitle) { TextBlock tbGa = new TextBlock(); tbGa.Name = "PART_GameActivity_TextBlock"; tbGa.Text = resources.GetString("LOCGameActivityTitle"); tbGa.Style = (Style)resources.GetResource("BaseTextBlockStyle"); tbGa.Margin = new Thickness(0, 15, 0, 10); Separator sep = new Separator(); sep.Name = "PART_GameActivity_Separator"; sep.Background = (Brush)resources.GetResource("PanelSeparatorBrush"); spGa.Children.Add(tbGa); spGa.Children.Add(sep); spGa.UpdateLayout(); } if (ShowGraphic) { StackPanel spGaG = new StackPanel(); if (!IsCustom) { spGaG.Name = "PART_GameActivty_Graphic"; spGaG.Height = 120; spGaG.MaxHeight = 120; spGaG.Margin = new Thickness(0, 5, 0, 5); } spGaG.Children.Add(new GameActivityGameGraphicTime(settings, gameActivity)); spGa.Children.Add(spGaG); spGa.UpdateLayout(); } if (ShowGraphicLog) { StackPanel spGaGL = new StackPanel(); if (!IsCustom) { spGaGL.Name = "PART_GameActivty_GraphicLog"; spGaGL.Height = 120; spGaGL.MaxHeight = 120; spGaGL.Margin = new Thickness(0, 5, 0, 5); } spGaGL.Children.Add(new GameActivityGameGraphicLog(settings, gameActivity)); spGa.Children.Add(spGaGL); spGa.UpdateLayout(); } return(spGa); }
/// <summary> /// Get data for the selected game. /// </summary> /// <param name="gameID"></param> /// <param name="variateur"></param> public void getActivityForGamesTimeGraphics(string gameID) { gameSeriesContener.Children.Clear(); GameActivityClass gameActivity = GameActivityDatabases.Get(Guid.Parse(gameID)); List <Activity> gameActivities = gameActivity.Activities; var graph = new GameActivityGameGraphicTime(settings, gameActivity, variateurTime); graph.gameSeriesDataClick += new DataClickHandler(GameSeries_DataClick); gameSeriesContener.Children.Add(graph); gameSeriesContener.UpdateLayout(); gameLabel.Content = resources.GetString("LOCGameActivityTimeTitle"); }
/// <summary> /// Get data detail for the selected game. /// </summary> /// <param name="gameID"></param> public void getActivityForGamesLogGraphics(string gameID, string dateSelected = "") { gameSeriesContener.Children.Clear(); GameActivityClass gameActivity = GameActivityDatabases.Get(Guid.Parse(gameID)); List <Activity> gameActivities = gameActivity.Activities; gameSeriesContener.Children.Add(new GameActivityGameGraphicLog(settings, gameActivity, dateSelected, variateurLog, false)); gameSeriesContener.UpdateLayout(); if (dateSelected == "") { gameLabel.Content = resources.GetString("LOCGameActivityLogTitle"); } else { gameLabel.Content = resources.GetString("LOCGameActivityLogTitleDate") + " " + Convert.ToDateTime(dateSelected).ToString(Playnite.Common.Constants.DateUiFormat); } }
public void GetActivityForGamesLogGraphics(GameActivityClass gameActivity, bool withTitle, string dateSelected = "") { List <ActivityDetailsData> gameActivitiesDetails = gameActivity.GetSessionActivityDetails(dateSelected); string[] activityForGameLogLabels = new string[0]; List <ActivityDetailsData> gameLogsDefinitive = new List <ActivityDetailsData>(); if (gameActivitiesDetails.Count > 0) { if (gameActivitiesDetails.Count > 10) { // Variateur int conteurEnd = gameActivitiesDetails.Count + variateurLog; int conteurStart = conteurEnd - 10; if (conteurEnd > gameActivitiesDetails.Count) { int temp = conteurEnd - gameActivitiesDetails.Count; conteurEnd = gameActivitiesDetails.Count; conteurStart = conteurEnd - 10; variateurLog = variateurLogTemp; } if (conteurStart < 0) { conteurStart = 0; conteurEnd = 10; variateurLog = variateurLogTemp; } variateurLogTemp = variateurLog; // Create data int sCount = 0; activityForGameLogLabels = new string[10]; for (int iLog = conteurStart; iLog < conteurEnd; iLog++) { gameLogsDefinitive.Add(gameActivitiesDetails[iLog]); activityForGameLogLabels[sCount] = Convert.ToDateTime(gameActivitiesDetails[iLog].Datelog).ToLocalTime().ToString(Playnite.Common.Constants.TimeUiFormat); sCount += 1; } } else { gameLogsDefinitive = gameActivitiesDetails; activityForGameLogLabels = new string[gameActivitiesDetails.Count]; for (int iLog = 0; iLog < gameActivitiesDetails.Count; iLog++) { activityForGameLogLabels[iLog] = Convert.ToDateTime(gameActivitiesDetails[iLog].Datelog).ToLocalTime().ToString(Playnite.Common.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); } 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"); gameSeriesLog.DataTooltip = new LiveCharts.Wpf.DefaultTooltip(); gameSeriesLog.DataTooltip.Background = (Brush)resources.GetResource("CommonToolTipBackgroundBrush"); gameSeriesLog.DataTooltip.Padding = new Thickness(10); gameSeriesLog.DataTooltip.BorderThickness = (Thickness)resources.GetResource("CommonToolTipBorderThickness"); gameSeriesLog.DataTooltip.BorderBrush = (Brush)resources.GetResource("CommonToolTipBorderBrush"); gameSeriesLog.DataTooltip.Foreground = (Brush)resources.GetResource("CommonToolTipForeground"); gameSeriesLog.Series = activityForGameLogSeries; gameLabelsY.MinValue = 0; gameLabelsX.Labels = activityForGameLogLabels; gameLabelsY.LabelFormatter = activityForGameLogFormatter; if (withTitle) { lGameSeriesLog.Visibility = Visibility.Visible; lGameSeriesLog.Content = resources.GetString("LOCGameActivityLogTitleDate") + " " + ((DateTime)gameActivitiesDetails[0].Datelog).ToString(Playnite.Common.Constants.DateUiFormat); } }
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 GameActivityGameGraphicTime(GameActivitySettings settings, GameActivityClass gameActivity, int variateurTime = 0) { InitializeComponent(); GetActivityForGamesTimeGraphics(gameActivity, variateurTime); }
private void Integration() { try { // Refresh database if (GameActivity.isFirstLoad) { GameActivityDatabases = new GameActivityCollection(); GameActivityDatabases.InitializeCollection(this.GetPluginUserDataPath()); GameActivity.isFirstLoad = false; } GameActivityClass SelectedGameGameActivity = GameActivityDatabases.Get(GameSelected.Id); // Search game description if (PART_ElemDescription == null) { foreach (StackPanel sp in Tools.FindVisualChildren <StackPanel>(Application.Current.MainWindow)) { if (sp.Name == "PART_ElemDescription") { PART_ElemDescription = sp; break; } } } // Delete logger.Info("GameActivity - Delete"); ui.RemoveButtonInGameSelectedActionBarButtonOrToggleButton("PART_GaButton"); ui.RemoveButtonInGameSelectedActionBarButtonOrToggleButton("PART_GaToggleButton"); ui.RemoveElementInGameSelectedDescription("PART_GameActivity"); ui.ClearElementInCustomTheme("PART_GameActivty_Graphic"); ui.ClearElementInCustomTheme("PART_GameActivty_GraphicLog"); // Reset resources //List<ResourcesList> resourcesLists = new List<ResourcesList>(); //ui.AddResources(resourcesLists); // No game activity if (SelectedGameGameActivity == null) { logger.Info("GameActivity - No activity for " + GameSelected.Name); return; } // Add resources //ui.AddResources(resourcesLists); // Auto integration if (settings.EnableIntegrationInDescription || settings.EnableIntegrationInDescriptionWithToggle) { if (settings.EnableIntegrationInDescriptionWithToggle) { ToggleButton tb = new ToggleButton(); if (settings.IntegrationToggleDetails) { tb = new GameActivityToggleButtonDetails(SelectedGameGameActivity.GetLastSessionActivity().ElapsedSeconds); } else { tb = new GameActivityToggleButton(); tb.Content = resources.GetString("LOCGameActivityTitle"); } tb.IsChecked = false; tb.Name = "PART_GaToggleButton"; tb.Width = 150; tb.HorizontalAlignment = HorizontalAlignment.Right; tb.VerticalAlignment = VerticalAlignment.Stretch; tb.Margin = new Thickness(10, 0, 0, 0); tb.Click += OnGameSelectedToggleButtonClick; ui.AddButtonInGameSelectedActionBarButtonOrToggleButton(tb); } // Add game activity elements StackPanel GaSp = CreateGa(SelectedGameGameActivity, settings.IntegrationShowTitle, settings.IntegrationShowGraphic, settings.IntegrationShowGraphicLog, false); if (settings.EnableIntegrationInDescriptionWithToggle) { GaSp.Visibility = Visibility.Collapsed; } ui.AddElementInGameSelectedDescription(GaSp, settings.IntegrationTopGameDetails); } // Auto adding button if (settings.EnableIntegrationButton || settings.EnableIntegrationButtonDetails) { Button bt = new Button(); if (settings.EnableIntegrationButton) { bt.Content = resources.GetString("LOCGameActivityTitle"); } if (settings.EnableIntegrationButtonDetails) { bt = new GameActivityButtonDetails(SelectedGameGameActivity.GetLastSessionActivity().ElapsedSeconds); } bt.Name = "PART_GaButton"; bt.Width = 150; bt.HorizontalAlignment = HorizontalAlignment.Right; bt.VerticalAlignment = VerticalAlignment.Stretch; bt.Margin = new Thickness(10, 0, 0, 0); bt.Click += OnBtGameSelectedActionBarClick; ui.AddButtonInGameSelectedActionBarButtonOrToggleButton(bt); } // Custom theme if (settings.EnableIntegrationInCustomTheme) { // Create StackPanel spGaG = CreateGa(SelectedGameGameActivity, false, true, false, true); ui.AddElementInCustomTheme(spGaG, "PART_GameActivty_Graphic"); StackPanel spGaGL = CreateGa(SelectedGameGameActivity, false, false, true, true); ui.AddElementInCustomTheme(spGaGL, "PART_GameActivty_GraphicLog"); } } catch (Exception ex) { Common.LogError(ex, "GameActivity", $"Impossible integration"); } }
/// <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; }