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); }
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); }
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)); }