Example #1
0
        private async void MModel_FetchDataComplete(object sender, FetchDataCompleteEventArgs e)
        {
            var loader = new ResourceLoader();

            UpdateIndText.Text  = loader.GetString("RefreshComplete");
            LoadingDot.IsActive = false;
            Forecast0.SetCondition(Context.Forecast0, Context.IsNight);
            Forecast1.SetCondition(Context.Forecast1, Context.IsNight);
            Forecast2.SetCondition(Context.Forecast2, Context.IsNight);
            Forecast3.SetCondition(Context.Forecast3, Context.IsNight);
            Forecast4.SetCondition(Context.Forecast4, Context.IsNight);
            if ((Context.Condition == WeatherCondition.sunny) || (Context.Condition == WeatherCondition.windy) ||
                (Context.Condition == WeatherCondition.calm) ||
                (Context.Condition == WeatherCondition.light_breeze) ||
                (Context.Condition == WeatherCondition.moderate) ||
                (Context.Condition == WeatherCondition.fresh_breeze) ||
                (Context.Condition == WeatherCondition.strong_breeze) ||
                (Context.Condition == WeatherCondition.high_wind) ||
                (Context.Condition == WeatherCondition.gale))
            {
                if (!Context.IsNight)
                {
                    var s = new SolidColorBrush(Colors.Black);
                    baba.ChangeColor(s);
                    RefreshButton.Foreground = s;
                }
                else
                {
                    baba.ChangeColor(new SolidColorBrush(Colors.White));
                    RefreshButton.Foreground = new SolidColorBrush(Colors.White);
                }
            }
            else
            {
                baba.ChangeColor(new SolidColorBrush(Colors.White));
                RefreshButton.Foreground = new SolidColorBrush(Colors.White);
            }
            WeatherCanvas.ChangeCondition(Context.Condition, Context.IsNight, Context.IsSummer);
            if (Context.Aqi == null)
            {
                AQIPanel.Visibility = Visibility.Collapsed;
            }
            if (Context.Comf == null && Context.Cw == null && Context.Drsg == null)
            {
                SuggestionPanel.Visibility = Visibility.Collapsed;
            }
            switch (Context.source)
            {
            case DataSource.HeWeather:
                DataSourceImage.Source = new BitmapImage(new Uri("http://heweather.com/weather/images/logo.jpg"));
                DataSourceContent.Text = loader.GetString("HeWeather");
                break;

            case DataSource.Caiyun:
                DataSourceImage.Source = new BitmapImage(new Uri("ms-appx:///Assets/Logos/Caiyun.png"));
                DataSourceContent.Text = loader.GetString("CaiyunWeather");
                break;

            case DataSource.Wunderground:
                DataSourceImage.Source = new BitmapImage(new Uri("ms-appx:///Assets/Logos/Wunder.png"));
                DataSourceContent.Text = string.Empty;
                break;

            default:
                break;
            }
            baba.ChangeCondition(Context.Condition, Context.IsNight, Context.City, Context.NowL, Context.NowH);
            ScrollableRoot.RefreshComplete();
            if (LoadingDot.Visibility == Visibility.Collapsed)
            {
                TempraturePathAnimation.Completed += (s, v) =>
                {
                    RefreshCompleteAni.Begin();
                };
                TempraturePathAnimation.Begin();
                AQIAni.Begin();
                DetailGrid0Play();
                DetailGrid1Play();
                DetailGrid2Play();
                DetailGrid3Play();
                DetailGrid4Play();
                DetailGrid6Play();
                DetailGrid7Play();
            }

            try
            {
                if (Windows.System.UserProfile.UserProfilePersonalizationSettings.IsSupported() && Context.SetWallPaper)
                {
                    var file = await FileIOHelper.GetFilebyUriAsync(await Context.GetCurrentBackgroundAsync());

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

                    var d           = Windows.Devices.Input.PointerDevice.GetPointerDevices();
                    var m           = d.ToArray();
                    var scaleFactor = Windows.Graphics.Display.DisplayInformation.GetForCurrentView().RawPixelsPerViewPixel;
                    var size        = new Size(m[0].PhysicalDeviceRect.Width, m[0].PhysicalDeviceRect.Height);
                    var ratio       = size.Height / size.Width;
                    size.Height *= scaleFactor;
                    size.Width  *= scaleFactor;
                    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)
            {
            }
        }
        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();
            }
        }