Ejemplo n.º 1
0
        private async Task Init()
        {
            foreach (var item in Cities)
            {
                if (item.data != null && item.data.Length > 31)
                {
                    var weather = HeWeatherModel.Generate(item.data, settings.Preferences.DataSource);
                    if (weather == null || weather.DailyForecast == null || weather.HourlyForecast == null)
                    {
                        return;
                    }
                    await itemInit(item, weather);

                    item.Updated = true;
                    item.Succeed = true;
                }
            }
            if (settings.Cities.EnableLocate && settings.Cities.LocatedCity != null)
            {
                CurrentIndex = settings.Cities.CurrentIndex + 1;
            }
            else
            {
                CurrentIndex = settings.Cities.CurrentIndex;
            }
        }
Ejemplo n.º 2
0
        public async static Task <HeWeather.Location> ReGeobyIpAsync()
        {
            var ipUrl  = "http://api.ip138.com/query/?token={0}";
            var result = await ApiRequestHelper.RequestWithFormattedUrlAsync(ipUrl, new string[] { Key.ip138 });

            if (result == null)
            {
                return(null);
            }
            var ipRes = JsonHelper.FromJson <IpContract>(result);
            var city  = await Request.RequestbyIpAsync(ipRes.ip);

            var fetchresult = HeWeatherModel.Generate(city, DataSource.HeWeather);

            return(fetchresult.Location);
        }
Ejemplo n.º 3
0
        private async Task itemInit(CityViewModel item, HeWeatherModel weather)
        {
            item.NowCondition = weather.NowWeather.Now.Condition;
            item.Temperature  = weather.NowWeather.Temprature;
            string p = TemperatureDecoratorConverter.GetCurrentDeco();

            item.Decorator = p;
            var utcOffset  = weather.Location.UpdateTime - weather.Location.UtcTime;
            var current    = DateTimeHelper.ReviseLoc(utcOffset);
            var todayIndex = Array.FindIndex(weather.DailyForecast, x =>
            {
                return(x.Date.Date == current.Date);
            });
            var hourIndex = Array.FindIndex(weather.HourlyForecast, x =>
            {
                return((x.DateTime - current).TotalSeconds > 0);
            });

            if (todayIndex < 0)
            {
                todayIndex = 0;
            }
            if (hourIndex < 0)
            {
                hourIndex = 0;
            }
            item.High = weather.DailyForecast[todayIndex].HighTemp;
            item.Low  = weather.DailyForecast[todayIndex].LowTemp;
            var isNight = Generator.CalcIsNight(weather.Location.UpdateTime, weather.DailyForecast[todayIndex].SunRise, weather.DailyForecast[todayIndex].SunSet, new Models.Location(item.latitude, item.longitude));

            item.Glance = Glance.GenerateGlanceDescription(weather, isNight, settings.Preferences.TemperatureParameter, DateTime.Now);
            var uri = await settings.Immersive.GetCurrentBackgroundAsync(weather.NowWeather.Now.Condition, isNight);

            if (uri != null)
            {
                try
                {
                    item.Background = new BitmapImage(uri);
                }
                catch (Exception)
                {
                }
            }

            item.data = null;
        }
Ejemplo n.º 4
0
 private async Task Complete(CityViewModel item)
 {
     await CoreApplication.MainView.CoreWindow.Dispatcher.RunAsync(CoreDispatcherPriority.High, new DispatchedHandler(async() =>
     {
         if (item.data != null && item.data.Length > 31)
         {
             var weather = HeWeatherModel.Generate(item.data, settings.Preferences.DataSource);
             if (weather == null || weather.DailyForecast == null || weather.HourlyForecast == null)
             {
                 return;
             }
             await itemInit(item, weather);
             item.Updated = true;
             item.Succeed = true;
             item.LastUpdate = DateTime.Now;
         }
     }));
 }
Ejemplo n.º 5
0
        internal static string GenerateLockDetailDescription(HeWeatherModel model, bool isNight, TemperatureParameter parameter, DateTime desiredDate)
        {
            var todayIndex = Array.FindIndex(model.DailyForecast, x =>
            {
                return(x.Date.Date == desiredDate.Date);
            });

            if (isNight && desiredDate.Hour < 12)
            {
                todayIndex--;
            }
            if (todayIndex < 0)
            {
                todayIndex = 0;
            }
            var    主语    = model.NowWeather.Now.Condition;
            string zhuyu = loader.GetString("xianzai");

            if (Tools.Random.Next(200) >= 100)
            {
                if (isNight)
                {
                    主语    = model.DailyForecast[todayIndex].Condition.NightCond;
                    zhuyu = loader.GetString("wanjian");
                }
                else
                {
                    主语    = model.DailyForecast[todayIndex].Condition.DayCond;
                    zhuyu = loader.GetString("jintian");
                }
            }
            string        binyu;
            StringBuilder decoration = new StringBuilder();

            if (Tools.Random.Next(200) >= 100)
            {
                if (Tools.Random.Next(200) >= 100 && model.NowWeather.Temprature.Celsius < 0)
                {
                    decoration.Append(wendudi.SelectRandomString() + ", ");
                }
                else if (Tools.Random.Next(200) >= 100 && model.NowWeather.Temprature.Celsius > 25)
                {
                    decoration.Append(wendugao.SelectRandomString() + ", ");
                }
                if (Tools.Random.Next(200) >= 100 && model.DailyForecast[todayIndex].Humidity > 80)
                {
                    decoration.Append(shiduda[0] + ", ");
                }
                if (model.NowWeather.Visibility != null)
                {
                    if (Tools.Random.Next(200) >= 100 && model.NowWeather.Visibility.KM < 0.5)
                    {
                        decoration.Append(nengjiandudi[0] + ", ");
                    }
                }
                if (Tools.Random.Next(200) >= 100)
                {
                    switch (主语)
                    {
                    case WeatherCondition.unknown:
                        return(loader.GetString("unknown_weather"));

                    case WeatherCondition.sunny:
                    case WeatherCondition.few_clouds:
                    case WeatherCondition.partly_cloudy:
                    case WeatherCondition.calm:
                    case WeatherCondition.light_breeze:
                    case WeatherCondition.moderate:
                    case WeatherCondition.fresh_breeze:
                        decoration.Append(haotianqi.SelectRandomString() + ", ");
                        break;

                    case WeatherCondition.overcast:
                    case WeatherCondition.cloudy:
                    case WeatherCondition.windy:
                        break;

                    case WeatherCondition.strong_breeze:
                    case WeatherCondition.high_wind:
                        break;

                    case WeatherCondition.gale:
                    case WeatherCondition.strong_gale:
                    case WeatherCondition.storm:
                    case WeatherCondition.violent_storm:
                    case WeatherCondition.hurricane:
                    case WeatherCondition.tornado:
                    case WeatherCondition.tropical_storm:
                        decoration.Append(huaitianqi.SelectRandomString() + ", ");
                        break;

                    case WeatherCondition.shower_rain:
                        break;

                    case WeatherCondition.heavy_shower_rain:
                    case WeatherCondition.thundershower:
                    case WeatherCondition.heavy_thunderstorm:
                    case WeatherCondition.hail:
                        decoration.Append(huaitianqi.SelectRandomString() + ", ");
                        break;

                    case WeatherCondition.light_rain:
                    case WeatherCondition.moderate_rain:
                        break;

                    case WeatherCondition.heavy_rain:
                    case WeatherCondition.extreme_rain:
                        decoration.Append(huaitianqi.SelectRandomString() + ", ");
                        break;

                    case WeatherCondition.drizzle_rain:
                        break;

                    case WeatherCondition.storm_rain:
                    case WeatherCondition.heavy_storm_rain:
                    case WeatherCondition.severe_storm_rain:
                    case WeatherCondition.freezing_rain:
                        decoration.Append(huaitianqi.SelectRandomString() + ", ");
                        break;

                    case WeatherCondition.light_snow:
                        break;

                    case WeatherCondition.moderate_snow:
                    case WeatherCondition.heavy_snow:
                    case WeatherCondition.snowstorm:
                        decoration.Append(huaitianqi.SelectRandomString() + ", ");
                        break;

                    case WeatherCondition.sleet:
                    case WeatherCondition.rain_snow:
                    case WeatherCondition.shower_snow:
                    case WeatherCondition.snow_flurry:
                        break;

                    case WeatherCondition.mist:
                        break;

                    case WeatherCondition.foggy:
                    case WeatherCondition.haze:
                    case WeatherCondition.sand:
                    case WeatherCondition.dust:
                    case WeatherCondition.volcanic_ash:
                    case WeatherCondition.duststorm:
                    case WeatherCondition.sandstorm:
                        decoration.Append(huaitianqi.SelectRandomString() + ", ");
                        break;

                    case WeatherCondition.hot:
                    case WeatherCondition.cold:
                        break;

                    default:
                        break;
                    }
                }
            }
            switch (主语)
            {
            case WeatherCondition.unknown:
                return(loader.GetString("unknown_weather"));

            case WeatherCondition.sunny:
                binyu = sunny.SelectRandomString();
                break;

            case WeatherCondition.cloudy:
                binyu = cloudy.SelectRandomString();
                break;

            case WeatherCondition.few_clouds:
                binyu = few_clouds.SelectRandomString();
                break;

            case WeatherCondition.partly_cloudy:
                binyu = partly_cloudy.SelectRandomString();
                break;

            case WeatherCondition.overcast:
                binyu = overcast.SelectRandomString();
                break;

            case WeatherCondition.windy:
                binyu = windy.SelectRandomString();
                break;

            case WeatherCondition.calm:
            case WeatherCondition.light_breeze:
            case WeatherCondition.moderate:
            case WeatherCondition.fresh_breeze:
                binyu = breeze.SelectRandomString();
                break;

            case WeatherCondition.strong_breeze:
            case WeatherCondition.high_wind:
            case WeatherCondition.gale:
            case WeatherCondition.strong_gale:
                binyu = gale.SelectRandomString();
                break;

            case WeatherCondition.storm:
            case WeatherCondition.violent_storm:
            case WeatherCondition.hurricane:
            case WeatherCondition.tornado:
            case WeatherCondition.tropical_storm:
                binyu = storm.SelectRandomString();
                break;

            case WeatherCondition.shower_rain:
            case WeatherCondition.heavy_shower_rain:
                binyu = shower.SelectRandomString();
                break;

            case WeatherCondition.thundershower:
            case WeatherCondition.heavy_thunderstorm:
                binyu = thundershower.SelectRandomString();
                break;

            case WeatherCondition.hail:
                binyu = hail.SelectRandomString();
                break;

            case WeatherCondition.drizzle_rain:
            case WeatherCondition.light_rain:
            case WeatherCondition.moderate_rain:
                binyu = moderate_rain.SelectRandomString();
                break;

            case WeatherCondition.heavy_rain:
            case WeatherCondition.extreme_rain:
                binyu = heavy_rain.SelectRandomString();
                break;

            case WeatherCondition.storm_rain:
            case WeatherCondition.heavy_storm_rain:
            case WeatherCondition.severe_storm_rain:
                binyu = storm.SelectRandomString();
                break;

            case WeatherCondition.freezing_rain:
                binyu = freezing_rain.SelectRandomString();
                break;

            case WeatherCondition.light_snow:
            case WeatherCondition.moderate_snow:
                binyu = moderate_snow.SelectRandomString();
                break;

            case WeatherCondition.heavy_snow:
                binyu = heavy_snow.SelectRandomString();
                break;

            case WeatherCondition.snowstorm:
                binyu = snowstorm.SelectRandomString();
                break;

            case WeatherCondition.sleet:
            case WeatherCondition.rain_snow:
                binyu = sleet.SelectRandomString();
                break;

            case WeatherCondition.shower_snow:
            case WeatherCondition.snow_flurry:
                binyu = shower_snow.SelectRandomString();
                break;

            case WeatherCondition.mist:
                binyu = mist.SelectRandomString();
                break;

            case WeatherCondition.foggy:
                binyu = foggy.SelectRandomString();
                break;

            case WeatherCondition.haze:
                binyu = haze.SelectRandomString();
                break;

            case WeatherCondition.sand:
            case WeatherCondition.dust:
                binyu = dust.SelectRandomString();
                break;

            case WeatherCondition.volcanic_ash:
            case WeatherCondition.duststorm:
            case WeatherCondition.sandstorm:
                binyu = duststorm.SelectRandomString();
                break;

            case WeatherCondition.hot:
                binyu = loader.GetString("bianre");
                break;

            case WeatherCondition.cold:
                binyu = loader.GetString("bianleng");
                break;

            default: return(loader.GetString("unknown_weather"));
            }
            string nowtemp;
            string tomorrowtemp;

            switch (parameter)
            {
            case TemperatureParameter.Celsius:
                nowtemp      = model.DailyForecast[todayIndex].LowTemp.Celsius + "°~" + model.DailyForecast[todayIndex].HighTemp.Celsius + '°';
                tomorrowtemp = model.DailyForecast[todayIndex + 1].LowTemp.Celsius + "°~" + model.DailyForecast[todayIndex + 1].HighTemp.Celsius + '°';
                break;

            case TemperatureParameter.Fahrenheit:
                nowtemp      = model.DailyForecast[todayIndex + 0].LowTemp.Fahrenheit + "°~" + model.DailyForecast[todayIndex + 0].HighTemp.Fahrenheit + '°';
                tomorrowtemp = model.DailyForecast[todayIndex + 1].LowTemp.Fahrenheit + "°~" + model.DailyForecast[todayIndex + 1].HighTemp.Fahrenheit + '°';
                break;

            case TemperatureParameter.Kelvin:
                nowtemp      = model.DailyForecast[todayIndex + 0].LowTemp.Kelvin + "K~" + model.DailyForecast[todayIndex + 0].HighTemp.Kelvin + "K";
                tomorrowtemp = model.DailyForecast[todayIndex + 1].LowTemp.Kelvin + "K~" + model.DailyForecast[todayIndex + 1].HighTemp.Kelvin + "K";
                break;

            default:
                nowtemp      = model.DailyForecast[todayIndex + 0].LowTemp.Celsius + "°~" + model.DailyForecast[todayIndex + 0].HighTemp.Celsius + "°";
                tomorrowtemp = model.DailyForecast[todayIndex + 1].LowTemp.Celsius + "°~" + model.DailyForecast[todayIndex + 1].HighTemp.Celsius + "°";
                break;
            }
            string tomorrowcondition;
            var    converter = new ConditiontoTextConverter();

            tomorrowcondition = (string)converter.Convert(model.DailyForecast[todayIndex + 1].Condition.DayCond, null, null, null);
            return(string.Format(loader.GetString("LockDetail"), zhuyu, binyu, decoration, nowtemp, tomorrowcondition, tomorrowtemp));
        }
Ejemplo n.º 6
0
        public static string GenerateShortDescription(HeWeatherModel model, bool isNight)
        {
            var utcOffset  = model.Location.UpdateTime - model.Location.UtcTime;
            var current    = DateTimeHelper.ReviseLoc(utcOffset);
            var todayIndex = Array.FindIndex(model.DailyForecast, x =>
            {
                return(x.Date.Date == current.Date);
            });

            if (isNight && current.Hour < 12)
            {
                todayIndex--;
            }
            if (todayIndex < 0)
            {
                todayIndex = 0;
            }
            var    主语    = model.NowWeather.Now.Condition;
            string zhuyu = loader.GetString("xianzai");

            if (Tools.Random.Next(200) >= 100)
            {
                if (isNight)
                {
                    主语    = model.DailyForecast[todayIndex].Condition.NightCond;
                    zhuyu = loader.GetString("wanjian");
                }
                else
                {
                    主语    = model.DailyForecast[todayIndex].Condition.DayCond;
                    zhuyu = loader.GetString("jintian");
                }
            }
            string        binyu;
            StringBuilder decoration = new StringBuilder();

            if (Tools.Random.Next(200) >= 100)
            {
                if (Tools.Random.Next(200) >= 100 && model.NowWeather.Temprature.Celsius < 0)
                {
                    decoration.Append(wendudi.SelectRandomString() + ", ");
                }
                else if (Tools.Random.Next(200) >= 100 && model.NowWeather.Temprature.Celsius > 25)
                {
                    decoration.Append(wendugao.SelectRandomString() + ", ");
                }
                if (Tools.Random.Next(200) >= 100 && model.DailyForecast[todayIndex].Humidity > 80)
                {
                    decoration.Append(shiduda[0] + ", ");
                }
                if (model.NowWeather.Visibility != null)
                {
                    if (Tools.Random.Next(200) >= 100 && model.NowWeather.Visibility.KM < 0.5)
                    {
                        decoration.Append(nengjiandudi[0] + ", ");
                    }
                }
                if (Tools.Random.Next(200) >= 100)
                {
                    switch (主语)
                    {
                    case WeatherCondition.unknown:
                        return(loader.GetString("unknown_weather"));

                    case WeatherCondition.sunny:
                    case WeatherCondition.few_clouds:
                    case WeatherCondition.partly_cloudy:
                    case WeatherCondition.calm:
                    case WeatherCondition.light_breeze:
                    case WeatherCondition.moderate:
                    case WeatherCondition.fresh_breeze:
                        decoration.Append(haotianqi.SelectRandomString() + ", ");
                        break;

                    case WeatherCondition.overcast:
                    case WeatherCondition.cloudy:
                    case WeatherCondition.windy:
                        break;

                    case WeatherCondition.strong_breeze:
                    case WeatherCondition.high_wind:
                        break;

                    case WeatherCondition.gale:
                    case WeatherCondition.strong_gale:
                    case WeatherCondition.storm:
                    case WeatherCondition.violent_storm:
                    case WeatherCondition.hurricane:
                    case WeatherCondition.tornado:
                    case WeatherCondition.tropical_storm:
                        decoration.Append(huaitianqi.SelectRandomString() + ", ");
                        break;

                    case WeatherCondition.shower_rain:
                        break;

                    case WeatherCondition.heavy_shower_rain:
                    case WeatherCondition.thundershower:
                    case WeatherCondition.heavy_thunderstorm:
                    case WeatherCondition.hail:
                        decoration.Append(huaitianqi.SelectRandomString() + ", ");
                        break;

                    case WeatherCondition.light_rain:
                    case WeatherCondition.moderate_rain:
                        break;

                    case WeatherCondition.heavy_rain:
                    case WeatherCondition.extreme_rain:
                        decoration.Append(huaitianqi.SelectRandomString() + ", ");
                        break;

                    case WeatherCondition.drizzle_rain:
                        break;

                    case WeatherCondition.storm_rain:
                    case WeatherCondition.heavy_storm_rain:
                    case WeatherCondition.severe_storm_rain:
                    case WeatherCondition.freezing_rain:
                        decoration.Append(huaitianqi.SelectRandomString() + ", ");
                        break;

                    case WeatherCondition.light_snow:
                        break;

                    case WeatherCondition.moderate_snow:
                    case WeatherCondition.heavy_snow:
                    case WeatherCondition.snowstorm:
                        decoration.Append(huaitianqi.SelectRandomString() + ", ");
                        break;

                    case WeatherCondition.sleet:
                    case WeatherCondition.rain_snow:
                    case WeatherCondition.shower_snow:
                    case WeatherCondition.snow_flurry:
                        break;

                    case WeatherCondition.mist:
                        break;

                    case WeatherCondition.foggy:
                    case WeatherCondition.haze:
                    case WeatherCondition.sand:
                    case WeatherCondition.dust:
                    case WeatherCondition.volcanic_ash:
                    case WeatherCondition.duststorm:
                    case WeatherCondition.sandstorm:
                        decoration.Append(huaitianqi.SelectRandomString() + ", ");
                        break;

                    case WeatherCondition.hot:
                    case WeatherCondition.cold:
                        break;

                    default:
                        break;
                    }
                }
                if (decoration.ToString().EndsWith(", "))
                {
                    decoration.Remove(decoration.Length - 2, 2);
                }
            }
            switch (主语)
            {
            case WeatherCondition.unknown:
                return(loader.GetString("unknown_weather"));

            case WeatherCondition.sunny:
                binyu = sunny.SelectRandomString();
                break;

            case WeatherCondition.cloudy:
                binyu = cloudy.SelectRandomString();
                break;

            case WeatherCondition.few_clouds:
                binyu = few_clouds.SelectRandomString();
                break;

            case WeatherCondition.partly_cloudy:
                binyu = partly_cloudy.SelectRandomString();
                break;

            case WeatherCondition.overcast:
                binyu = overcast.SelectRandomString();
                break;

            case WeatherCondition.windy:
                binyu = windy.SelectRandomString();
                break;

            case WeatherCondition.calm:
            case WeatherCondition.light_breeze:
            case WeatherCondition.moderate:
            case WeatherCondition.fresh_breeze:
                binyu = breeze.SelectRandomString();
                break;

            case WeatherCondition.strong_breeze:
            case WeatherCondition.high_wind:
            case WeatherCondition.gale:
            case WeatherCondition.strong_gale:
                binyu = gale.SelectRandomString();
                break;

            case WeatherCondition.storm:
            case WeatherCondition.violent_storm:
            case WeatherCondition.hurricane:
            case WeatherCondition.tornado:
            case WeatherCondition.tropical_storm:
                binyu = storm.SelectRandomString();
                break;

            case WeatherCondition.shower_rain:
            case WeatherCondition.heavy_shower_rain:
                binyu = shower.SelectRandomString();
                break;

            case WeatherCondition.thundershower:
            case WeatherCondition.heavy_thunderstorm:
                binyu = thundershower.SelectRandomString();
                break;

            case WeatherCondition.hail:
                binyu = hail.SelectRandomString();
                break;

            case WeatherCondition.drizzle_rain:
            case WeatherCondition.light_rain:
            case WeatherCondition.moderate_rain:
                binyu = moderate_rain.SelectRandomString();
                break;

            case WeatherCondition.heavy_rain:
            case WeatherCondition.extreme_rain:
                binyu = heavy_rain.SelectRandomString();
                break;

            case WeatherCondition.storm_rain:
            case WeatherCondition.heavy_storm_rain:
            case WeatherCondition.severe_storm_rain:
                binyu = storm.SelectRandomString();
                break;

            case WeatherCondition.freezing_rain:
                binyu = freezing_rain.SelectRandomString();
                break;

            case WeatherCondition.light_snow:
            case WeatherCondition.moderate_snow:
                binyu = moderate_snow.SelectRandomString();
                break;

            case WeatherCondition.heavy_snow:
                binyu = heavy_snow.SelectRandomString();
                break;

            case WeatherCondition.snowstorm:
                binyu = snowstorm.SelectRandomString();
                break;

            case WeatherCondition.sleet:
            case WeatherCondition.rain_snow:
                binyu = sleet.SelectRandomString();
                break;

            case WeatherCondition.shower_snow:
            case WeatherCondition.snow_flurry:
                binyu = shower_snow.SelectRandomString();
                break;

            case WeatherCondition.mist:
                binyu = mist.SelectRandomString();
                break;

            case WeatherCondition.foggy:
                binyu = foggy.SelectRandomString();
                break;

            case WeatherCondition.haze:
                binyu = haze.SelectRandomString();
                break;

            case WeatherCondition.sand:
            case WeatherCondition.dust:
                binyu = dust.SelectRandomString();
                break;

            case WeatherCondition.volcanic_ash:
            case WeatherCondition.duststorm:
            case WeatherCondition.sandstorm:
                binyu = duststorm.SelectRandomString();
                break;

            case WeatherCondition.hot:
                binyu = loader.GetString("bianre");
                break;

            case WeatherCondition.cold:
                binyu = loader.GetString("bianleng");
                break;

            default: return(loader.GetString("unknown_weather"));
            }
            return(string.Format(loader.GetString("Glance"), zhuyu, binyu, decoration));
        }
Ejemplo n.º 7
0
        internal async void Pin(IList <object> selectedItems)
        {
            if (selectedItems == null || selectedItems.Count == 0)
            {
                return;
            }

            foreach (CityViewModel item in selectedItems)
            {
                SecondaryTile s    = new SecondaryTile(item.Id, item.City, item.Id, new Uri("ms-appx:///Assets/Square150x150Logo.png"), TileSize.Default);
                var           elem = s.VisualElements;
                elem.ShowNameOnSquare150x150Logo = true;
                elem.ShowNameOnSquare310x310Logo = true;
                elem.ShowNameOnWide310x150Logo   = true;
                elem.Square310x310Logo           = new Uri("ms-appx:///Assets/Square310x310Logo.png");
                elem.Square44x44Logo             = new Uri("ms-appx:///Assets/Square44x44Logo.png");
                elem.Square71x71Logo             = new Uri("ms-appx:///Assets/Square71x71Logo.png");
                elem.Wide310x150Logo             = new Uri("ms-appx:///Assets/Wide310x150Logo.png");
                await s.RequestCreateAsync();

                var index = Array.FindIndex(settings.Cities.SavedCities, x =>
                {
                    return(x.Id == item.Id);
                });
                CitySettingsModel currentCity;
                if (index == -1 && settings.Cities.LocatedCity != null)
                {
                    settings.Cities.LocatedCity.IsPinned = true;
                    currentCity = settings.Cities.LocatedCity;
                }
                else
                {
                    settings.Cities.SavedCities[index].IsPinned = true;
                    currentCity = settings.Cities.SavedCities[index];
                }
                var t = ThreadPool.RunAsync(async(work) =>
                {
                    string resstr;
                    try
                    {
                        resstr = await settings.Cities.ReadDataAsync(item.Id.IsNullorEmpty() ? item.City : item.Id, settings.Preferences.DataSource);
                    }
                    catch (Exception)
                    {
                        resstr = await Request.GetRequestAsync(settings, item.Id, item.City, item.longitude, item.latitude, item.zmw);
                    }
                    if (!resstr.IsNullorEmpty())
                    {
                        var weather = HeWeatherModel.Generate(resstr, settings.Preferences.DataSource);
                        if (weather == null || weather.DailyForecast == null || weather.HourlyForecast == null)
                        {
                            return;
                        }
                        var utcOffset  = weather.Location.UpdateTime - weather.Location.UtcTime;
                        var current    = DateTimeHelper.ReviseLoc(utcOffset);
                        var todayIndex = Array.FindIndex(weather.DailyForecast, x =>
                        {
                            return(x.Date.Date == current.Date);
                        });
                        var hourIndex = Array.FindIndex(weather.HourlyForecast, x =>
                        {
                            return((x.DateTime - current).TotalSeconds > 0);
                        });
                        if (todayIndex < 0)
                        {
                            todayIndex = 0;
                        }
                        if (hourIndex < 0)
                        {
                            hourIndex = 0;
                        }
                        var isNight    = Generator.CalcIsNight(weather.Location.UpdateTime, weather.DailyForecast[todayIndex].SunRise, weather.DailyForecast[todayIndex].SunSet, new Models.Location(currentCity.Latitude, currentCity.Longitude));
                        var glanceFull = Glance.GenerateGlanceDescription(weather, isNight, settings.Preferences.TemperatureParameter, DateTime.Now);
                        var glance     = Glance.GenerateShortDescription(weather, isNight);
                        var uri        = await settings.Immersive.GetCurrentBackgroundAsync(weather.NowWeather.Now.Condition, isNight);
                        Sender.CreateSubTileNotification(await Generator.CreateAll(currentCity, weather, current), item.Id);
                    }
                });
            }
        }
Ejemplo n.º 8
0
        private async Task Init(SettingsModel settings, CitySettingsModel currentCity)
        {
            string resstr = await Request.GetRequestAsync(settings, currentCity);

            if (!resstr.IsNullorEmpty())
            {
                var fetchresult = HeWeatherModel.Generate(resstr, settings.Preferences.DataSource);
                if (fetchresult == null || fetchresult.DailyForecast == null || fetchresult.HourlyForecast == null)
                {
                    return;
                }
                var utcOffset = fetchresult.Location.UpdateTime - fetchresult.Location.UtcTime;
                var current   = DateTimeHelper.ReviseLoc(utcOffset);
                try
                {
                    Sender.CreateMainTileQueue(await Generator.CreateAll(currentCity, fetchresult, current));
                }
                catch (Exception)
                {
                }

                try
                {
                    if (UserProfilePersonalizationSettings.IsSupported() && settings.Preferences.SetWallPaper)
                    {
                        var todayIndex = Array.FindIndex(fetchresult.DailyForecast, x =>
                        {
                            return(x.Date.Date == current.Date);
                        });
                        if (current.Hour <= 7)
                        {
                            todayIndex--;
                        }
                        if (todayIndex < 0)
                        {
                            todayIndex = 0;
                        }
                        TimeSpan sunRise, sunSet;
                        if (fetchresult.DailyForecast[todayIndex].SunRise == default(TimeSpan) || fetchresult.DailyForecast[todayIndex].SunSet == default(TimeSpan))
                        {
                            sunRise = Core.LunarCalendar.SunRiseSet.GetRise(new Models.Location(currentCity.Latitude, currentCity.Longitude), current);
                            sunSet  = Core.LunarCalendar.SunRiseSet.GetSet(new Models.Location(currentCity.Latitude, currentCity.Longitude), current);
                        }
                        else
                        {
                            sunRise = fetchresult.DailyForecast[todayIndex].SunRise;
                            sunSet  = fetchresult.DailyForecast[todayIndex].SunSet;
                        }
                        var file = await FileIOHelper.GetFilebyUriAsync(await settings.Immersive.GetCurrentBackgroundAsync(fetchresult.NowWeather.Now.Condition, WeatherModel.CalculateIsNight(current, sunRise, sunSet)));

                        var lFile = await FileIOHelper.CreateWallPaperFileAsync(Guid.NewGuid().ToString() + ".png");

                        var    d           = PointerDevice.GetPointerDevices();
                        var    m           = d.ToArray();
                        var    scaleFactor = DisplayInformation.GetForCurrentView().RawPixelsPerViewPixel;
                        var    size        = new Size(m[0].PhysicalDeviceRect.Width, m[0].PhysicalDeviceRect.Height);
                        var    ratio       = size.Height / size.Width;
                        var    cropSize    = new Size();
                        double scale;
                        var    startPoint = new Point();
                        using (var stream = await file.OpenReadAsync())
                        {
                            var bitmap = new BitmapImage();
                            await bitmap.SetSourceAsync(stream);

                            var width  = bitmap.PixelWidth;
                            var height = bitmap.PixelHeight;
                            var center = new Point(width / 2, height / 2);
                            if (width * ratio >= height)
                            {
                                cropSize.Width  = height / ratio;
                                cropSize.Height = height;
                                scale           = size.Height / height;
                            }
                            else
                            {
                                cropSize.Width  = width;
                                cropSize.Height = width * ratio;
                                scale           = size.Width / width;
                            }

                            startPoint.X = center.X - cropSize.Width / 2;
                            startPoint.Y = center.Y - cropSize.Height / 2;
                        }
                        await ImagingHelper.CropandScaleAsync(file, lFile, startPoint, cropSize, scale);

                        var uc = await ImagingHelper.SetWallpaperAsync(lFile);
                    }
                }
                catch (Exception)
                {
                }

                if (settings.Preferences.EnableMorning)
                {
                    var shu1 = settings.Preferences.MorningNoteTime.TotalHours;

                    var tomorrow8 = DateTime.Now.Hour > shu1 ? (DateTime.Today.AddDays(1)).AddHours(shu1) : (DateTime.Today.AddHours(shu1));

                    try
                    {
                        Sender.CreateScheduledToastNotification(await(Generator.CreateToast(fetchresult, currentCity, settings, DateTimeHelper.ReviseLoc(tomorrow8, utcOffset))), tomorrow8, "MorningToast");
                    }
                    catch (Exception)
                    {
                    }
                }
                if (settings.Preferences.EnableEvening)
                {
                    var shu2       = settings.Preferences.EveningNoteTime.TotalHours;
                    var tomorrow20 = DateTime.Now.Hour > shu2 ? (DateTime.Today.AddDays(1)).AddHours(shu2) : (DateTime.Today.AddHours(shu2));
                    try
                    {
                        Sender.CreateScheduledToastNotification(await(Generator.CreateToast(fetchresult, currentCity, settings, DateTimeHelper.ReviseLoc(tomorrow20, utcOffset))), tomorrow20, "EveningToast");
                    }
                    catch (Exception)
                    {
                    }
                }
                if (settings.Preferences.EnableAlarm)
                {
                    if (!fetchresult.Alarms.IsNullorEmpty() && (DateTime.Now - settings.Preferences.LastAlertTime).TotalDays > 1)
                    {
                        Sender.CreateBadge(Generator.GenerateAlertBadge());
                        Sender.CreateToast(Generator.CreateAlertToast(fetchresult, currentCity).GetXml());
                    }
                    else
                    {
                        Sender.ClearBadge();
                    }
                    var str = Generator.CalculateWeatherAlarm(fetchresult, currentCity, settings, DateTimeHelper.ReviseLoc(DateTime.Now, utcOffset));
                    if (!str.IsNullorEmpty() && str.Length > 1 && (DateTime.Now - settings.Preferences.LastAlarmTime).TotalDays > 1)
                    {
                        Sender.CreateToast(Generator.CreateAlarmToast(str, currentCity).GetXml());
                    }
                }
                await settings.Cities.SaveDataAsync(currentCity.Id.IsNullorEmpty()?currentCity.City : currentCity.Id, resstr, settings.Preferences.DataSource);

                currentCity.Update();
                if (settings.Cities.CurrentIndex != -1)
                {
                    settings.Cities.SavedCities[settings.Cities.CurrentIndex] = currentCity;
                }
                else
                {
                    settings.Cities.LocatedCity = currentCity;
                }
                settings.Cities.Save();
            }
        }
Ejemplo n.º 9
0
        private async Task FetchDataAsync()
        {
            await SearchExistingDataAsync();

            string resstr;

            if (currentCityModel.Id != null)
            {
                try
                {
                    if (!storedDatas.IsNullorEmpty())
                    {
                        resstr      = storedDatas;
                        fetchresult = HeWeatherModel.Generate(resstr, settings.Preferences.DataSource);
                        return;
                    }
                    resstr = await Core.Models.Request.GetRequestAsync(settings, currentCityModel);

                    if (resstr.IsNullorEmpty())
                    {
                        await Task.Delay(1000);

                        this.OnFetchDataFailed(this, new FetchDataFailedEventArgs("Network_Error"));
                        return;
                    }
                    fetchresult = HeWeatherModel.Generate(resstr, settings.Preferences.DataSource);
                    if (fetchresult.Status != HeWeatherStatus.ok)
                    {
                        await Task.Delay(1000);

                        this.OnFetchDataFailed(this, new FetchDataFailedEventArgs("Service_Unavailable"));
                        return;
                    }
                    var task = ThreadPool.RunAsync(async(work) =>
                    {
                        await settings.Cities.SaveDataAsync(currentCityModel.Id.IsNullorEmpty() ? currentCityModel.City : currentCityModel.Id, resstr, settings.Preferences.DataSource);
                        currentCityModel.Update();
                        if (settings.Cities.CurrentIndex != -1)
                        {
                            settings.Cities.SavedCities[settings.Cities.CurrentIndex] = currentCityModel;
                        }
                        else
                        {
                            settings.Cities.LocatedCity = currentCityModel;
                        }
                        settings.Cities.Save();
                    });
                    return;
                }
                catch (Exception)
                {
                    await Task.Delay(1000);

                    this.OnFetchDataFailed(this, new FetchDataFailedEventArgs("Service_Unavailable"));
                    return;
                }
            }
            else
            {
                throw new NullReferenceException();
            }
        }