diff --git a/EDSM/LogsApi.cs b/EDSM/LogsApi.cs new file mode 100644 index 0000000..07cc8ab --- /dev/null +++ b/EDSM/LogsApi.cs @@ -0,0 +1,154 @@ +// +// Copyright 2021–2022 alterNERDtive. +// +// This file is part of EDNA. +// +// EDNA is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// EDNA is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with EDNA. If not, see <https://www.gnu.org/licenses/>. +// + +using System; +using System.Threading.Tasks; +using RestSharp; + +namespace Edsm +{ + /// + /// A Commander in the galaxy of Elite Dangerous, as returned from EDSM’s + /// “Logs” API. + /// + [System.Diagnostics.CodeAnalysis.SuppressMessage("StyleCop.CSharp.DocumentationRules", "SA1649:File name should match first type name", Justification = "Either this or wrong class/struct order 🤷")] + public struct ApiCmdr + { + /// + /// Gets or sets EDSM’s internal message code for the request; see + /// https://www.edsm.net/en/api-logs-v1 for details. + /// + public int MsgNum { get; set; } + + /// + /// Gets or sets the API’s status message; see + /// https://www.edsm.net/en/api-logs-v1 for details. + /// + public string Message { get; set; } + + /// + /// Gets or sets the commander’s current system. Will be “null” if the + /// commander’s flight log is hidden. + /// + public string System { get; set; } + + /// + /// Gets or sets whether the commander has first discovered their + /// current system. + /// + public bool? FirstDiscover { get; set; } + + /// + /// Gets or sets the date and time of the commander’s jump into the + /// current system. Will be null if the commander’s flight log + /// timestamps are hidden. + /// + public DateTime? Date { get; set; } + + /// + /// Gets or sets EDSM’s internal ID of the commander’s current system. + /// + public ulong? SystemId { get; set; } + + /// + /// Gets or sets the ID64 of the commander’s current system. + /// + public ulong? SystemId64 { get; set; } + + /// + /// Gets or sets the coordinates of the commander’s current system. Will + /// be null if the commander’s flight log is hidden. + /// + public Coordinates? Coordinates { get; set; } + + /// + /// Gets or sets whether the commander is currently docked to a station. + /// + public bool? IsDocked { get; set; } + + /// + /// Gets or sets the station the commander is currently docked at. + /// + public string Station { get; set; } + + /// + /// Gets or sets EDSM’s internal ID of the station the commander is + /// currently docked at. + /// + public int? StationId { get; set; } + + /// + /// Gets or sets the date time of docking at the commander’s currently + /// docked station. + /// + public DateTime? DateDocked { get; set; } + + /// + /// Gets or sets the ship ID of the commander’s current ship. That is + /// the slot ID of the ship, not the “ID” chosen in livery. + /// + public int? ShipId { get; set; } + + /// + /// Gets or sets the ship type of the commander’s current ship. + /// + public string ShipType { get; set; } + + /// + /// Gets or sets the fuel status of the commander’s current ship. Seems + /// to always be “null”. + /// + public object ShipFuel { get; set; } + + /// + /// Gets or sets the date and time of the commander’s last recorded + /// activity. Will be “null” if the commander’s flight log is hidden. + /// + public DateTime? DateLastActivity { get; set; } + + /// + /// Gets or sets the commander’s EDSM profile URL. Will be “null” if the + /// commander’s profile page is hidden. + /// + public string Url { get; set; } + } + + public class LogsApi + { + private static readonly Uri ApiUrl = new Uri("https://www.edsm.net/api-logs-v1"); + private static readonly RestClient ApiClient = new RestClient(ApiUrl); + + public static async Task FindCmdr(string name, string? apiKey = null) + { + RestRequest request = new RestRequest("get-position") + .AddQueryParameter("commanderName", name) + .AddQueryParameter("showID", 1) + .AddQueryParameter("showCoordinates", 1); + + if (apiKey != null) + { + request.AddQueryParameter("apiKey", apiKey); + } + + ApiCmdr response = await ApiClient.GetAsync(request); + + return response; + } + } +}