Ejemplo n.º 1
0
        private async void UpdateValues(XmlDocument doc)
        {
            bool metric = Settings.WeatherMetric;

            _temp = metric
                                ? WeatherFunctions.KelvinToCelsius(double.Parse(doc.GetElementsByTagName("temperature")[0].Attributes["value"].Value))
                                : WeatherFunctions.KelvinToFarenheit(double.Parse(doc.GetElementsByTagName("temperature")[0].Attributes["value"].Value));
            _windSpeed = metric
                                ? WeatherFunctions.MpsToKmH(double.Parse(doc.GetElementsByTagName("speed")[0].Attributes["value"].Value))
                                : WeatherFunctions.MpsToMph(double.Parse(doc.GetElementsByTagName("speed")[0].Attributes["value"].Value));
            _skyCondition  = doc.GetElementsByTagName("weather")[0].Attributes["number"].Value;
            _cloudCover    = doc.GetElementsByTagName("clouds")[0].Attributes["value"].Value;
            _windDirection = doc.GetElementsByTagName("direction")[0].Attributes["code"].Value;
            _humidity      = double.Parse(doc.GetElementsByTagName("humidity")[0].Attributes["value"].Value);
            _pressure      = metric
                                ? double.Parse(doc.GetElementsByTagName("pressure")[0].Attributes["value"].Value)
                                : WeatherFunctions.MillibarToInHg(double.Parse(doc.GetElementsByTagName("pressure")[0].Attributes["value"].Value));

            XmlNode sun = doc.GetElementsByTagName("sun")[0];

            XmlNode location  = doc.GetElementsByTagName("coord")[0];
            double  longitude = double.Parse(location.Attributes["lon"].Value);
            double  latitude  = double.Parse(location.Attributes["lat"].Value);

            //_sunrise = DateTime.Parse(sun.Attributes["rise"].Value).ToLocalTime().TimeOfDay;
            //_sunset = DateTime.Parse(sun.Attributes["set"].Value).ToLocalTime().TimeOfDay;

            TimeZoneInfo tz = await TimeZoneLookup.TimeZone(latitude, longitude);

            if (tz == null)
            {
                tz            = TimeZoneInfo.Local;
                _showTimeZone = true;
            }
            else
            {
                _showTimeZone = false;
            }

            _timeZone = tz;

            _sunrise = TimeZoneInfo.ConvertTimeFromUtc(DateTime.Parse(sun.Attributes["rise"].Value), tz).TimeOfDay;
            _sunset  = TimeZoneInfo.ConvertTimeFromUtc(DateTime.Parse(sun.Attributes["set"].Value), tz).TimeOfDay;

            _timestamp = DateTime.Parse(doc.GetElementsByTagName("lastupdate")[0].Attributes["value"].Value).ToLocalTime();

            RaiseDataUpdatedEvent();
        }
Ejemplo n.º 2
0
        private void ShowForecastedWeather(XmlDocument doc)
        {
            bool metric = Settings.WeatherMetric;

            XmlNodeList nodes = doc.GetElementsByTagName("time");

            DateTime current = DateTime.Now.Date;
            int      count   = -1;

            for (int i = 0; i < nodes.Count && i < 16; i++)
            {
                XmlNode each = nodes[i];

                DateTime _date = DateTime.Parse(each.Attributes["day"].Value);

                if (_date >= current)
                {
                    count++;
                    string _skyCondition = each["symbol"].Attributes["number"].Value;

                    XmlElement temp = each["temperature"];

                    string _temperature = Math.Round(metric
                                                        ? WeatherFunctions.KelvinToCelsius(double.Parse(temp.Attributes["max"].Value))
                                                        : WeatherFunctions.KelvinToFarenheit(double.Parse(temp.Attributes["max"].Value))
                                                     ).ToString()
                                          + "° / "
                                          + Math.Round(metric
                                                        ? WeatherFunctions.KelvinToCelsius(double.Parse(temp.Attributes["min"].Value))
                                                        : WeatherFunctions.KelvinToFarenheit(double.Parse(temp.Attributes["min"].Value))
                                                       ).ToString()
                                          + "°";
                    string _pressure = WeatherFunctions.FormatDouble(metric
                                                        ? double.Parse(each["pressure"].Attributes["value"].Value)
                                                        : WeatherFunctions.MillibarToInHg(double.Parse(each["pressure"].Attributes["value"].Value)
                                                                                          ), 1) + (metric ? " hPa" : " in");
                    string _humidity     = each["humidity"].Attributes["value"].Value + " %";
                    string _cloudPercent = each["clouds"].Attributes["all"].Value + " %";
                    string _wind         = each["windDirection"].Attributes["code"].Value + " "
                                           + WeatherFunctions.FormatDouble(
                        metric ? WeatherFunctions.MpsToKmH(double.Parse(each["windSpeed"].Attributes["mps"].Value))
                                                        : WeatherFunctions.MpsToMph(double.Parse(each["windSpeed"].Attributes["mps"].Value)
                                                                                    ), 1) + (metric ? " km/h" : " mph");

                    XmlAttribute precip = each["precipitation"].Attributes["value"];
                    string       _precipitation;

                    if (precip != null)
                    {
                        _precipitation = WeatherFunctions.FormatDouble(metric
                                                        ? double.Parse(precip.Value) / 10
                                                        : WeatherFunctions.MmToIn(double.Parse(precip.Value)
                                                                                  ), 1) + (metric ? " cm" : " in");
                    }
                    else
                    {
                        _precipitation = metric ? "0.0 cm" : "0.0 in";
                    }

                    Dispatcher.Invoke(() =>
                    {
                        ForecastControl fc = (ForecastControl)forecastBox.Children[count];
                        fc.Visibility      = Visibility.Visible;

                        fc.Date          = _date;
                        fc.SkyCondition  = _skyCondition;
                        fc.Temperature   = _temperature;
                        fc.Pressure      = _pressure;
                        fc.Humidity      = _humidity;
                        fc.CloudPercent  = _cloudPercent;
                        fc.Wind          = _wind;
                        fc.Precipitation = _precipitation;
                    });
                }
            }

            Dispatcher.Invoke(() =>
            {
                // Handle just in case the weather service doesn't give us
                // the full 16-day forecast. (Yes, this has actually happened.)
                for (int i = count + 1; i < 16; i++)
                {
                    UIElement fc  = forecastBox.Children[i];
                    fc.Visibility = Visibility.Collapsed;
                }

                if (forecastBox.Children[0].Visibility == Visibility.Collapsed)
                {
                    noForecastText.Visibility = Visibility.Visible;
                }
                else
                {
                    noForecastText.Visibility = Visibility.Collapsed;
                }

                UpdateTimeFormat();
            });
        }
Ejemplo n.º 3
0
        private async void ShowCurrentWeather(XmlDocument doc)
        {
            bool metric = Settings.WeatherMetric;

            double currentTemp = metric
                                ? WeatherFunctions.KelvinToCelsius(double.Parse(doc.GetElementsByTagName("temperature")[0].Attributes["value"].Value))
                                : WeatherFunctions.KelvinToFarenheit(double.Parse(doc.GetElementsByTagName("temperature")[0].Attributes["value"].Value));
            double windSpeed = metric
                                ? WeatherFunctions.MpsToKmH(double.Parse(doc.GetElementsByTagName("speed")[0].Attributes["value"].Value))
                                : WeatherFunctions.MpsToMph(double.Parse(doc.GetElementsByTagName("speed")[0].Attributes["value"].Value));
            double humidity = double.Parse(doc.GetElementsByTagName("humidity")[0].Attributes["value"].Value);
            string precip   = doc.GetElementsByTagName("weather")[0].Attributes["number"].Value;

            string _tempCurrent     = Math.Round(currentTemp).ToString();
            string _tempUnit        = "°" + (metric ? "C" : "F");
            string _windChillFactor = "Feels like " + Math.Round(
                metric ? WeatherFunctions.ApparentTemperatureCelsius(currentTemp, windSpeed, humidity) :
                WeatherFunctions.ApparentTemperatureFahrenheit(currentTemp, windSpeed, humidity)
                ).ToString() + "°";
            string _precipitation = WeatherFunctions.ProcessSkyConditionString(precip);

            XmlNode sun = doc.GetElementsByTagName("sun")[0];

            XmlNode location  = doc.GetElementsByTagName("coord")[0];
            double  longitude = double.Parse(location.Attributes["lon"].Value);
            double  latitude  = double.Parse(location.Attributes["lat"].Value);

            TimeZoneInfo tz = await TimeZoneLookup.TimeZone(latitude, longitude);

            bool showTimeZone = false;

            if (tz == null)
            {
                tz           = TimeZoneInfo.Local;
                showTimeZone = true;
            }

            TimeSpan sunrise = TimeZoneInfo.ConvertTimeFromUtc(DateTime.Parse(sun.Attributes["rise"].Value), tz).TimeOfDay;
            TimeSpan sunset  = TimeZoneInfo.ConvertTimeFromUtc(DateTime.Parse(sun.Attributes["set"].Value), tz).TimeOfDay;

            //TimeSpan sunrise = DateTime.Parse(sun.Attributes["rise"].Value).ToLocalTime().TimeOfDay;
            //TimeSpan sunset = DateTime.Parse(sun.Attributes["set"].Value).ToLocalTime().TimeOfDay;

            string _icon = WeatherFunctions.ProcessSkyConditionImage(precip, DateTime.Now.TimeOfDay <sunrise || DateTime.Now.TimeOfDay> sunset);
            string _cloudCoverCurrent = doc.GetElementsByTagName("clouds")[0].Attributes["value"].Value + " %";
            string _windCurrent       = doc.GetElementsByTagName("direction")[0].Attributes["code"].Value + " " +
                                        WeatherFunctions.FormatDouble(windSpeed, 1) + (metric ? " km/h" : " mph");
            string _barometerCurrent = WeatherFunctions.FormatDouble(metric
                                                ? double.Parse(doc.GetElementsByTagName("pressure")[0].Attributes["value"].Value)
                                                : WeatherFunctions.MillibarToInHg(double.Parse(doc.GetElementsByTagName("pressure")[0].Attributes["value"].Value)
                                                                                  ), 1) + (metric ? " hPa" : " in");

            string _sunriseCurrent = RandomFunctions.FormatTime(sunrise);
            string _sunsetCurrent  = RandomFunctions.FormatTime(sunset);

            if (showTimeZone)
            {
                string tzID = " " + tz.Id.Acronym();
                _sunriseCurrent += tzID;
                _sunsetCurrent  += tzID;
            }

            _lastUpdated = DateTime.Parse(doc.GetElementsByTagName("lastupdate")[0].Attributes["value"].Value).ToLocalTime();

            Dispatcher.Invoke(() =>
            {
                tempCurrent.Text          = _tempCurrent;
                tempUnit.Text             = _tempUnit;
                windChillFactor.Text      = _windChillFactor;
                precipitationCurrent.Text = _precipitation;

                //ImageSource iconSource = new BitmapImage(_icon);
                //iconSource.Freeze();
                //icon.Source = iconSource;
                icon.Text = _icon;

                //Background = new SolidColorBrush(WeatherFunctions.ProcessWeatherNumberBackground(precip));

                cloudCoverCurrent.Text = _cloudCoverCurrent;
                windCurrent.Text       = _windCurrent;
                humidityCurrent.Text   = humidity.ToString() + " %";
                barometerCurrent.Text  = _barometerCurrent;

                sunriseCurrent.Text = _sunriseCurrent;
                sunsetCurrent.Text  = _sunsetCurrent;

                currentWeatherDisplay.Opacity = _lastUpdated < DateTime.Now.AddHours(-6) ? 0.5 : 1;
            });
        }