private async void BtnGetWeather_OnClick()

in Blog-Sqlite/SqlLite.UI/MainWindow.xaml.cs [45:82]


        private async void BtnGetWeather_OnClick(object sender, RoutedEventArgs e)
        {
            if (string.IsNullOrWhiteSpace(openWeatherApiKey)) return;

            var result = string.Empty;
            var city = (string.IsNullOrWhiteSpace(TbCity.Text)) ? defaultCity : TbCity.Text.Trim();
            var uri = $"{baseUri}/{weatherEndpoint}?q={city}&{openWeatherApiParam}{openWeatherApiKey}";

            using (var client = new HttpClient())
            {
                var response = await client.GetAsync(uri);
                if (response.IsSuccessStatusCode)
                {
                    var json = await response.Content.ReadAsStringAsync();
                    var jsonData = JObject.Parse(json);
                    if (jsonData.SelectToken(COD).ToString() == ValidCod)
                    {
                        var name = jsonData.SelectToken(NameSelector).ToString();
                        var weathers = jsonData.SelectToken(WeatherSelector).Select(w => new Weather(w)).ToList();
                        var main = new Main(jsonData.SelectToken(MainSelector));

                        if (weathers.Any())
                        {
                            this.weather = weathers.FirstOrDefault();
                            IMGWeatherIcon.Source = new BitmapImage(new Uri($"{iconUri}{weather.Icon}.{icontype}"));
                        }

                        result = $"Weather for {name}:{Environment.NewLine}{weathers.FirstOrDefault()?.Description} @ {main.Temperature.CelsiusCurrent}°C";
                    }
                }
                else
                {
                    result = response.ReasonPhrase;
                }
            }

            TbResult.Text = result;
        }