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 <ForecastModel> GetWeather(string city, DateTime?date) { if (string.IsNullOrEmpty(city)) // todo: think about it { city = DefaultCity; } if (date.Equals(null)) // todo: think about it { date = DateTime.UtcNow; } var address = GetAddressFromString(city); var forecastOptions = new DarkSkyService.OptionalParameters { MeasurementUnits = "si", ForecastDateTime = date }; var response = await _client.GetForecast(address.Coordinates.Latitude, address.Coordinates.Longitude, forecastOptions); var forecastResult = response.Response; var forecast = new ForecastModel { Temperature = forecastResult.Currently.Temperature.ToString(), WindSpeed = forecastResult.Currently.WindSpeed.ToString(), Summary = forecastResult.Currently.Summary, Location = address.ToString(), }; return(await Task.FromResult(forecast)); }