From 10d3f5097d517a4f112476aff6d5d50f647a8e81 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Petr=20Pivo=C5=88ka?= Date: Sun, 31 Dec 2023 02:19:55 +0100 Subject: [PATCH] Add GetMapInfos for NadeoServices --- .../JsonContexts/NadeoAPIJsonContext.cs | 3 +- Src/ManiaAPI.NadeoAPI/MapInfo.cs | 33 ++++++++----------- Src/ManiaAPI.NadeoAPI/MapInfoCollection.cs | 3 -- Src/ManiaAPI.NadeoAPI/MapInfoLive.cs | 28 ++++++++++++++++ .../MapInfoLiveCollection.cs | 3 ++ Src/ManiaAPI.NadeoAPI/NadeoLiveServices.cs | 17 +++++----- Src/ManiaAPI.NadeoAPI/NadeoServices.cs | 26 +++++++++++++++ 7 files changed, 81 insertions(+), 32 deletions(-) delete mode 100644 Src/ManiaAPI.NadeoAPI/MapInfoCollection.cs create mode 100644 Src/ManiaAPI.NadeoAPI/MapInfoLive.cs create mode 100644 Src/ManiaAPI.NadeoAPI/MapInfoLiveCollection.cs diff --git a/Src/ManiaAPI.NadeoAPI/JsonContexts/NadeoAPIJsonContext.cs b/Src/ManiaAPI.NadeoAPI/JsonContexts/NadeoAPIJsonContext.cs index fc956bf..ad3a552 100644 --- a/Src/ManiaAPI.NadeoAPI/JsonContexts/NadeoAPIJsonContext.cs +++ b/Src/ManiaAPI.NadeoAPI/JsonContexts/NadeoAPIJsonContext.cs @@ -7,7 +7,7 @@ namespace ManiaAPI.NadeoAPI.JsonContexts; [JsonSerializable(typeof(AuthorizationResponse))] [JsonSerializable(typeof(ErrorResponse))] [JsonSerializable(typeof(JwtPayloadNadeoAPI))] -[JsonSerializable(typeof(MapInfoCollection))] +[JsonSerializable(typeof(MapInfoLiveCollection))] [JsonSerializable(typeof(MapRecord[]))] [JsonSerializable(typeof(MedalRecordCollection))] [JsonSerializable(typeof(ManiapubCollection[]))] @@ -21,5 +21,6 @@ namespace ManiaAPI.NadeoAPI.JsonContexts; [JsonSerializable(typeof(Dictionary))] [JsonSerializable(typeof(Zone[]))] [JsonSerializable(typeof(PlayerClubTag[]))] +[JsonSerializable(typeof(MapInfo[]))] [JsonSourceGenerationOptions(PropertyNamingPolicy = JsonKnownNamingPolicy.CamelCase)] sealed partial class NadeoAPIJsonContext : JsonSerializerContext { } diff --git a/Src/ManiaAPI.NadeoAPI/MapInfo.cs b/Src/ManiaAPI.NadeoAPI/MapInfo.cs index c8db2c3..71d39df 100644 --- a/Src/ManiaAPI.NadeoAPI/MapInfo.cs +++ b/Src/ManiaAPI.NadeoAPI/MapInfo.cs @@ -4,25 +4,20 @@ namespace ManiaAPI.NadeoAPI; -public sealed record MapInfo(string Uid, +public sealed record MapInfo(Guid Author, + [property: JsonConverter(typeof(TimeInt32Converter))] TimeInt32 AuthorScore, + [property: JsonConverter(typeof(TimeInt32Converter))] TimeInt32 BronzeScore, + string CollectionName, + string FileName, + [property: JsonConverter(typeof(TimeInt32Converter))] TimeInt32 GoldScore, + bool IsPlayable, Guid MapId, - string Name, - Guid Author, - Guid Submitter, - [property: JsonConverter(typeof(TimeInt32Converter))] TimeInt32 AuthorTime, - [property: JsonConverter(typeof(TimeInt32Converter))] TimeInt32 GoldTime, - [property: JsonConverter(typeof(TimeInt32Converter))] TimeInt32 SilverTime, - [property: JsonConverter(typeof(TimeInt32Converter))] TimeInt32 BronzeTime, - int NbLaps, - bool Valid, - string DownloadUrl, - string ThumbnailUrl, - [property: JsonConverter(typeof(DateTimeOffsetUnixConverter))] DateTimeOffset UploadTimestamp, - [property: JsonConverter(typeof(DateTimeOffsetUnixConverter))] DateTimeOffset UpdateTimestamp, - int? FileSize, - bool Public, - bool Favorite, - bool Playable, string MapStyle, string MapType, - string CollectionName); \ No newline at end of file + string MapUid, + string Name, + [property: JsonConverter(typeof(TimeInt32Converter))] TimeInt32 SilverScore, + Guid Submitter, + [property: JsonConverter(typeof(DateTimeOffsetUnixConverter))] DateTimeOffset Timestamp, + string FileUrl, + string ThumbnailUrl); \ No newline at end of file diff --git a/Src/ManiaAPI.NadeoAPI/MapInfoCollection.cs b/Src/ManiaAPI.NadeoAPI/MapInfoCollection.cs deleted file mode 100644 index 9a1f200..0000000 --- a/Src/ManiaAPI.NadeoAPI/MapInfoCollection.cs +++ /dev/null @@ -1,3 +0,0 @@ -namespace ManiaAPI.NadeoAPI; - -public sealed record MapInfoCollection(MapInfo[] MapList); \ No newline at end of file diff --git a/Src/ManiaAPI.NadeoAPI/MapInfoLive.cs b/Src/ManiaAPI.NadeoAPI/MapInfoLive.cs new file mode 100644 index 0000000..a8fc4fc --- /dev/null +++ b/Src/ManiaAPI.NadeoAPI/MapInfoLive.cs @@ -0,0 +1,28 @@ +using ManiaAPI.NadeoAPI.Converters; +using System.Text.Json.Serialization; +using TmEssentials; + +namespace ManiaAPI.NadeoAPI; + +public sealed record MapInfoLive(string Uid, + Guid MapId, + string Name, + Guid Author, + Guid Submitter, + [property: JsonConverter(typeof(TimeInt32Converter))] TimeInt32 AuthorTime, + [property: JsonConverter(typeof(TimeInt32Converter))] TimeInt32 GoldTime, + [property: JsonConverter(typeof(TimeInt32Converter))] TimeInt32 SilverTime, + [property: JsonConverter(typeof(TimeInt32Converter))] TimeInt32 BronzeTime, + int NbLaps, + bool Valid, + string DownloadUrl, + string ThumbnailUrl, + [property: JsonConverter(typeof(DateTimeOffsetUnixConverter))] DateTimeOffset UploadTimestamp, + [property: JsonConverter(typeof(DateTimeOffsetUnixConverter))] DateTimeOffset UpdateTimestamp, + int? FileSize, + bool Public, + bool Favorite, + bool Playable, + string MapStyle, + string MapType, + string CollectionName); \ No newline at end of file diff --git a/Src/ManiaAPI.NadeoAPI/MapInfoLiveCollection.cs b/Src/ManiaAPI.NadeoAPI/MapInfoLiveCollection.cs new file mode 100644 index 0000000..392f548 --- /dev/null +++ b/Src/ManiaAPI.NadeoAPI/MapInfoLiveCollection.cs @@ -0,0 +1,3 @@ +namespace ManiaAPI.NadeoAPI; + +public sealed record MapInfoLiveCollection(MapInfoLive[] MapList); \ No newline at end of file diff --git a/Src/ManiaAPI.NadeoAPI/NadeoLiveServices.cs b/Src/ManiaAPI.NadeoAPI/NadeoLiveServices.cs index 5cf046e..2e9c2c5 100644 --- a/Src/ManiaAPI.NadeoAPI/NadeoLiveServices.cs +++ b/Src/ManiaAPI.NadeoAPI/NadeoLiveServices.cs @@ -1,14 +1,13 @@ using ManiaAPI.NadeoAPI.JsonContexts; -using System.Text.RegularExpressions; namespace ManiaAPI.NadeoAPI; public interface INadeoLiveServices : INadeoAPI { Task GetActiveManiapubsAsync(CancellationToken cancellationToken = default); - Task GetMapInfoAsync(string mapUid, CancellationToken cancellationToken = default); - Task GetMapInfosAsync(IEnumerable mapUids, CancellationToken cancellationToken = default); - Task GetMapInfosAsync(params string[] mapUids); + Task GetMapInfoAsync(string mapUid, CancellationToken cancellationToken = default); + Task GetMapInfosAsync(IEnumerable mapUids, CancellationToken cancellationToken = default); + Task GetMapInfosAsync(params string[] mapUids); Task GetMapMedalRecordsAsync(string mapUid, string groupId, CancellationToken cancellationToken = default); Task GetTopLeaderboardAsync(string mapUid, int length = 10, int offset = 0, bool onlyWorld = true, CancellationToken cancellationToken = default); Task GetTopLeaderboardAsync(string mapUid, string groupId, int length = 10, int offset = 0, bool onlyWorld = true, CancellationToken cancellationToken = default); @@ -31,18 +30,18 @@ public NadeoLiveServices(bool automaticallyAuthorize = true) : this(new HttpClie { } - public virtual async Task GetMapInfoAsync(string mapUid, CancellationToken cancellationToken = default) + public virtual async Task GetMapInfoAsync(string mapUid, CancellationToken cancellationToken = default) { - return await GetJsonAsync($"token/map/{mapUid}", NadeoAPIJsonContext.Default.MapInfo, cancellationToken); + return await GetJsonAsync($"token/map/{mapUid}", NadeoAPIJsonContext.Default.MapInfoLive, cancellationToken); } - public virtual async Task GetMapInfosAsync(IEnumerable mapUids, CancellationToken cancellationToken = default) + public virtual async Task GetMapInfosAsync(IEnumerable mapUids, CancellationToken cancellationToken = default) { return (await GetJsonAsync($"token/map/get-multiple?mapUidList={string.Join(',', mapUids)}", - NadeoAPIJsonContext.Default.MapInfoCollection, cancellationToken)).MapList; + NadeoAPIJsonContext.Default.MapInfoLiveCollection, cancellationToken)).MapList; } - public async Task GetMapInfosAsync(params string[] mapUids) + public async Task GetMapInfosAsync(params string[] mapUids) { return await GetMapInfosAsync(mapUids, cancellationToken: default); } diff --git a/Src/ManiaAPI.NadeoAPI/NadeoServices.cs b/Src/ManiaAPI.NadeoAPI/NadeoServices.cs index 9ed6427..ec228e9 100644 --- a/Src/ManiaAPI.NadeoAPI/NadeoServices.cs +++ b/Src/ManiaAPI.NadeoAPI/NadeoServices.cs @@ -14,6 +14,10 @@ public interface INadeoServices : INadeoAPI Task GetZonesAsync(CancellationToken cancellationToken = default); Task GetPlayerClubTagsAsync(IEnumerable accountIds, CancellationToken cancellationToken = default); Task GetPlayerClubTagsAsync(params Guid[] accountIds); + Task GetMapInfoAsync(Guid mapId, CancellationToken cancellationToken = default); + Task GetMapInfosAsync(IEnumerable mapIds, CancellationToken cancellationToken = default); + Task GetMapInfoAsync(string mapUid, CancellationToken cancellationToken = default); + Task GetMapInfosAsync(IEnumerable mapUids, CancellationToken cancellationToken = default); } public class NadeoServices : NadeoAPI, INadeoServices @@ -81,4 +85,26 @@ public async Task GetPlayerClubTagsAsync(params Guid[] accountI { return await GetPlayerClubTagsAsync(accountIds, CancellationToken.None); } + + public virtual async Task GetMapInfoAsync(Guid mapId, CancellationToken cancellationToken = default) + { + return await GetJsonAsync($"maps/?mapIdList={mapId}", NadeoAPIJsonContext.Default.MapInfo, cancellationToken); + } + + public virtual async Task GetMapInfosAsync(IEnumerable mapIds, CancellationToken cancellationToken = default) + { + return await GetJsonAsync($"maps/?mapIdList={string.Join(',', mapIds)}", + NadeoAPIJsonContext.Default.MapInfoArray, cancellationToken); + } + + public virtual async Task GetMapInfoAsync(string mapUid, CancellationToken cancellationToken = default) + { + return await GetJsonAsync($"maps/?mapUidList={mapUid}", NadeoAPIJsonContext.Default.MapInfo, cancellationToken); + } + + public virtual async Task GetMapInfosAsync(IEnumerable mapUids, CancellationToken cancellationToken = default) + { + return await GetJsonAsync($"maps/?mapUidList={string.Join(',', mapUids)}", + NadeoAPIJsonContext.Default.MapInfoArray, cancellationToken); + } }