private void _Service_WeatherUpdated(object sender, EventArgs e) { _SyncContext.Post((o) => { WeatherMetrics = _Service.WeatherCurrent; }, null); }
private static WeatherMetrics CurrentFromJson(string response) { try { var json = JsonValue.Parse(response).GetObject(); if (json.GetNamedNumber("cod") != 200) { return(null); } var metrics = new WeatherMetrics(); metrics.DateTime = DateTimeOffset.FromUnixTimeSeconds((long)json.GetNamedNumber("dt")); metrics.Temperature = (int)json.GetNamedObject("main").GetNamedNumber("temp"); var sys = json.GetNamedObject("sys"); metrics.Sunrise = DateTimeOffset.FromUnixTimeSeconds((long)sys.GetNamedNumber("sunrise")); metrics.Sunset = DateTimeOffset.FromUnixTimeSeconds((long)sys.GetNamedNumber("sunset")); var weather = json.GetNamedArray("weather").GetObjectAt(0); metrics.Description = weather.GetNamedString("description"); metrics.Icon = weather.GetNamedString("icon"); return(metrics); } catch { return(null); } }
private async Task UpdateWeatherCurrentAsync() { using (var client = new HttpClient()) { while (true) { var response = await client.GetStringAsync(_WeatherCurrentUri); var metrics = CurrentFromJson(response); if (metrics != null) { WeatherCurrent = metrics; break; } // use a 2 seconds delay so we don't exceed the openweather quota await Task.Delay(2000); } } }
private static IEnumerable <WeatherMetrics> ForecastsFromJson(string response) { try { var json = JsonValue.Parse(response).GetObject(); if (json.GetNamedString("cod") != "200") { return(null); } var array = json.GetNamedArray("list"); // position the data to the next day start time (hour 0) uint startIndex = 0; while (true) { var dt = DateTimeOffset.FromUnixTimeSeconds((long)array.GetObjectAt(startIndex).GetNamedNumber("dt")); if (dt.Hour == 0) { break; } startIndex++; } var forecasts = new List <WeatherMetrics>(); WeatherMetrics metrics = null; // start at the very beginning of a day for (uint i = startIndex; i < json.GetNamedNumber("cnt"); i++) { var item = array.GetObjectAt(i); var dt = DateTimeOffset.FromUnixTimeSeconds((long)item.GetNamedNumber("dt")); if ((dt.Hour == 0) && (metrics != null)) { forecasts.Add(metrics); metrics = null; } if (metrics == null) { metrics = new WeatherMetrics() { MinTemperature = int.MaxValue, MaxTemperature = int.MinValue }; } var temperature = (int)item.GetNamedObject("main").GetNamedNumber("temp"); if (temperature < metrics.MinTemperature) { metrics.MinTemperature = temperature; } if (temperature > metrics.MaxTemperature) { metrics.MaxTemperature = temperature; } if (dt.Hour == 12) { metrics.DateTime = dt; var weather = item.GetNamedArray("weather").GetObjectAt(0); metrics.Description = weather.GetNamedString("description"); metrics.Icon = weather.GetNamedString("icon"); } } return(forecasts); } catch { return(null); } }
public TemperatureController(WeatherMetrics holder) { _holder = holder; }