diff --git a/Bloxstrap/Integrations/ActivityWatcher.cs b/Bloxstrap/Integrations/ActivityWatcher.cs index 142eba8..ac0bea0 100644 --- a/Bloxstrap/Integrations/ActivityWatcher.cs +++ b/Bloxstrap/Integrations/ActivityWatcher.cs @@ -280,13 +280,27 @@ if (GeolocationCache.ContainsKey(ActivityMachineAddress)) return GeolocationCache[ActivityMachineAddress]; - string location, locationCity, locationRegion, locationCountry = ""; - try { - locationCity = await App.HttpClient.GetStringAsync($"https://ipinfo.io/{ActivityMachineAddress}/city"); - locationRegion = await App.HttpClient.GetStringAsync($"https://ipinfo.io/{ActivityMachineAddress}/region"); - locationCountry = await App.HttpClient.GetStringAsync($"https://ipinfo.io/{ActivityMachineAddress}/country"); + string location = ""; + var ipInfo = await Http.GetJson($"https://ipinfo.io/{ActivityMachineAddress}/json"); + + if (ipInfo is null) + return $"N/A ({Resources.Strings.ActivityTracker_LookupFailed})"; + + if (string.IsNullOrEmpty(ipInfo.Country)) + location = "N/A"; + else if (ipInfo.City == ipInfo.Region) + location = $"{ipInfo.Region}, {ipInfo.Country}"; + else + location = $"{ipInfo.City}, {ipInfo.Region}, {ipInfo.Country}"; + + if (!ActivityInGame) + return $"N/A ({Resources.Strings.ActivityTracker_LeftGame})"; + + GeolocationCache[ActivityMachineAddress] = location; + + return location; } catch (Exception ex) { @@ -295,24 +309,6 @@ return $"N/A ({Resources.Strings.ActivityTracker_LookupFailed})"; } - - locationCity = locationCity.ReplaceLineEndings(""); - locationRegion = locationRegion.ReplaceLineEndings(""); - locationCountry = locationCountry.ReplaceLineEndings(""); - - if (string.IsNullOrEmpty(locationCountry)) - location = "N/A"; - else if (locationCity == locationRegion) - location = $"{locationRegion}, {locationCountry}"; - else - location = $"{locationCity}, {locationRegion}, {locationCountry}"; - - if (!ActivityInGame) - return $"N/A ({Resources.Strings.ActivityTracker_LeftGame})"; - - GeolocationCache[ActivityMachineAddress] = location; - - return location; } public void Dispose() diff --git a/Bloxstrap/Models/IPInfoResponse.cs b/Bloxstrap/Models/IPInfoResponse.cs new file mode 100644 index 0000000..f8d3bc0 --- /dev/null +++ b/Bloxstrap/Models/IPInfoResponse.cs @@ -0,0 +1,14 @@ +namespace Bloxstrap.Models +{ + public class IPInfoResponse + { + [JsonPropertyName("city")] + public string City { get; set; } = null!; + + [JsonPropertyName("country")] + public string Country { get; set; } = null!; + + [JsonPropertyName("region")] + public string Region { get; set; } = null!; + } +}