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