Beispiel #1
0
        public WeatherConditionModel GetWeatherConditions(string woeid, DateTime?date)
        {
            var result = new WeatherConditionModel();
            IEnumerable <Repository.External.WeatherCondition> forecasts = null;

            int languageId = 2; // Russian

            if (CurrentLang != null)
            {
                languageId = CurrentLang.Id;
            }

            string key = "s" + woeid + "l" + languageId;

            try
            {
                // Don't us date because we get forecast  for all dates of the week just by woeid.
                if (HttpContext.Current.Cache[woeid] != null)
                {
                    forecasts = HttpContext.Current.Cache[key] as IEnumerable <Repository.External.WeatherCondition>;

                    if (forecasts.Count() == 0)
                    {
                        forecasts = this._provider.GetWeatherForecastByWoeid(woeid,
                                                                             (languageId == 2) ? _provider.GetUnitsName(Units.Metric) : _provider.GetUnitsName(Units.Imperial));
                        HttpContext.Current.Cache.Add(key, forecasts, null, DateTime.MaxValue, TimeSpan.FromMinutes(20), CacheItemPriority.High, null);
                    }
                }
                else
                {
                    forecasts = this._provider.GetWeatherForecastByWoeid(woeid, (languageId == 2) ? _provider.GetUnitsName(Units.Metric) : _provider.GetUnitsName(Units.Imperial));
                    HttpContext.Current.Cache.Add(key, forecasts, null, DateTime.MaxValue, TimeSpan.FromMinutes(20), CacheItemPriority.High, null);
                }

                // If date parameter set, then select by date.
                Repository.External.WeatherCondition selectedConditions = null;
                if (date.HasValue)
                {
                    selectedConditions = forecasts.FirstOrDefault(x => x.ForecastDate.HasValue && x.ForecastDate.Value.Date == date.Value.Date);
                }
                else
                {
                    selectedConditions = forecasts.FirstOrDefault(x => !x.IsForecast);
                }

                if (selectedConditions != null)
                {
                    var weatherCondition = ModelAdapter.ConvertTo(selectedConditions);

                    if (weatherCondition != null)
                    {
                        this._dataStore.Insert(weatherCondition);
                    }
                    else
                    {
                        Debug.Assert(false);
                    }

                    result = _Convert(selectedConditions, forecasts, languageId);
                }
            }
            catch (Exception ex)
            {
                _logger.Error("Exception API Profile", ex);
            }

            return(result);
        }
Beispiel #2
0
        /// <summary>
        /// Converts weather conditions to model for showing.
        /// </summary>
        /// <param name="currentConditions">The currentConditions.</param>
        /// <returns></returns>
        private WeatherConditionModel _Convert(Repository.External.WeatherCondition currentConditions,
                                               IEnumerable <Repository.External.WeatherCondition> forecasts,
                                               int languageId)
        {
            var result = new WeatherConditionModel();

            if (currentConditions == null)
            {
                return(result);
            }

            if (currentConditions.Condition.HasValue)
            {
                var iconName = this._dataStore.GetConditionDescriptionByExtId(currentConditions.Condition.Value, languageId);

                if (iconName != null)
                {
                    result.ConditionIcon    = iconName.Icon;
                    result.ShortDescription = iconName.ShortDescription;
                }
            }

            var unit = _dataStore.GetUnitByName((languageId == 2) ? UnitSystems.Metric.ToString() : UnitSystems.USA.ToString(), languageId);

            if (unit != null)
            {
                result.TemperatureUnits = unit.Temperature;
                result.PressureUnits    = unit.Pressure;
                result.LightUnits       = unit.Light;
                result.DistanceUnits    = unit.Distance;
                result.HumidityUnits    = unit.Humidity;
                result.SpeedUnits       = unit.Speed;
            }

            result.TemperatureMax       = currentConditions.TemperatureMax.HasValue ? String.Format(NUMERIC_FORMAT, currentConditions.TemperatureMax.Value) : ZERO;
            result.TemperatureMin       = currentConditions.TemperatureMin.HasValue ? String.Format(NUMERIC_FORMAT, currentConditions.TemperatureMin.Value) : ZERO;
            result.EffectiveTemperature = currentConditions.EffectiveTemperature.HasValue ? String.Format(NUMERIC_FORMAT, currentConditions.EffectiveTemperature.Value) : ZERO;

            if (currentConditions.Temperature.HasValue)
            {
                result.Temperature = String.Format(NUMERIC_FORMAT, currentConditions.Temperature.Value);
            }
            else
            {
                // Calculate middle temperature.
                if (currentConditions.TemperatureMax.HasValue && currentConditions.TemperatureMin.HasValue)
                {
                    result.Temperature = Convert.ToInt32(((currentConditions.TemperatureMax.Value + currentConditions.TemperatureMin.Value) / 2)).ToString();
                }
                else
                {
                    result.Temperature = ZERO;
                }
            }

            if (currentConditions.WindSpeed.HasValue)
            {
                result.WindSpeed = currentConditions.WindSpeed.Value.ToString();

                // https://ru.wikipedia.org/wiki/%D0%A8%D0%BA%D0%B0%D0%BB%D0%B0_%D0%91%D0%BE%D1%84%D0%BE%D1%80%D1%82%D0%B0
                result.IsWindy = (currentConditions.WindSpeed.Value >= 29);
            }
            else
            {
                result.WindSpeed = ZERO;
            }

            if (currentConditions.WindDirection.HasValue)
            {
                result.WindDirection = Phi.MobileWebApp.Helpers.CommonHelpers.GetWindDirectionByAngle(currentConditions.WindDirection.Value);
            }
            else
            {
                result.WindDirection = String.Empty;
            }

            result.AthmosphereHumidity   = currentConditions.AthmosphereHumidity.HasValue ? String.Format(NUMERIC_FORMAT, currentConditions.AthmosphereHumidity.Value) : ZERO;
            result.AthmospherePressure   = currentConditions.AthmospherePressure.HasValue ? String.Format(NUMERIC_FORMAT, currentConditions.AthmospherePressure.Value) : ZERO;
            result.AthmosphereVisibility = currentConditions.AthmosphereVisibility.HasValue ? String.Format(NUMERIC_FORMAT, currentConditions.AthmosphereVisibility.Value) : ZERO;
            result.AthmosphereRising     = currentConditions.AthmosphereRising.HasValue ? String.Format(NUMERIC_FORMAT, currentConditions.AthmosphereRising.Value) : ZERO;
            result.IsForecast            = currentConditions.IsForecast;
            result.ForecastDateString    = currentConditions.ForecastDateString;

            if (currentConditions.ForecastDate.HasValue)
            {
                result.ForecastDate = currentConditions.ForecastDate.Value;
            }

            result.ForecastGuid         = currentConditions.ForecastGuid;
            result.GenerationDateString = currentConditions.GenerationDateString;
            result.FullDescription      = currentConditions.FullDescription;
            result.Precipitation        = currentConditions.Precipitation;
            result.SeaLevel             = currentConditions.SeaLevel.HasValue ? String.Format(NUMERIC_FORMAT, currentConditions.SeaLevel.Value) : ZERO;
            result.GroundLevel          = currentConditions.GroundLevel.HasValue ? String.Format(NUMERIC_FORMAT, currentConditions.GroundLevel.Value) : ZERO;
            result.Sunrise = currentConditions.Sunrise.HasValue ?
                             DateTimeHelpers.ToShortString(currentConditions.Sunrise.Value, languageId) :
                             ZERO;
            result.Sunset = currentConditions.Sunset.HasValue ?
                            DateTimeHelpers.ToShortString(currentConditions.Sunset.Value, languageId) :
                            ZERO;

            // var lang = dataStore.GetLanguageByCode(condition.Language);
            result.Language = currentConditions.Language;

            // dataStore.GetLocationByCity(condition.City);
            result.Location  = currentConditions.City;
            result.Latitude  = currentConditions.Latitude;
            result.Longitude = currentConditions.Longitude;

            result.DataProviderName = "Hidden";

            // Fill values for forecast dates.
            if (forecasts != null)
            {
                foreach (var forecast in forecasts)
                {
                    if (forecast.ForecastDate.HasValue)
                    {
                        result.Forecasts.Add(_LocalizeWeekDay(forecast.ForecastDateString), forecast.ForecastDate.Value);
                    }
                }
            }

            return(result);
        }