Play Report Analyzer v4
You can now access the *entire* play report data in any given value formatter. The input types have been restructured and, notably, not every instance of Value has an ApplicationMetadata on it. It's now on the container type that also contains the matched values and the entire play report.
This commit is contained in:
@@ -85,7 +85,7 @@ namespace Ryujinx.Ava.Utilities.PlayReport
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// Runs the configured <see cref="GameSpec.FormatterSpec"/> for the specified game title ID.
|
||||
/// Runs the configured <see cref="FormatterSpec"/> for the specified game title ID.
|
||||
/// </summary>
|
||||
/// <param name="runningGameId">The game currently running.</param>
|
||||
/// <param name="appMeta">The Application metadata information, including localized game name and play time information.</param>
|
||||
@@ -94,10 +94,10 @@ namespace Ryujinx.Ava.Utilities.PlayReport
|
||||
public FormattedValue Format(
|
||||
string runningGameId,
|
||||
ApplicationMetadata appMeta,
|
||||
MessagePackObject playReport
|
||||
Horizon.Prepo.Types.PlayReport playReport
|
||||
)
|
||||
{
|
||||
if (!playReport.IsDictionary)
|
||||
if (!playReport.ReportData.IsDictionary)
|
||||
return FormattedValue.Unhandled;
|
||||
|
||||
if (!_specs.TryGetFirst(s => runningGameId.EqualsAnyIgnoreCase(s.TitleIds), out GameSpec spec))
|
||||
@@ -105,10 +105,14 @@ namespace Ryujinx.Ava.Utilities.PlayReport
|
||||
|
||||
foreach (FormatterSpec formatSpec in spec.SimpleValueFormatters.OrderBy(x => x.Priority))
|
||||
{
|
||||
if (!playReport.AsDictionary().TryGetValue(formatSpec.ReportKey, out MessagePackObject valuePackObject))
|
||||
if (!playReport.ReportData.AsDictionary().TryGetValue(formatSpec.ReportKey, out MessagePackObject valuePackObject))
|
||||
continue;
|
||||
|
||||
return formatSpec.Formatter(new Value { Application = appMeta, PackedValue = valuePackObject });
|
||||
return formatSpec.Formatter(new SingleValue(valuePackObject)
|
||||
{
|
||||
Application = appMeta,
|
||||
PlayReport = playReport
|
||||
});
|
||||
}
|
||||
|
||||
foreach (MultiFormatterSpec formatSpec in spec.MultiValueFormatters.OrderBy(x => x.Priority))
|
||||
@@ -116,7 +120,7 @@ namespace Ryujinx.Ava.Utilities.PlayReport
|
||||
List<MessagePackObject> packedObjects = [];
|
||||
foreach (var reportKey in formatSpec.ReportKeys)
|
||||
{
|
||||
if (!playReport.AsDictionary().TryGetValue(reportKey, out MessagePackObject valuePackObject))
|
||||
if (!playReport.ReportData.AsDictionary().TryGetValue(reportKey, out MessagePackObject valuePackObject))
|
||||
continue;
|
||||
|
||||
packedObjects.Add(valuePackObject);
|
||||
@@ -125,23 +129,30 @@ namespace Ryujinx.Ava.Utilities.PlayReport
|
||||
if (packedObjects.Count != formatSpec.ReportKeys.Length)
|
||||
return FormattedValue.Unhandled;
|
||||
|
||||
return formatSpec.Formatter(packedObjects
|
||||
.Select(packObject => new Value { Application = appMeta, PackedValue = packObject })
|
||||
.ToArray());
|
||||
return formatSpec.Formatter(new MultiValue(packedObjects)
|
||||
{
|
||||
Application = appMeta,
|
||||
PlayReport = playReport
|
||||
});
|
||||
}
|
||||
|
||||
foreach (SparseMultiFormatterSpec formatSpec in spec.SparseMultiValueFormatters.OrderBy(x => x.Priority))
|
||||
{
|
||||
Dictionary<string, Value> packedObjects = [];
|
||||
Dictionary<string, MessagePackObject> packedObjects = [];
|
||||
foreach (var reportKey in formatSpec.ReportKeys)
|
||||
{
|
||||
if (!playReport.AsDictionary().TryGetValue(reportKey, out MessagePackObject valuePackObject))
|
||||
if (!playReport.ReportData.AsDictionary().TryGetValue(reportKey, out MessagePackObject valuePackObject))
|
||||
continue;
|
||||
|
||||
packedObjects.Add(reportKey, new Value { Application = appMeta, PackedValue = valuePackObject });
|
||||
packedObjects.Add(reportKey, valuePackObject);
|
||||
}
|
||||
|
||||
return formatSpec.Formatter(packedObjects);
|
||||
return formatSpec.Formatter(
|
||||
new SparseMultiValue(packedObjects)
|
||||
{
|
||||
Application = appMeta,
|
||||
PlayReport = playReport
|
||||
});
|
||||
}
|
||||
|
||||
return FormattedValue.Unhandled;
|
||||
|
||||
Reference in New Issue
Block a user