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