コード例 #1
0
        public async Task <Weather> GetCurrentWeather(double latitude, double longitude, Unit unit = Unit.Auto, Language language = Language.English)
        {
            OWModel.ForecastDSL src = await _service.GetForecastDSL(latitude, longitude, (OWModel.OWUnit) unit, language);

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

            // === do some adaptation that TinyMapper does not do quickly
            // Convert time offset from seconds to hours
            if (src.TimeZoneOffset != 0)
            {
                output.TimeZoneOffset = (float)Math.Round(src.TimeZoneOffset / 3600.0f, 1);
            }

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

            // === ALTERNATIVE using GetCurrentWeather
            //var innerW = await _service.GetCurrentWeather(latitude, longitude, (OWUnit)unit, language);
            //var output = TinyMapper.Map<Model.Weather>((object)innerW);
            // ===

            return(output);
        }
コード例 #2
0
        public async Task <WeatherGroup> GetForecast(double latitude, double longitude, Unit unit = Unit.Auto, Language language = Language.English)
        {
            OWModel.ForecastDSL src = await _service.GetForecastDSL(latitude, longitude, (OWModel.OWUnit) unit, language);

            //var output_meno = await _service.GetForecastDSL(14.93122218816076, -23.519346790741995, (OWModel.OWUnit)unit, Language.Italian);
            //var output_zero = await _service.GetForecastDSL(51.53027816900633, 0.08310560054000066, (OWModel.OWUnit)unit, Language.Italian);
            //var output_piu = await _service.GetForecastDSL(44.482732, 11.352134, (OWModel.OWUnit)unit, Language.Italian);

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

            output = TinyMapper.Map <OWModel.ForecastDSL, WeatherGroup>(src, output);
            // do some normalization (convert time offset from seconds to hours)
            if (src.TimeZoneOffset != 0)
            {
                output.TimeZoneOffset = (float)Math.Round(output.TimeZoneOffset / 3600.0f, 1);
            }

            // now add the days
            if ((src.Daily?.Count ?? 0) > 0)
            {
                output.AddRange(TinyMapper.Map <List <Weather> >(src.Daily));
                foreach (var daily in output)
                {
                    if (string.IsNullOrEmpty(daily.TimeZone))
                    {
                        daily.TimeZone = output.TimeZone;
                    }
                    if (daily.TimeZoneOffset == 0.0f)
                    {
                        daily.TimeZoneOffset = output.TimeZoneOffset;
                    }
                    if (daily.Coordinates == null)
                    {
                        daily.Coordinates = output.Coordinates;
                    }
                    // normalize time unix utc
                    if (src.TimeZoneOffset != 0)
                    {
                        daily.UnixTime += src.TimeZoneOffset;
                    }
                }
            }

            return(output);
        }
コード例 #3
0
        public void Forecast_to_Weather()
        {
            // prepare
            OWModel.ForecastDSL 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));
        }