From 0b8ec19632cb4eb177ceba4725f47932f1685796 Mon Sep 17 00:00:00 2001 From: mmuffins Date: Wed, 23 May 2018 22:03:38 +0200 Subject: [PATCH] Reorganized file structure, added featured endpoint. --- .../appdetails}/Achievements.cs | 2 +- .../appdetails}/Category.cs | 2 +- .../Classes => Classes/appdetails}/Genre.cs | 2 +- .../appdetails}/Highlighted.cs | 2 +- .../appdetails}/LinuxRequirements.cs | 2 +- .../appdetails}/MacRequirements.cs | 2 +- .../Classes => Classes/appdetails}/Movie.cs | 2 +- .../appdetails}/PackageGroup.cs | 2 +- .../appdetails}/PcRequirements.cs | 2 +- .../appdetails}/Platforms.cs | 2 +- .../appdetails}/PriceOverview.cs | 2 +- .../appdetails}/Recommendations.cs | 2 +- .../appdetails}/ReleaseDate.cs | 2 +- .../appdetails}/Screenshot.cs | 2 +- .../appdetails}/SteamApp.cs | 0 .../Classes => Classes/appdetails}/Sub.cs | 2 +- .../appdetails}/SupportInfo.cs | 2 +- .../Classes/featured/FeaturedApp.cs | 65 +++++++++++ .../Classes/featured/SteamFeatured.cs | 110 ++++++++++++++++++ .../{appdetails => Endpoints}/AppDetails.cs | 0 SteamStorefrontAPI/SteamStorefrontAPI.csproj | 38 +++--- SteamStorefrontConsole/Program.cs | 4 +- 22 files changed, 213 insertions(+), 36 deletions(-) rename SteamStorefrontAPI/{appdetails/Classes => Classes/appdetails}/Achievements.cs (91%) rename SteamStorefrontAPI/{appdetails/Classes => Classes/appdetails}/Category.cs (91%) rename SteamStorefrontAPI/{appdetails/Classes => Classes/appdetails}/Genre.cs (91%) rename SteamStorefrontAPI/{appdetails/Classes => Classes/appdetails}/Highlighted.cs (91%) rename SteamStorefrontAPI/{appdetails/Classes => Classes/appdetails}/LinuxRequirements.cs (91%) rename SteamStorefrontAPI/{appdetails/Classes => Classes/appdetails}/MacRequirements.cs (91%) rename SteamStorefrontAPI/{appdetails/Classes => Classes/appdetails}/Movie.cs (94%) rename SteamStorefrontAPI/{appdetails/Classes => Classes/appdetails}/PackageGroup.cs (96%) rename SteamStorefrontAPI/{appdetails/Classes => Classes/appdetails}/PcRequirements.cs (91%) rename SteamStorefrontAPI/{appdetails/Classes => Classes/appdetails}/Platforms.cs (92%) rename SteamStorefrontAPI/{appdetails/Classes => Classes/appdetails}/PriceOverview.cs (97%) rename SteamStorefrontAPI/{appdetails/Classes => Classes/appdetails}/Recommendations.cs (89%) rename SteamStorefrontAPI/{appdetails/Classes => Classes/appdetails}/ReleaseDate.cs (91%) rename SteamStorefrontAPI/{appdetails/Classes => Classes/appdetails}/Screenshot.cs (92%) rename SteamStorefrontAPI/{appdetails/Classes => Classes/appdetails}/SteamApp.cs (100%) rename SteamStorefrontAPI/{appdetails/Classes => Classes/appdetails}/Sub.cs (96%) rename SteamStorefrontAPI/{appdetails/Classes => Classes/appdetails}/SupportInfo.cs (91%) create mode 100644 SteamStorefrontAPI/Classes/featured/FeaturedApp.cs create mode 100644 SteamStorefrontAPI/Classes/featured/SteamFeatured.cs rename SteamStorefrontAPI/{appdetails => Endpoints}/AppDetails.cs (100%) diff --git a/SteamStorefrontAPI/appdetails/Classes/Achievements.cs b/SteamStorefrontAPI/Classes/appdetails/Achievements.cs similarity index 91% rename from SteamStorefrontAPI/appdetails/Classes/Achievements.cs rename to SteamStorefrontAPI/Classes/appdetails/Achievements.cs index ba513c8..33b1ee8 100644 --- a/SteamStorefrontAPI/appdetails/Classes/Achievements.cs +++ b/SteamStorefrontAPI/Classes/appdetails/Achievements.cs @@ -7,7 +7,7 @@ using System.Globalization; using Newtonsoft.Json; using Newtonsoft.Json.Converters; -namespace SteamStorefrontAPI +namespace SteamStorefrontAPI.Classes { public class Achievements { diff --git a/SteamStorefrontAPI/appdetails/Classes/Category.cs b/SteamStorefrontAPI/Classes/appdetails/Category.cs similarity index 91% rename from SteamStorefrontAPI/appdetails/Classes/Category.cs rename to SteamStorefrontAPI/Classes/appdetails/Category.cs index 06a0c76..b9fdd6d 100644 --- a/SteamStorefrontAPI/appdetails/Classes/Category.cs +++ b/SteamStorefrontAPI/Classes/appdetails/Category.cs @@ -7,7 +7,7 @@ using System.Globalization; using Newtonsoft.Json; using Newtonsoft.Json.Converters; -namespace SteamStorefrontAPI +namespace SteamStorefrontAPI.Classes { public class Category { diff --git a/SteamStorefrontAPI/appdetails/Classes/Genre.cs b/SteamStorefrontAPI/Classes/appdetails/Genre.cs similarity index 91% rename from SteamStorefrontAPI/appdetails/Classes/Genre.cs rename to SteamStorefrontAPI/Classes/appdetails/Genre.cs index 6f600f5..269caee 100644 --- a/SteamStorefrontAPI/appdetails/Classes/Genre.cs +++ b/SteamStorefrontAPI/Classes/appdetails/Genre.cs @@ -7,7 +7,7 @@ using System.Globalization; using Newtonsoft.Json; using Newtonsoft.Json.Converters; -namespace SteamStorefrontAPI +namespace SteamStorefrontAPI.Classes { public class Genre { diff --git a/SteamStorefrontAPI/appdetails/Classes/Highlighted.cs b/SteamStorefrontAPI/Classes/appdetails/Highlighted.cs similarity index 91% rename from SteamStorefrontAPI/appdetails/Classes/Highlighted.cs rename to SteamStorefrontAPI/Classes/appdetails/Highlighted.cs index 2a4f271..7c27c95 100644 --- a/SteamStorefrontAPI/appdetails/Classes/Highlighted.cs +++ b/SteamStorefrontAPI/Classes/appdetails/Highlighted.cs @@ -7,7 +7,7 @@ using System.Globalization; using Newtonsoft.Json; using Newtonsoft.Json.Converters; -namespace SteamStorefrontAPI +namespace SteamStorefrontAPI.Classes { public class Highlighted { diff --git a/SteamStorefrontAPI/appdetails/Classes/LinuxRequirements.cs b/SteamStorefrontAPI/Classes/appdetails/LinuxRequirements.cs similarity index 91% rename from SteamStorefrontAPI/appdetails/Classes/LinuxRequirements.cs rename to SteamStorefrontAPI/Classes/appdetails/LinuxRequirements.cs index 2686ebd..8b433e0 100644 --- a/SteamStorefrontAPI/appdetails/Classes/LinuxRequirements.cs +++ b/SteamStorefrontAPI/Classes/appdetails/LinuxRequirements.cs @@ -7,7 +7,7 @@ using System.Globalization; using Newtonsoft.Json; using Newtonsoft.Json.Converters; -namespace SteamStorefrontAPI +namespace SteamStorefrontAPI.Classes { public class LinuxRequirements { diff --git a/SteamStorefrontAPI/appdetails/Classes/MacRequirements.cs b/SteamStorefrontAPI/Classes/appdetails/MacRequirements.cs similarity index 91% rename from SteamStorefrontAPI/appdetails/Classes/MacRequirements.cs rename to SteamStorefrontAPI/Classes/appdetails/MacRequirements.cs index ea3586c..277a06c 100644 --- a/SteamStorefrontAPI/appdetails/Classes/MacRequirements.cs +++ b/SteamStorefrontAPI/Classes/appdetails/MacRequirements.cs @@ -7,7 +7,7 @@ using System.Globalization; using Newtonsoft.Json; using Newtonsoft.Json.Converters; -namespace SteamStorefrontAPI +namespace SteamStorefrontAPI.Classes { public class MacRequirements { diff --git a/SteamStorefrontAPI/appdetails/Classes/Movie.cs b/SteamStorefrontAPI/Classes/appdetails/Movie.cs similarity index 94% rename from SteamStorefrontAPI/appdetails/Classes/Movie.cs rename to SteamStorefrontAPI/Classes/appdetails/Movie.cs index 5a73326..2778206 100644 --- a/SteamStorefrontAPI/appdetails/Classes/Movie.cs +++ b/SteamStorefrontAPI/Classes/appdetails/Movie.cs @@ -7,7 +7,7 @@ using System.Globalization; using Newtonsoft.Json; using Newtonsoft.Json.Converters; -namespace SteamStorefrontAPI +namespace SteamStorefrontAPI.Classes { public class Movie { diff --git a/SteamStorefrontAPI/appdetails/Classes/PackageGroup.cs b/SteamStorefrontAPI/Classes/appdetails/PackageGroup.cs similarity index 96% rename from SteamStorefrontAPI/appdetails/Classes/PackageGroup.cs rename to SteamStorefrontAPI/Classes/appdetails/PackageGroup.cs index 620184b..9c59873 100644 --- a/SteamStorefrontAPI/appdetails/Classes/PackageGroup.cs +++ b/SteamStorefrontAPI/Classes/appdetails/PackageGroup.cs @@ -7,7 +7,7 @@ using System.Globalization; using Newtonsoft.Json; using Newtonsoft.Json.Converters; -namespace SteamStorefrontAPI +namespace SteamStorefrontAPI.Classes { public class PackageGroup diff --git a/SteamStorefrontAPI/appdetails/Classes/PcRequirements.cs b/SteamStorefrontAPI/Classes/appdetails/PcRequirements.cs similarity index 91% rename from SteamStorefrontAPI/appdetails/Classes/PcRequirements.cs rename to SteamStorefrontAPI/Classes/appdetails/PcRequirements.cs index bc72d5f..0d0d257 100644 --- a/SteamStorefrontAPI/appdetails/Classes/PcRequirements.cs +++ b/SteamStorefrontAPI/Classes/appdetails/PcRequirements.cs @@ -7,7 +7,7 @@ using System.Globalization; using Newtonsoft.Json; using Newtonsoft.Json.Converters; -namespace SteamStorefrontAPI +namespace SteamStorefrontAPI.Classes { public class PcRequirements { diff --git a/SteamStorefrontAPI/appdetails/Classes/Platforms.cs b/SteamStorefrontAPI/Classes/appdetails/Platforms.cs similarity index 92% rename from SteamStorefrontAPI/appdetails/Classes/Platforms.cs rename to SteamStorefrontAPI/Classes/appdetails/Platforms.cs index 6689c58..54e957c 100644 --- a/SteamStorefrontAPI/appdetails/Classes/Platforms.cs +++ b/SteamStorefrontAPI/Classes/appdetails/Platforms.cs @@ -7,7 +7,7 @@ using System.Globalization; using Newtonsoft.Json; using Newtonsoft.Json.Converters; -namespace SteamStorefrontAPI +namespace SteamStorefrontAPI.Classes { public class Platforms { diff --git a/SteamStorefrontAPI/appdetails/Classes/PriceOverview.cs b/SteamStorefrontAPI/Classes/appdetails/PriceOverview.cs similarity index 97% rename from SteamStorefrontAPI/appdetails/Classes/PriceOverview.cs rename to SteamStorefrontAPI/Classes/appdetails/PriceOverview.cs index 5a58aa6..ed5677d 100644 --- a/SteamStorefrontAPI/appdetails/Classes/PriceOverview.cs +++ b/SteamStorefrontAPI/Classes/appdetails/PriceOverview.cs @@ -7,7 +7,7 @@ using System.Globalization; using Newtonsoft.Json; using Newtonsoft.Json.Converters; -namespace SteamStorefrontAPI +namespace SteamStorefrontAPI.Classes { public class PriceOverview { diff --git a/SteamStorefrontAPI/appdetails/Classes/Recommendations.cs b/SteamStorefrontAPI/Classes/appdetails/Recommendations.cs similarity index 89% rename from SteamStorefrontAPI/appdetails/Classes/Recommendations.cs rename to SteamStorefrontAPI/Classes/appdetails/Recommendations.cs index 4296728..064db25 100644 --- a/SteamStorefrontAPI/appdetails/Classes/Recommendations.cs +++ b/SteamStorefrontAPI/Classes/appdetails/Recommendations.cs @@ -7,7 +7,7 @@ using System.Globalization; using Newtonsoft.Json; using Newtonsoft.Json.Converters; -namespace SteamStorefrontAPI +namespace SteamStorefrontAPI.Classes { public class Recommendations { diff --git a/SteamStorefrontAPI/appdetails/Classes/ReleaseDate.cs b/SteamStorefrontAPI/Classes/appdetails/ReleaseDate.cs similarity index 91% rename from SteamStorefrontAPI/appdetails/Classes/ReleaseDate.cs rename to SteamStorefrontAPI/Classes/appdetails/ReleaseDate.cs index 7e32d17..7d99643 100644 --- a/SteamStorefrontAPI/appdetails/Classes/ReleaseDate.cs +++ b/SteamStorefrontAPI/Classes/appdetails/ReleaseDate.cs @@ -7,7 +7,7 @@ using System.Globalization; using Newtonsoft.Json; using Newtonsoft.Json.Converters; -namespace SteamStorefrontAPI +namespace SteamStorefrontAPI.Classes { public class ReleaseDate { diff --git a/SteamStorefrontAPI/appdetails/Classes/Screenshot.cs b/SteamStorefrontAPI/Classes/appdetails/Screenshot.cs similarity index 92% rename from SteamStorefrontAPI/appdetails/Classes/Screenshot.cs rename to SteamStorefrontAPI/Classes/appdetails/Screenshot.cs index 7786a93..66e24e0 100644 --- a/SteamStorefrontAPI/appdetails/Classes/Screenshot.cs +++ b/SteamStorefrontAPI/Classes/appdetails/Screenshot.cs @@ -7,7 +7,7 @@ using System.Globalization; using Newtonsoft.Json; using Newtonsoft.Json.Converters; -namespace SteamStorefrontAPI +namespace SteamStorefrontAPI.Classes { public class Screenshot diff --git a/SteamStorefrontAPI/appdetails/Classes/SteamApp.cs b/SteamStorefrontAPI/Classes/appdetails/SteamApp.cs similarity index 100% rename from SteamStorefrontAPI/appdetails/Classes/SteamApp.cs rename to SteamStorefrontAPI/Classes/appdetails/SteamApp.cs diff --git a/SteamStorefrontAPI/appdetails/Classes/Sub.cs b/SteamStorefrontAPI/Classes/appdetails/Sub.cs similarity index 96% rename from SteamStorefrontAPI/appdetails/Classes/Sub.cs rename to SteamStorefrontAPI/Classes/appdetails/Sub.cs index 2d7bc95..80d354d 100644 --- a/SteamStorefrontAPI/appdetails/Classes/Sub.cs +++ b/SteamStorefrontAPI/Classes/appdetails/Sub.cs @@ -7,7 +7,7 @@ using System.Globalization; using Newtonsoft.Json; using Newtonsoft.Json.Converters; -namespace SteamStorefrontAPI +namespace SteamStorefrontAPI.Classes { public class Sub diff --git a/SteamStorefrontAPI/appdetails/Classes/SupportInfo.cs b/SteamStorefrontAPI/Classes/appdetails/SupportInfo.cs similarity index 91% rename from SteamStorefrontAPI/appdetails/Classes/SupportInfo.cs rename to SteamStorefrontAPI/Classes/appdetails/SupportInfo.cs index 20ae03d..b97d8b6 100644 --- a/SteamStorefrontAPI/appdetails/Classes/SupportInfo.cs +++ b/SteamStorefrontAPI/Classes/appdetails/SupportInfo.cs @@ -7,7 +7,7 @@ using System.Globalization; using Newtonsoft.Json; using Newtonsoft.Json.Converters; -namespace SteamStorefrontAPI +namespace SteamStorefrontAPI.Classes { public class SupportInfo { diff --git a/SteamStorefrontAPI/Classes/featured/FeaturedApp.cs b/SteamStorefrontAPI/Classes/featured/FeaturedApp.cs new file mode 100644 index 0000000..f6ef814 --- /dev/null +++ b/SteamStorefrontAPI/Classes/featured/FeaturedApp.cs @@ -0,0 +1,65 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Globalization; +using Newtonsoft.Json; +using Newtonsoft.Json.Converters; + +namespace SteamStorefrontAPI.Classes +{ + public class FeaturedApp + { + [JsonProperty("id")] + public long Id { get; set; } + + [JsonProperty("type")] + public long Type { get; set; } + + [JsonProperty("name")] + public string Name { get; set; } + + [JsonProperty("discounted")] + public bool Discounted { get; set; } + + [JsonProperty("discount_percent")] + public long DiscountPercent { get; set; } + + [JsonProperty("original_price")] + public long? OriginalPrice { get; set; } + + [JsonProperty("final_price")] + public long FinalPrice { get; set; } + + [JsonProperty("currency")] + public Currency Currency { get; set; } + + [JsonProperty("large_capsule_image")] + public string LargeCapsuleImage { get; set; } + + [JsonProperty("small_capsule_image")] + public string SmallCapsuleImage { get; set; } + + [JsonProperty("windows_available")] + public bool WindowsAvailable { get; set; } + + [JsonProperty("mac_available")] + public bool MacAvailable { get; set; } + + [JsonProperty("linux_available")] + public bool LinuxAvailable { get; set; } + + [JsonProperty("streamingvideo_available")] + public bool StreamingvideoAvailable { get; set; } + + [JsonProperty("header_image")] + public string HeaderImage { get; set; } + + [JsonProperty("discount_expiration", NullValueHandling = NullValueHandling.Ignore)] + public long? DiscountExpiration { get; set; } + + [JsonProperty("controller_support", NullValueHandling = NullValueHandling.Ignore)] + public ControllerSupport? ControllerSupport { get; set; } + } +} diff --git a/SteamStorefrontAPI/Classes/featured/SteamFeatured.cs b/SteamStorefrontAPI/Classes/featured/SteamFeatured.cs new file mode 100644 index 0000000..24e112d --- /dev/null +++ b/SteamStorefrontAPI/Classes/featured/SteamFeatured.cs @@ -0,0 +1,110 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Globalization; +using Newtonsoft.Json; +using Newtonsoft.Json.Converters; + +namespace SteamStorefrontAPI.Classes +{ + public class SteamFeatured + { + [JsonProperty("large_capsules")] + public List LargeCapsules { get; set; } + + [JsonProperty("featured_win")] + public List FeaturedWin { get; set; } + + [JsonProperty("featured_mac")] + public List FeaturedMac { get; set; } + + [JsonProperty("featured_linux")] + public List FeaturedLinux { get; set; } + + [JsonProperty("layout")] + public string Layout { get; set; } + + [JsonProperty("status")] + public long Status { get; set; } + + public static SteamFeatured FromJson(string json) => JsonConvert.DeserializeObject(json, Converter.Settings); + } + + + public enum ControllerSupport { Full }; + + public enum Currency { Eur }; + + public static class Serialize + { + public static string ToJson(this SteamFeatured self) => JsonConvert.SerializeObject(self, Converter.Settings); + } + + static class Converter + { + public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings + { + MetadataPropertyHandling = MetadataPropertyHandling.Ignore, + DateParseHandling = DateParseHandling.None, + Converters = { + new ControllerSupportConverter(), + new CurrencyConverter(), + new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal } + }, + }; + } + + internal class ControllerSupportConverter : JsonConverter + { + public override bool CanConvert(Type t) => t == typeof(ControllerSupport) || t == typeof(ControllerSupport?); + + public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer) + { + if (reader.TokenType == JsonToken.Null) return null; + var value = serializer.Deserialize(reader); + if (value == "full") + { + return ControllerSupport.Full; + } + throw new Exception("Cannot unmarshal type ControllerSupport"); + } + + public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer) + { + var value = (ControllerSupport)untypedValue; + if (value == ControllerSupport.Full) + { + serializer.Serialize(writer, "full"); return; + } + throw new Exception("Cannot marshal type ControllerSupport"); + } + } + + internal class CurrencyConverter : JsonConverter + { + public override bool CanConvert(Type t) => t == typeof(Currency) || t == typeof(Currency?); + + public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer) + { + if (reader.TokenType == JsonToken.Null) return null; + var value = serializer.Deserialize(reader); + if (value == "EUR") + { + return Currency.Eur; + } + throw new Exception("Cannot unmarshal type Currency"); + } + + public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer) + { + var value = (Currency)untypedValue; + if (value == Currency.Eur) + { + serializer.Serialize(writer, "EUR"); return; + } + throw new Exception("Cannot marshal type Currency"); + } + } +} diff --git a/SteamStorefrontAPI/appdetails/AppDetails.cs b/SteamStorefrontAPI/Endpoints/AppDetails.cs similarity index 100% rename from SteamStorefrontAPI/appdetails/AppDetails.cs rename to SteamStorefrontAPI/Endpoints/AppDetails.cs diff --git a/SteamStorefrontAPI/SteamStorefrontAPI.csproj b/SteamStorefrontAPI/SteamStorefrontAPI.csproj index ce6b700..a758f77 100644 --- a/SteamStorefrontAPI/SteamStorefrontAPI.csproj +++ b/SteamStorefrontAPI/SteamStorefrontAPI.csproj @@ -43,25 +43,27 @@ - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + - + diff --git a/SteamStorefrontConsole/Program.cs b/SteamStorefrontConsole/Program.cs index fd0f2e8..7ba6c60 100644 --- a/SteamStorefrontConsole/Program.cs +++ b/SteamStorefrontConsole/Program.cs @@ -19,9 +19,9 @@ namespace SteamStorefrontConsole static async Task GetGame() { - //var steamApp = Task.Run(async () => await AppDetails.GetAsync(637670)).Result; + var steamApp = Task.Run(async () => await AppDetails.GetAsync(637670)).Result; //var steamApp = Task.Run(async () => await AppDetails.GetAsync(443790)).Result; - var steamApp = await AppDetails.GetAsync(213670); + //var steamApp = await AppDetails.GetAsync(460810, "JP"); Console.WriteLine(steamApp); }