Actually expose tags in Asset

@Vital7 you forgot about this too 😀
This commit is contained in:
JustArchi
2020-03-05 23:57:51 +01:00
parent 573d73c7a9
commit 2ac5a9c5f9
3 changed files with 41 additions and 29 deletions

View File

@@ -367,6 +367,6 @@ namespace ArchiSteamFarm.Tests {
}
[NotNull]
private static Steam.Asset CreateItem(ulong classID, uint amount = 1, ulong instanceID = 0, ulong assetID = 0, bool marketable = true, bool tradable = true, uint realAppID = Steam.Asset.SteamAppID, Steam.Asset.EType type = Steam.Asset.EType.TradingCard, Steam.Asset.ERarity rarity = Steam.Asset.ERarity.Common) => new Steam.Asset(Steam.Asset.SteamAppID, Steam.Asset.SteamCommunityContextID, classID, amount, instanceID, assetID, marketable, tradable, realAppID, type, rarity);
private static Steam.Asset CreateItem(ulong classID, uint amount = 1, uint realAppID = Steam.Asset.SteamAppID, Steam.Asset.EType type = Steam.Asset.EType.TradingCard, Steam.Asset.ERarity rarity = Steam.Asset.ERarity.Common) => new Steam.Asset(Steam.Asset.SteamAppID, Steam.Asset.SteamCommunityContextID, classID, amount, realAppID: realAppID, type: type, rarity: rarity);
}
}

View File

@@ -226,6 +226,7 @@ namespace ArchiSteamFarm {
asset.Marketable = description.Marketable;
asset.Tradable = description.Tradable;
asset.Tags = description.Tags;
asset.RealAppID = description.RealAppID;
asset.Type = description.Type;
asset.Rarity = description.Rarity;
@@ -1502,7 +1503,7 @@ namespace ArchiSteamFarm {
List<KeyValue> tags = description["tags"].Children;
if (tags.Count > 0) {
HashSet<Steam.InventoryResponse.Description.Tag> parsedTags = new HashSet<Steam.InventoryResponse.Description.Tag>();
HashSet<Steam.Asset.Tag> parsedTags = new HashSet<Steam.Asset.Tag>();
foreach (KeyValue tag in tags) {
string identifier = tag["category"].AsString();
@@ -1521,7 +1522,7 @@ namespace ArchiSteamFarm {
return null;
}
parsedTags.Add(new Steam.InventoryResponse.Description.Tag(identifier, value));
parsedTags.Add(new Steam.Asset.Tag(identifier, value));
}
parsedDescription.Tags = parsedTags.ToImmutableHashSet();
@@ -2489,6 +2490,7 @@ namespace ArchiSteamFarm {
bool marketable = true;
bool tradable = true;
ImmutableHashSet<Steam.Asset.Tag> tags = null;
uint realAppID = 0;
Steam.Asset.EType type = Steam.Asset.EType.Unknown;
Steam.Asset.ERarity rarity = Steam.Asset.ERarity.Unknown;
@@ -2496,12 +2498,13 @@ namespace ArchiSteamFarm {
if (descriptions.TryGetValue(key, out Steam.InventoryResponse.Description description)) {
marketable = description.Marketable;
tradable = description.Tradable;
tags = description.Tags;
realAppID = description.RealAppID;
type = description.Type;
rarity = description.Rarity;
}
Steam.Asset steamAsset = new Steam.Asset(appID, contextID, classID, amount, instanceID, assetID, marketable, tradable, realAppID, type, rarity);
Steam.Asset steamAsset = new Steam.Asset(appID, contextID, classID, amount, instanceID, assetID, marketable, tradable, tags, realAppID, type, rarity);
output.Add(steamAsset);
}

View File

@@ -71,6 +71,9 @@ namespace ArchiSteamFarm.Json {
[PublicAPI]
public uint RealAppID { get; internal set; }
[PublicAPI]
public ImmutableHashSet<Tag> Tags { get; internal set; } = ImmutableHashSet<Tag>.Empty;
[PublicAPI]
public bool Tradable { get; internal set; }
@@ -198,7 +201,7 @@ namespace ArchiSteamFarm.Json {
#pragma warning restore IDE0051
// Constructed from trades being received or plugins
public Asset(uint appID, ulong contextID, ulong classID, uint amount, ulong instanceID = 0, ulong assetID = 0, bool marketable = true, bool tradable = true, uint realAppID = 0, EType type = EType.Unknown, ERarity rarity = ERarity.Unknown) {
public Asset(uint appID, ulong contextID, ulong classID, uint amount, ulong instanceID = 0, ulong assetID = 0, bool marketable = true, bool tradable = true, ImmutableHashSet<Tag> tags = null, uint realAppID = 0, EType type = EType.Unknown, ERarity rarity = ERarity.Unknown) {
if ((appID == 0) || (contextID == 0) || (classID == 0) || (amount == 0)) {
throw new ArgumentNullException(nameof(appID) + " || " + nameof(contextID) + " || " + nameof(classID) + " || " + nameof(amount));
}
@@ -214,6 +217,10 @@ namespace ArchiSteamFarm.Json {
RealAppID = realAppID;
Type = type;
Rarity = rarity;
if ((tags != null) && (tags.Count > 0)) {
Tags = tags;
}
}
[JsonConstructor]
@@ -222,6 +229,28 @@ namespace ArchiSteamFarm.Json {
[JetBrains.Annotations.NotNull]
internal Asset CreateShallowCopy() => (Asset) MemberwiseClone();
public sealed class Tag {
[JsonProperty(PropertyName = "category", Required = Required.Always)]
[PublicAPI]
public readonly string Identifier;
[JsonProperty(PropertyName = "internal_name", Required = Required.Always)]
[PublicAPI]
public readonly string Value;
internal Tag([JetBrains.Annotations.NotNull] string identifier, [JetBrains.Annotations.NotNull] string value) {
if (string.IsNullOrEmpty(identifier) || string.IsNullOrEmpty(value)) {
throw new ArgumentNullException(nameof(identifier) + " || " + nameof(value));
}
Identifier = identifier;
Value = value;
}
[JsonConstructor]
private Tag() { }
}
public enum ERarity : byte {
Unknown,
Common,
@@ -489,7 +518,7 @@ namespace ArchiSteamFarm.Json {
internal Asset.ERarity Rarity {
get {
foreach (Tag tag in Tags) {
foreach (Asset.Tag tag in Tags) {
switch (tag.Identifier) {
case "droprate":
switch (tag.Value) {
@@ -515,7 +544,7 @@ namespace ArchiSteamFarm.Json {
internal uint RealAppID {
get {
foreach (Tag tag in Tags) {
foreach (Asset.Tag tag in Tags) {
switch (tag.Identifier) {
case "Game":
if ((tag.Value.Length <= 4) || !tag.Value.StartsWith("app_", StringComparison.Ordinal)) {
@@ -544,7 +573,7 @@ namespace ArchiSteamFarm.Json {
get {
Asset.EType type = Asset.EType.Unknown;
foreach (Tag tag in Tags) {
foreach (Asset.Tag tag in Tags) {
switch (tag.Identifier) {
case "cardborder":
switch (tag.Value) {
@@ -610,7 +639,7 @@ namespace ArchiSteamFarm.Json {
internal bool Marketable { get; set; }
[JsonProperty(PropertyName = "tags", Required = Required.DisallowNull)]
internal ImmutableHashSet<Tag> Tags { get; set; } = ImmutableHashSet<Tag>.Empty;
internal ImmutableHashSet<Asset.Tag> Tags { get; set; } = ImmutableHashSet<Asset.Tag>.Empty;
internal bool Tradable { get; set; }
@@ -670,26 +699,6 @@ namespace ArchiSteamFarm.Json {
[JsonConstructor]
internal Description() { }
internal sealed class Tag {
[JsonProperty(PropertyName = "category", Required = Required.Always)]
internal readonly string Identifier;
[JsonProperty(PropertyName = "internal_name", Required = Required.Always)]
internal readonly string Value;
internal Tag([JetBrains.Annotations.NotNull] string identifier, [JetBrains.Annotations.NotNull] string value) {
if (string.IsNullOrEmpty(identifier) || string.IsNullOrEmpty(value)) {
throw new ArgumentNullException(nameof(identifier) + " || " + nameof(value));
}
Identifier = identifier;
Value = value;
}
[JsonConstructor]
private Tag() { }
}
}
}