AppService: Update inventory only for known app types (#5590)

There are apps, which do not have a template and hence no inventory. Accessing it via `settings[templatePath]!.Value` causes exceptions in those cases.
This commit is contained in:
d11n
2023-12-22 06:21:01 +01:00
committed by GitHub
parent e84e575017
commit 4867698ac9

View File

@@ -401,11 +401,21 @@ retry:
_ => "Template"
};
var settings = JObject.Parse(row.settings);
var items = JArray.Parse(settings[templatePath]!.Value<string>()!);
if (!settings.TryGetValue(templatePath, out var template))
return;
var items = template.Type switch
{
JTokenType.String => JArray.Parse(template.Value<string>()!),
JTokenType.Array => (JArray)template,
_ => null
};
if (items is null)
return;
bool hasChange = false;
foreach (var change in changes)
{
var item = items.FirstOrDefault(i => i["id"]?.Value<string>() == change.ItemId && i["inventory"] is not null && i["inventory"]!.Type is JTokenType.Integer);
var item = items.FirstOrDefault(i => i["id"]?.Value<string>() == change.ItemId && i["inventory"]?.Type is JTokenType.Integer);
if (item is null)
continue;
var inventory = item["inventory"]!.Value<int>();