aboutsummaryrefslogtreecommitdiff
path: root/Ryujinx.HLE/HOS/Services/Sdb/Pdm/QueryService
diff options
context:
space:
mode:
authorTSR Berry <20988865+TSRBerry@users.noreply.github.com>2023-04-08 01:22:00 +0200
committerMary <thog@protonmail.com>2023-04-27 23:51:14 +0200
commitcee712105850ac3385cd0091a923438167433f9f (patch)
tree4a5274b21d8b7f938c0d0ce18736d3f2993b11b1 /Ryujinx.HLE/HOS/Services/Sdb/Pdm/QueryService
parentcd124bda587ef09668a971fa1cac1c3f0cfc9f21 (diff)
Move solution and projects to src
Diffstat (limited to 'Ryujinx.HLE/HOS/Services/Sdb/Pdm/QueryService')
-rw-r--r--Ryujinx.HLE/HOS/Services/Sdb/Pdm/QueryService/QueryPlayStatisticsManager.cs84
-rw-r--r--Ryujinx.HLE/HOS/Services/Sdb/Pdm/QueryService/Types/ApplicationPlayStatistics.cs12
-rw-r--r--Ryujinx.HLE/HOS/Services/Sdb/Pdm/QueryService/Types/PlayLogQueryCapability.cs9
3 files changed, 0 insertions, 105 deletions
diff --git a/Ryujinx.HLE/HOS/Services/Sdb/Pdm/QueryService/QueryPlayStatisticsManager.cs b/Ryujinx.HLE/HOS/Services/Sdb/Pdm/QueryService/QueryPlayStatisticsManager.cs
deleted file mode 100644
index 52a07d46..00000000
--- a/Ryujinx.HLE/HOS/Services/Sdb/Pdm/QueryService/QueryPlayStatisticsManager.cs
+++ /dev/null
@@ -1,84 +0,0 @@
-using Ryujinx.Common;
-using Ryujinx.Cpu;
-using Ryujinx.HLE.HOS.Services.Account.Acc;
-using Ryujinx.HLE.HOS.Services.Sdb.Pdm.QueryService.Types;
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Runtime.CompilerServices;
-
-namespace Ryujinx.HLE.HOS.Services.Sdb.Pdm.QueryService
-{
- static class QueryPlayStatisticsManager
- {
- private static Dictionary<UserId, ApplicationPlayStatistics> applicationPlayStatistics = new Dictionary<UserId, ApplicationPlayStatistics>();
-
- internal static ResultCode GetPlayStatistics(ServiceCtx context, bool byUserId = false)
- {
- ulong inputPosition = context.Request.SendBuff[0].Position;
- ulong inputSize = context.Request.SendBuff[0].Size;
-
- ulong outputPosition = context.Request.ReceiveBuff[0].Position;
- ulong outputSize = context.Request.ReceiveBuff[0].Size;
-
- UserId userId = byUserId ? context.RequestData.ReadStruct<UserId>() : new UserId();
-
- if (byUserId)
- {
- if (!context.Device.System.AccountManager.TryGetUser(userId, out _))
- {
- return ResultCode.UserNotFound;
- }
- }
-
- PlayLogQueryCapability queryCapability = (PlayLogQueryCapability)context.Device.Processes.ActiveApplication.ApplicationControlProperties.PlayLogQueryCapability;
-
- List<ulong> titleIds = new List<ulong>();
-
- for (ulong i = 0; i < inputSize / sizeof(ulong); i++)
- {
- titleIds.Add(context.Memory.Read<ulong>(inputPosition));
- }
-
- if (queryCapability == PlayLogQueryCapability.WhiteList)
- {
- // Check if input title ids are in the whitelist.
- foreach (ulong titleId in titleIds)
- {
- if (!context.Device.Processes.ActiveApplication.ApplicationControlProperties.PlayLogQueryableApplicationId.ItemsRo.Contains(titleId))
- {
- return (ResultCode)Am.ResultCode.ObjectInvalid;
- }
- }
- }
-
- MemoryHelper.FillWithZeros(context.Memory, outputPosition, (int)outputSize);
-
- // Return ResultCode.ServiceUnavailable if data is locked by another process.
- var filteredApplicationPlayStatistics = applicationPlayStatistics.AsEnumerable();
-
- if (queryCapability == PlayLogQueryCapability.None)
- {
- filteredApplicationPlayStatistics = filteredApplicationPlayStatistics.Where(kv => kv.Value.TitleId == context.Process.TitleId);
- }
- else // PlayLogQueryCapability.All
- {
- filteredApplicationPlayStatistics = filteredApplicationPlayStatistics.Where(kv => titleIds.Contains(kv.Value.TitleId));
- }
-
- if (byUserId)
- {
- filteredApplicationPlayStatistics = filteredApplicationPlayStatistics.Where(kv => kv.Key == userId);
- }
-
- for (int i = 0; i < filteredApplicationPlayStatistics.Count(); i++)
- {
- MemoryHelper.Write(context.Memory, outputPosition + (ulong)(i * Unsafe.SizeOf<ApplicationPlayStatistics>()), filteredApplicationPlayStatistics.ElementAt(i).Value);
- }
-
- context.ResponseData.Write(filteredApplicationPlayStatistics.Count());
-
- return ResultCode.Success;
- }
- }
-} \ No newline at end of file
diff --git a/Ryujinx.HLE/HOS/Services/Sdb/Pdm/QueryService/Types/ApplicationPlayStatistics.cs b/Ryujinx.HLE/HOS/Services/Sdb/Pdm/QueryService/Types/ApplicationPlayStatistics.cs
deleted file mode 100644
index c28d757e..00000000
--- a/Ryujinx.HLE/HOS/Services/Sdb/Pdm/QueryService/Types/ApplicationPlayStatistics.cs
+++ /dev/null
@@ -1,12 +0,0 @@
-using System.Runtime.InteropServices;
-
-namespace Ryujinx.HLE.HOS.Services.Sdb.Pdm.QueryService.Types
-{
- [StructLayout(LayoutKind.Sequential, Size = 0x18)]
- struct ApplicationPlayStatistics
- {
- public ulong TitleId;
- public long TotalPlayTime; // In nanoseconds.
- public long TotalLaunchCount;
- }
-} \ No newline at end of file
diff --git a/Ryujinx.HLE/HOS/Services/Sdb/Pdm/QueryService/Types/PlayLogQueryCapability.cs b/Ryujinx.HLE/HOS/Services/Sdb/Pdm/QueryService/Types/PlayLogQueryCapability.cs
deleted file mode 100644
index 9e4b85de..00000000
--- a/Ryujinx.HLE/HOS/Services/Sdb/Pdm/QueryService/Types/PlayLogQueryCapability.cs
+++ /dev/null
@@ -1,9 +0,0 @@
-namespace Ryujinx.HLE.HOS.Services.Sdb.Pdm.QueryService.Types
-{
- enum PlayLogQueryCapability
- {
- None,
- WhiteList,
- All
- }
-} \ No newline at end of file