Ejemplo n.º 1
0
        public async Task <WeatherGroup> GetForecast(double latitude, double longitude, Unit unit = Unit.Auto, Language language = Language.English)
        {
            DSModel.Forecast src = await _service.GetForecast(latitude, longitude, (DSModel.DSUnit) unit, language);

            var output = new WeatherGroup(src.Daily?.Data?.Count ?? 16);

            TinyMapper.Map <DSModel.Forecast, WeatherGroup>(src, output);
            foreach (var dataPoint in src.Daily.Data)
            {
                // convert datapoints patching/normalizing some values
                var weatherOftheDay = TinyMapper.Map <Weather>(dataPoint);
                if (string.IsNullOrEmpty(weatherOftheDay.TimeZone))
                {
                    weatherOftheDay.TimeZone = output.TimeZone;
                }
                if (weatherOftheDay.TimeZoneOffset == 0.0f)
                {
                    weatherOftheDay.TimeZoneOffset = output.TimeZoneOffset;
                }
                if (weatherOftheDay.Coordinates == null)
                {
                    weatherOftheDay.Coordinates = output.Coordinates;
                }
                // normalize time unix utc
                if (Math.Abs(output.TimeZoneOffset) > 0.4f)
                {
                    weatherOftheDay.UnixTime += (int)(3600 * output.TimeZoneOffset);
                }

                output.Add(weatherOftheDay);
            }

            return(output);
        }
Ejemplo n.º 2
0
        public async Task <Weather> GetWeatherByDate(double latitude, double longitude, DateTime dateTime, Unit unit = Unit.Auto, Language language = Language.English)
        {
            DSModel.Forecast src = await _service.GetWeatherByDate(latitude, longitude, dateTime, (DSModel.DSUnit) unit, language);

            var output = TinyMapper.Map <Weather>(src);

            // TODO Map this: output.Hourly = innerW.Hourly,
            return(output);
        }
Ejemplo n.º 3
0
        public async Task <Weather> GetCurrentWeather(double latitude, double longitude, Unit unit = Unit.Auto, Language language = Language.English)
        {
            DSModel.Forecast src = await _service.GetCurrentWeather(latitude, longitude, (DSModel.DSUnit) unit, language);

            var output = TinyMapper.Map <Weather>(src);

            // now maps the hours
            if ((src.Hourly?.Data?.Count ?? 0) > 0)
            {
                var hourly = TinyMapper.Map <WeatherGroup>(src);
                hourly.AddRange(TinyMapper.Map <List <Weather> >(src.Hourly.Data));
                output.Hourly = hourly;
            }

            return(output);
        }
Ejemplo n.º 4
0
        public void Forecast_to_Weather()
        {
            // prepare
            DSModel.Forecast src = PrepareForecastData();
            // execute
            Weather output = TinyMapper.Map <Weather>(src);

            // assert
            output.TimeZone.ShouldBe(src.TimeZone);
            output.TimeZoneOffset.ShouldBe(src.TimeZoneOffset);
            output.Time.ShouldBe(src.Currently.Time);
            output.SunriseTime.ShouldBe(src.Currently.SunriseTime);
            output.TimeZone.ShouldBe(src.TimeZone);
            output.Coordinates.ShouldBe(src.Coordinates);
            output.Alerts.ShouldNotBeNull();
            output.Alerts.ShouldNotBeEmpty();
            output.Alerts.Select(dest => dest.Title).ShouldBe(src.Alerts.Select(al => al.Title));
            output.Alerts.Select(dest => dest.StartTime).ShouldBe(src.Alerts.Select(al => al.StartTime));
            output.Alerts.Select(dest => dest.Severity).ShouldBe(src.Alerts.Select(al => al.Severity));
        }