Exemplo n.º 1
0
 private void _Service_WeatherUpdated(object sender, EventArgs e)
 {
     _SyncContext.Post((o) =>
     {
         WeatherMetrics = _Service.WeatherCurrent;
     }, null);
 }
Exemplo n.º 2
0
        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);
            }
        }
Exemplo n.º 3
0
        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);
                }
            }
        }
Exemplo n.º 4
0
        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);
            }
        }
Exemplo n.º 5
0
 public TemperatureController(WeatherMetrics holder)
 {
     _holder = holder;
 }