Esempio n. 1
0
        private async Task SetWeather()
        {
            var storagedWeather = await new WeatherController().LocalData.List(new Data.Models.Query.SQLControllerListCriteriaModel
            {
                Filter = new System.Collections.Generic.List <Data.Models.Query.SQLControllerListFilterField>
                {
                    new Data.Models.Query.SQLControllerListFilterField
                    {
                        FieldName   = "Created",
                        ValueLBound = DateTime.Now.Date.ToString(),
                        ValueUBound = DateTime.Now.Date.AddDays(1).AddTicks(-1).ToString(),
                        DateKind    = Data.Models.Query.SQLControllerListFilterField.DateKindEnum.Localized
                    }
                }
            });

            if (storagedWeather.Any())
            {
                Weather = storagedWeather.FirstOrDefault();
            }
            else
            {
                var device = await Utils.GetPositionAsync();

                if (device != null)
                {
                    WeatherHistoryRoot weather = null;
                    try
                    {
                        weather = await DependencyService.Get <IWeatherService>()
                                  .GetOneCall(device.Latitude,
                                              device.Longitude,
                                              Config.ApiKeys.FirstOrDefault(x => x.ConsumerKey == "OpenWeather").ConsumerSecret);
                    }
                    catch (Exception e)
                    {
                        Weather = (await new WeatherController().LocalData.List().ConfigureAwait(false)).LastOrDefault();
                    }

                    if (weather != null && Weather == null)
                    {
                        Weather = new WeatherModel
                        {
                            Id          = Guid.Empty,
                            WeatherJson = JsonConvert.SerializeObject(weather)
                        };

                        await new WeatherController().LocalData.Modify(Weather);
                        Weather.RaiseFields();
                    }
                }
            }

            if (Weather != null)
            {
                Temperature = new LineChart
                {
                    Entries = Weather.Main.daily.Select(x => new ChartEntry(x.temp.day)
                    {
                        Label      = CastDtToDayOfWeek(x.dt),
                        ValueLabel = x.temp.day.ToString("f0"),
                        Color      = SKColor.Parse(GetTemperatureColor(x.temp.day))
                    })
                };

                Rain = new LineChart
                {
                    Entries = Weather.Main.daily.Select(x => new ChartEntry(x.rain)
                    {
                        Label      = CastDtToDayOfWeek(x.dt),
                        ValueLabel = x.rain.ToString("f0"),
                        Color      = SKColor.Parse("#2389da")
                    })
                };

                OnPropertyChanged("TempColor");
            }
        }