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(); } }
private async Task InitialViewModel() { CurrentTime = DateTime.Now; UpdateTime = fetchresult.Location.UpdateTime; utcOffset = UpdateTime - fetchresult.Location.UtcTime; RefreshCurrentTime(); CurrentTimeRefreshTask(); todayIndex = Array.FindIndex(fetchresult.DailyForecast, x => { return(x.Date.Date == CurrentTime.Date); }); nowHourIndex = Array.FindIndex(fetchresult.HourlyForecast, x => { return((x.DateTime - CurrentTime).TotalSeconds > 0); }); if (CurrentTime.Hour <= sunRise.Hours) { todayIndex--; } if (todayIndex < 0) { todayIndex = 0; } if (nowHourIndex < 0) { nowHourIndex = 0; } if (fetchresult.DailyForecast[todayIndex].SunRise == default(TimeSpan) || fetchresult.DailyForecast[todayIndex].SunSet == default(TimeSpan)) { sunRise = Core.LunarCalendar.SunRiseSet.GetRise(new Models.Location(currentCityModel.Latitude, currentCityModel.Longitude), CurrentTime); sunSet = Core.LunarCalendar.SunRiseSet.GetSet(new Models.Location(currentCityModel.Latitude, currentCityModel.Longitude), CurrentTime); } else { sunRise = fetchresult.DailyForecast[todayIndex].SunRise; sunSet = fetchresult.DailyForecast[todayIndex].SunSet; } City = currentCityModel.City; isNight = WeatherModel.CalculateIsNight(CurrentTime, sunRise, sunSet); this.Glance = Models.Glance.GenerateGlanceDescription(fetchresult, isNight, TemperatureDecoratorConverter.Parameter, DateTime.Now); CityGlance = (City + " " + Glance); Date = CurrentTime.ToString(settings.Preferences.GetDateFormat()); var calendar = new CalendarInfo(CurrentTime); var loader = new ResourceLoader(); LunarCalendar = settings.Preferences.UseLunarCalendarPrimary ? (("农历 " + calendar.LunarYearSexagenary + "年" + calendar.LunarMonthText + "月" + calendar.LunarDayText + " " + calendar.SolarTermStr).Trim()) : string.Empty; Hum = ": " + fetchresult.HourlyForecast[nowHourIndex].Humidity + "%"; Pop = ": " + fetchresult.HourlyForecast[nowHourIndex].Pop + "%"; Pcpn = ": " + fetchresult.NowWeather.Precipitation + " mm"; var v = new VisibilityConverter(); Vis = ": " + (fetchresult.NowWeather.Visibility == null ? "N/A" : v.Convert(fetchresult.NowWeather.Visibility, null, null, null)); var w = new WindSpeedConverter(); Scale = ": " + (fetchresult.NowWeather.Wind == null ? "N/A" : w.Convert(fetchresult.NowWeather.Wind, null, null, null)); var d = new WindDirectionConverter(); Dir = ": " + (fetchresult.NowWeather.Wind == null ? "N/A" : d.Convert(fetchresult.NowWeather.Wind, null, null, null)); var p = new PressureConverter(); Pressure = ": " + (fetchresult.NowWeather.Pressure == null ? "N/A" : p.Convert(fetchresult.NowWeather.Pressure, null, null, null)); var t = new TimeSpanConverter(); SunRise = ": " + (string)t.Convert(sunRise, null, null, null); SunSet = ": " + (string)t.Convert(sunSet, null, null, null); this.Location = ": " + new Models.Location(currentCityModel.Latitude, currentCityModel.Longitude).ToString(); var off = utcOffset.Hours; Offset = ": UTC" + (off >= 0 ? " +" : " -") + t.Convert(utcOffset, null, null, null); var uri = await settings.Immersive.GetCurrentBackgroundAsync(fetchresult.NowWeather.Now.Condition, isNight); if (uri != null) { try { CurrentBG = new BitmapImage(uri); } catch (Exception) { } } List <KeyValuePair <int, double> > doubles0 = new List <KeyValuePair <int, double> >(); List <KeyValuePair <int, double> > doubles1 = new List <KeyValuePair <int, double> >(); List <KeyValuePair <int, double> > doubles2 = new List <KeyValuePair <int, double> >(); List <KeyValuePair <int, double> > doubles3 = new List <KeyValuePair <int, double> >(); List <KeyValuePair <int, double> > doubles5 = new List <KeyValuePair <int, double> >(); List <KeyValuePair <int, double> > doubles4 = new List <KeyValuePair <int, double> >(); if (!fetchresult.HourlyForecast.IsNullorEmpty()) { for (int i = nowHourIndex + 1; i < fetchresult.HourlyForecast.Length; i++) { if (fetchresult.HourlyForecast[i].Temprature != null) { doubles0.Add(new KeyValuePair <int, double>(i, fetchresult.HourlyForecast[i].Temprature.ActualDouble(TemperatureDecoratorConverter.Parameter))); } if (fetchresult.HourlyForecast[i].Pop != default(uint)) { doubles1.Add(new KeyValuePair <int, double>(i, fetchresult.HourlyForecast[i].Pop)); } if (fetchresult.HourlyForecast[i].Wind != null) { doubles4.Add(new KeyValuePair <int, double>(i, fetchresult.HourlyForecast[i].Wind.Speed.ActualDouble(WindSpeedConverter.SpeedParameter))); } } var sb = new StringBuilder(); if (doubles0 != null && doubles0.Count > 1) { GetHourlyXText(doubles0, sb); Forecasts.Add(new GraphViewModel(doubles0, null, new SolidColorBrush(Palette.GetRandom()), new SolidColorBrush(Palette.Cyan), string.Format(loader.GetString("HourlyDetailsTemperature"), doubles0.Count), Temperature.GetFormat(TemperatureDecoratorConverter.Parameter), -280, 9999, sb.ToString())); } if (doubles1 != null && doubles1.Count > 1) { GetHourlyXText(doubles1, sb); Forecasts.Add(new GraphViewModel(doubles1, null, new SolidColorBrush(Palette.GetRandom()), new SolidColorBrush(Colors.Transparent), string.Format(loader.GetString("HourlyDetailsPop"), doubles1.Count), "%", 0, 100, sb.ToString())); } if (doubles4 != null && doubles4.Count > 1) { GetHourlyXText(doubles4, sb); Forecasts.Add(new GraphViewModel(doubles4, null, new SolidColorBrush(Palette.GetRandom()), new SolidColorBrush(Colors.Transparent), string.Format(loader.GetString("HourlyDetailsWind"), doubles4.Count), Wind.GetSpeedFormat(WindSpeedConverter.SpeedParameter), 0, 1000, sb.ToString())); } } doubles0.Clear(); doubles1.Clear(); doubles2.Clear(); doubles3.Clear(); doubles4.Clear(); doubles5.Clear(); if (!fetchresult.DailyForecast.IsNullorEmpty()) { for (int i = todayIndex + 1; i < fetchresult.DailyForecast.Length; i++) { if (fetchresult.DailyForecast[i].HighTemp != null && fetchresult.DailyForecast[i].LowTemp != null) { doubles0.Add(new KeyValuePair <int, double>(i, fetchresult.DailyForecast[i].HighTemp.ActualDouble(TemperatureDecoratorConverter.Parameter))); doubles1.Add(new KeyValuePair <int, double>(i, fetchresult.DailyForecast[i].LowTemp.ActualDouble(TemperatureDecoratorConverter.Parameter))); } if (fetchresult.DailyForecast[i].Pop != default(uint)) { doubles2.Add(new KeyValuePair <int, double>(i, fetchresult.DailyForecast[i].Pop)); } if (fetchresult.DailyForecast[i].Precipitation != default(float)) { doubles3.Add(new KeyValuePair <int, double>(i, fetchresult.DailyForecast[i].Precipitation)); } if (fetchresult.DailyForecast[i].Visibility != null) { doubles5.Add(new KeyValuePair <int, double>(i, fetchresult.DailyForecast[i].Visibility.ActualDouble(VisibilityConverter.LengthParameter))); } if (fetchresult.DailyForecast[i].Wind != null) { doubles4.Add(new KeyValuePair <int, double>(i, fetchresult.DailyForecast[i].Wind.Speed.ActualDouble(WindSpeedConverter.SpeedParameter))); } } var sb = new StringBuilder(); if (!doubles0.IsNullorEmpty() && !doubles1.IsNullorEmpty()) { GetDailyXText(doubles0, sb); Forecasts.Add(new GraphViewModel(doubles0, doubles1, new SolidColorBrush(Palette.Orange), new SolidColorBrush(Palette.Cyan), string.Format(loader.GetString("DailyDetailsTemp"), doubles0.Count), Temperature.GetFormat(TemperatureDecoratorConverter.Parameter), -280, 9999, sb.ToString())); } if (doubles2 != null && doubles2.Count > 1) { GetDailyXText(doubles2, sb); Forecasts.Add(new GraphViewModel(doubles2, null, new SolidColorBrush(Palette.GetRandom()), new SolidColorBrush(Colors.Transparent), string.Format(loader.GetString("DailyDetailsPop"), doubles2.Count), "%", 0, 100, sb.ToString())); } if (doubles3 != null && doubles3.Count > 1) { GetDailyXText(doubles3, sb); Forecasts.Add(new GraphViewModel(doubles3, null, new SolidColorBrush(Palette.GetRandom()), new SolidColorBrush(Colors.Transparent), string.Format(loader.GetString("DailyDetailsPrep"), doubles3.Count), "mm", 0, 100, sb.ToString())); } if (doubles5 != null && doubles5.Count > 1) { GetDailyXText(doubles5, sb); Forecasts.Add(new GraphViewModel(doubles5, null, new SolidColorBrush(Palette.GetRandom()), new SolidColorBrush(Colors.Transparent), string.Format(loader.GetString("DailyDetailsVis"), doubles5.Count), Length.GetFormat(VisibilityConverter.LengthParameter), 0, 1000, sb.ToString())); } if (doubles4 != null && doubles4.Count > 1) { GetDailyXText(doubles4, sb); Forecasts.Add(new GraphViewModel(doubles4, null, new SolidColorBrush(Palette.GetRandom()), new SolidColorBrush(Colors.Transparent), string.Format(loader.GetString("DailyDetailsWind"), doubles4.Count), Wind.GetSpeedFormat(WindSpeedConverter.SpeedParameter), 0, 1000, sb.ToString())); } } OnFetchDataComplete(); }