Files
textdecalURP/Packages/com.unity.asset-store-tools/Editor/Api/Responses/PackagesAdditionalDataResponse.cs
Kirill Chikalin 275dc598c7 update libs
2025-02-13 17:48:12 +03:00

59 lines
2.0 KiB
C#

using AssetStoreTools.Api.Models;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using System;
using System.Collections.Generic;
namespace AssetStoreTools.Api.Responses
{
internal class PackagesAdditionalDataResponse : AssetStoreResponse
{
public List<PackageAdditionalData> Packages { get; set; }
public PackagesAdditionalDataResponse() : base() { }
public PackagesAdditionalDataResponse(Exception e) : base(e) { }
public PackagesAdditionalDataResponse(string json)
{
try
{
ValidateAssetStoreResponse(json);
ParseExtraData(json);
Success = true;
}
catch (Exception e)
{
Success = false;
Exception = e;
}
}
private void ParseExtraData(string json)
{
var packageDict = JsonConvert.DeserializeObject<JObject>(json);
if (!packageDict.ContainsKey("packages"))
throw new Exception("Response did not not contain the list of packages");
Packages = new List<PackageAdditionalData>();
var serializer = new JsonSerializer()
{
ContractResolver = PackageAdditionalData.AssetStorePackageResolver.Instance
};
var packageArray = packageDict.GetValue("packages").ToObject<JArray>();
foreach (var packageData in packageArray)
{
var package = packageData.ToObject<PackageAdditionalData>(serializer);
// Some fields are based on the latest version in the json
var latestVersion = packageData["versions"].ToObject<JArray>().Last;
package.VersionId = latestVersion["id"].ToString();
package.Modified = latestVersion["modified"].ToString();
package.Size = latestVersion["size"].ToString();
Packages.Add(package);
}
}
}
}