Skip to content

Commit 855ad30

Browse files
Added new Contract endpoints.
Added Pinging functionality to test accessibility of the API Added Page count to EsiResposne if the header exists
1 parent f8091b9 commit 855ad30

4 files changed

Lines changed: 108 additions & 28 deletions

File tree

ESI.NET/EsiRequest.cs

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
1-
using ESI.NET.Models.SSO;
2-
using Newtonsoft.Json;
1+
using Newtonsoft.Json;
32
using System;
43
using System.Net.Http;
54
using System.Net.Http.Headers;
5+
using System.Net.NetworkInformation;
66
using System.Text;
77
using System.Threading.Tasks;
88

@@ -12,8 +12,10 @@ public static class EsiRequest
1212
{
1313
public async static Task<EsiResponse<T>> Execute<T>(HttpClient client, EsiConfig config, RequestSecurity security, RequestMethod method, string endpoint, string noContent = null, string[] parameters = null, object body = null, string token = null)
1414
{
15-
string version = "latest";
16-
var url = $"{config.EsiUrl}{version}{endpoint}?datasource={ config.DataSource.ToEsiValue() }";
15+
if (await Ping(client, config) != "ok")
16+
throw new PingException("ESI could not be reached. Request has been terminated.");
17+
18+
var url = $"{config.EsiUrl}latest{endpoint}?datasource={config.DataSource.ToEsiValue()}";
1719

1820
//Attach token to request header if this endpoint requires an authorized character
1921
if (security == RequestSecurity.Authenticated)
@@ -56,7 +58,7 @@ public async static Task<EsiResponse<T>> Execute<T>(HttpClient client, EsiConfig
5658
}
5759

5860
//Output final object
59-
var obj = new EsiResponse<T>(response, method, endpoint, noContent);
61+
var obj = new EsiResponse<T>(response, noContent);
6062
return obj;
6163
}
6264

@@ -76,5 +78,8 @@ public enum RequestMethod
7678
PUT,
7779
TRACE
7880
}
81+
82+
private static async Task<string> Ping(HttpClient client, EsiConfig config)
83+
=> new EsiResponse<string>(await client.GetAsync($"{config.EsiUrl}ping").ConfigureAwait(false), null).Message;
7984
}
8085
}

ESI.NET/EsiResponse.cs

Lines changed: 18 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
using Newtonsoft.Json;
2+
using System.Linq;
23
using System.Net;
34
using System.Net.Http;
45
using static ESI.NET.EsiRequest;
@@ -7,26 +8,35 @@ namespace ESI.NET
78
{
89
public class EsiResponse<T>
910
{
10-
public EsiResponse(HttpResponseMessage response, RequestMethod method, string endpoint, string noContent)
11+
public EsiResponse(HttpResponseMessage response, string noContent)
1112
{
1213
StatusCode = response.StatusCode;
1314

1415
if (response.StatusCode != HttpStatusCode.NoContent)
1516
{
16-
var stringResult = response.Content.ReadAsStringAsync().Result;
17+
var result = response.Content.ReadAsStringAsync().Result;
1718

1819
if (response.StatusCode == HttpStatusCode.OK ||
19-
response.StatusCode == HttpStatusCode.Created)
20-
Data = JsonConvert.DeserializeObject<T>(stringResult);
21-
else if (response.StatusCode == HttpStatusCode.NoContent)
22-
Message = noContent;
20+
response.StatusCode == HttpStatusCode.Created) {
21+
22+
if ((result.StartsWith("{") && result.EndsWith("}")) || result.StartsWith("[") && result.EndsWith("]"))
23+
Data = JsonConvert.DeserializeObject<T>(result);
24+
else
25+
Message = result;
26+
}
2327
else
24-
Message = JsonConvert.DeserializeAnonymousType(stringResult, new { error = string.Empty }).error;
28+
Message = JsonConvert.DeserializeAnonymousType(result, new { error = string.Empty }).error;
2529
}
30+
else if (response.StatusCode == HttpStatusCode.NoContent)
31+
Message = noContent;
32+
33+
if (response.Headers.Contains("X-Pages"))
34+
Pages = int.Parse(response.Headers.GetValues("X-Pages").First());
2635
}
2736

2837
public HttpStatusCode StatusCode { get; set; }
29-
public string Message { get; set; }
38+
public string Message { get; set; } = null;
3039
public T Data { get; set; }
40+
public int? Pages { get; set; } = null;
3141
}
3242
}

ESI.NET/Logic/ContractsLogic.cs

Lines changed: 65 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -31,46 +31,96 @@ public ContractsLogic(HttpClient client, EsiConfig config, AuthorizedCharacterDa
3131
///
3232
/// </summary>
3333
/// <returns></returns>
34-
public async Task<EsiResponse<List<Contract>>> CharacterContracts()
35-
=> await Execute<List<Contract>>(_client, _config, RequestSecurity.Authenticated, RequestMethod.GET, $"/characters/{character_id}/contracts/", token: _data.Token);
34+
public async Task<EsiResponse<List<Contract>>> Contracts(int region_id, int page = 1)
35+
=> await Execute<List<Contract>>(_client, _config, RequestSecurity.Public, RequestMethod.GET, $"/contracts/public/{region_id}/", parameters: new string[]
36+
{
37+
$"page={page}"
38+
});
3639

3740
/// <summary>
3841
///
3942
/// </summary>
4043
/// <param name="contract_id"></param>
4144
/// <returns></returns>
42-
public async Task<EsiResponse<List<ContractItem>>> CharacterContractItems(int contract_id)
43-
=> await Execute<List<ContractItem>>(_client, _config, RequestSecurity.Authenticated, RequestMethod.GET, $"/characters/{character_id}/contracts/{contract_id}/items/", token: _data.Token);
45+
public async Task<EsiResponse<List<ContractItem>>> ContractItems(int contract_id, int page = 1)
46+
=> await Execute<List<ContractItem>>(_client, _config, RequestSecurity.Public, RequestMethod.GET, $"/contracts/public/bids/{contract_id}/", parameters: new string[]
47+
{
48+
$"page={page}"
49+
});
4450

4551
/// <summary>
4652
///
4753
/// </summary>
4854
/// <param name="contract_id"></param>
4955
/// <returns></returns>
50-
public async Task<EsiResponse<List<Bid>>> CharacterContractBids(int contract_id)
51-
=> await Execute<List<Bid>>(_client, _config, RequestSecurity.Authenticated, RequestMethod.GET, $"/characters/{character_id}/contracts/{contract_id}/bids/", token: _data.Token);
56+
public async Task<EsiResponse<List<Bid>>> ContractBids(int contract_id, int page = 1)
57+
=> await Execute<List<Bid>>(_client, _config, RequestSecurity.Public, RequestMethod.GET, $"/contracts/public/items/{contract_id}/", parameters: new string[]
58+
{
59+
$"page={page}"
60+
});
5261

5362
/// <summary>
54-
///
63+
/// /characters/{character_id}/contracts/
5564
/// </summary>
5665
/// <returns></returns>
57-
public async Task<EsiResponse<List<Contract>>> CorporationContracts()
58-
=> await Execute<List<Contract>>(_client, _config, RequestSecurity.Authenticated, RequestMethod.GET, $"/corporations/{corporation_id}/contracts/", token: _data.Token);
66+
public async Task<EsiResponse<List<Contract>>> CharacterContracts(int page = 1)
67+
=> await Execute<List<Contract>>(_client, _config, RequestSecurity.Authenticated, RequestMethod.GET, $"/characters/{character_id}/contracts/", parameters: new string[]
68+
{
69+
$"page={page}"
70+
}, token: _data.Token);
5971

6072
/// <summary>
61-
///
73+
/// /characters/{character_id}/contracts/{contract_id}/items/
6274
/// </summary>
6375
/// <param name="contract_id"></param>
6476
/// <returns></returns>
65-
public async Task<EsiResponse<List<ContractItem>>> CorporationContractItems(int contract_id)
66-
=> await Execute<List<ContractItem>>(_client, _config, RequestSecurity.Authenticated, RequestMethod.GET, $"/corporations/{corporation_id}/contracts/{contract_id}/items/", token: _data.Token);
77+
public async Task<EsiResponse<List<ContractItem>>> CharacterContractItems(int contract_id, int page = 1)
78+
=> await Execute<List<ContractItem>>(_client, _config, RequestSecurity.Authenticated, RequestMethod.GET, $"/characters/{character_id}/contracts/{contract_id}/items/", parameters: new string[]
79+
{
80+
$"page={page}"
81+
}, token: _data.Token);
6782

6883
/// <summary>
69-
///
84+
/// /characters/{character_id}/contracts/{contract_id}/bids/
85+
/// </summary>
86+
/// <param name="contract_id"></param>
87+
/// <returns></returns>
88+
public async Task<EsiResponse<List<Bid>>> CharacterContractBids(int contract_id, int page = 1)
89+
=> await Execute<List<Bid>>(_client, _config, RequestSecurity.Authenticated, RequestMethod.GET, $"/characters/{character_id}/contracts/{contract_id}/bids/", parameters: new string[]
90+
{
91+
$"page={page}"
92+
}, token: _data.Token);
93+
94+
/// <summary>
95+
/// /corporations/{corporation_id}/contracts/
96+
/// </summary>
97+
/// <returns></returns>
98+
public async Task<EsiResponse<List<Contract>>> CorporationContracts(int page = 1)
99+
=> await Execute<List<Contract>>(_client, _config, RequestSecurity.Authenticated, RequestMethod.GET, $"/corporations/{corporation_id}/contracts/", parameters: new string[]
100+
{
101+
$"page={page}"
102+
}, token: _data.Token);
103+
104+
/// <summary>
105+
/// /corporations/{corporation_id}/contracts/{contract_id}/items/
70106
/// </summary>
71107
/// <param name="contract_id"></param>
72108
/// <returns></returns>
73-
public async Task<EsiResponse<List<Bid>>> CorporationContractBids(int contract_id)
74-
=> await Execute<List<Bid>>(_client, _config, RequestSecurity.Authenticated, RequestMethod.GET, $"/corporations/{corporation_id}/contracts/{contract_id}/bids/", token: _data.Token);
109+
public async Task<EsiResponse<List<ContractItem>>> CorporationContractItems(int contract_id, int page = 1)
110+
=> await Execute<List<ContractItem>>(_client, _config, RequestSecurity.Authenticated, RequestMethod.GET, $"/corporations/{corporation_id}/contracts/{contract_id}/items/", parameters: new string[]
111+
{
112+
$"page={page}"
113+
}, token: _data.Token);
114+
115+
/// <summary>
116+
/// /corporations/{corporation_id}/contracts/{contract_id}/bids/
117+
/// </summary>
118+
/// <param name="contract_id"></param>
119+
/// <returns></returns>
120+
public async Task<EsiResponse<List<Bid>>> CorporationContractBids(int contract_id, int page = 1)
121+
=> await Execute<List<Bid>>(_client, _config, RequestSecurity.Authenticated, RequestMethod.GET, $"/corporations/{corporation_id}/contracts/{contract_id}/bids/", parameters: new string[]
122+
{
123+
$"page={page}"
124+
}, token: _data.Token);
75125
}
76126
}

ESI.NET/Models/Contracts/ContractItem.cs

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,5 +21,20 @@ public class ContractItem
2121

2222
[JsonProperty("is_included")]
2323
public bool IsIncluded { get; set; }
24+
25+
[JsonProperty("is_blueprint_copy")]
26+
public bool IsBlueprintCopy { get; set; }
27+
28+
[JsonProperty("item_id")]
29+
public long ItemId { get; set; }
30+
31+
[JsonProperty("material_efficiency")]
32+
public int MaterialEfficiency { get; set; }
33+
34+
[JsonProperty("runs")]
35+
public int Runs { get; set; }
36+
37+
[JsonProperty("time_efficiency")]
38+
public int TimeEfficiency { get; set; }
2439
}
2540
}

0 commit comments

Comments
 (0)