Ejemplo n.º 1
0
        private Task RefreshPlusTile(string offset, GeoLocationCity city)
        {
            int offsetHour = int.Parse(offset);
            var date       = DateTime.Now.AddHours(offsetHour);

            return(LiveTileWeatherProvider.GetForecast(city, date)
                   .ContinueWith <Task>(task =>
            {
                var tcs = new TaskCompletionSource <bool>(TaskCreationOptions.AttachedToParent);

                if (task.IsCompleted)
                {
                    var result = task.Result.FirstOrDefault(x => x.Df.Hour == date.Hour);
                    if (result != null)
                    {
                        var plusTile = CreateTileItem(city, result, TileType.PlusTile);
                        plusTile.Offset = offsetHour;

                        Deployment.Current.Dispatcher.BeginInvoke(
                            () => TileGenerator_RefreshTile(plusTile, () => tcs.SetResult(true)));
                    }
                }

                return tcs.Task;
            }));
        }
Ejemplo n.º 2
0
        private void SelectionChangedExecute(GeoLocationCity city)
        {
            var uri = string.Format(AppSettings.MainPageAddress, city.PostalCode, city.Country);

            Deployment.Current.Dispatcher.BeginInvoke(
                () => App.CurrentRootVisual.Navigate(new Uri(uri, UriKind.Relative)));
        }
Ejemplo n.º 3
0
 private void FavoriteItemSelectedExecute(GeoLocationCity city)
 {
     if (city != null)
     {
         ResolveLocation(city.PostalCode.ToString(), city.Country);
         PivotSelectedIndex = 0;
     }
 }
Ejemplo n.º 4
0
 private void RemoveFromFavoritesExecute(GeoLocationCity city)
 {
     if ((city != null) && (city is GeoLocationCity) && (Favorites != null))
     {
         Favorites.Remove(city);
         SaveFavorites();
     }
 }
Ejemplo n.º 5
0
 private TileItem CreateTileItem(GeoLocationCity city, LiveTileWeatherResponse response, TileType type)
 {
     return(new TileItem(city)
     {
         TileType = type,
         LocationName = city.Name,
         Title = string.Format(Properties.Resources.LatestTitle, response.Df),
         CloudImage = ImageIdToUri(response.S),
         Temperature = response.T + '°',
         Description = response.Prosa,
     });
 }
Ejemplo n.º 6
0
        private Task RefreshTile(ShellTile tile, TileType type)
        {
            var queryString = tile.NavigationUri.ToString();

            queryString = queryString.Substring(queryString.IndexOf('?'));

            var segments = Utils.ParseQueryString(queryString);

            int postalCode = 0;

            if (int.TryParse(segments["PostalCode"], out postalCode))
            {
                var country = segments["Country"];
                var offset  = segments["Offset"];

                GeoLocationCity city = null;

                switch (country)
                {
                case Denmark.Name:
                    city = Denmark.PostalCodes[postalCode];
                    break;

                case Greenland.Name:
                    city = Greenland.PostalCodes[postalCode];
                    break;

                case FaroeIslands.Name:
                    city = FaroeIslands.PostalCodes[postalCode];
                    break;
                }

                if (city != null)
                {
                    switch (type)
                    {
                    case TileType.Latest:
                        return(RefreshLatestTile(city));

                    case TileType.Custom:
                        return(RefreshCustomTile(offset, city));

                    case TileType.PlusTile:
                        return(RefreshPlusTile(offset, city));
                    }
                }
            }

            throw new InvalidOperationException("Attempted to refresh a non-existant tile");
        }
Ejemplo n.º 7
0
        public static Task<List<LiveTileWeatherResponse>> GetForecast(GeoLocationCity city, DateTime date)
        {
            if (city == null)
                throw new ArgumentNullException("city");

            var client = new RestClient("http://www.dr.dk/tjenester/drvejret/");
            var request = new RestRequest();
            request.DateFormat = "yyyyMMddHHmm";
            request.Resource = "Forecast/{latitude}/{longitude}/{date}";
            request.AddUrlSegment("latitude", city.Location.Latitude.ToString(CultureInfo.InvariantCulture));
            request.AddUrlSegment("longitude", city.Location.Longitude.ToString(CultureInfo.InvariantCulture));
            request.AddUrlSegment("date", date.ToString("yyyyMMdd"));

            return client.ExecuteTask<List<LiveTileWeatherResponse>>(request);
        }
        public async Task <GeoLocationCity> PostalCodeToLocationAsync(int postalCode)
        {
            var tcs    = new TaskCompletionSource <GeoLocationCity>();
            var result = await TaskEx.Run <GeoLocationCity>(() =>
            {
                var query = PostalCodes.Where(item => item.PostalCode == postalCode).FirstOrDefault();
                if (query == null)
                {
                    return(GeoLocationCity.UnkownCity());
                }
                return(query);
            });

            return(result);
        }
        public async Task <GeoLocationCity> LocationToPostalCodeAsync(GeoCoordinate location)
        {
            var tcs    = new TaskCompletionSource <GeoLocationCity>();
            var result = await TaskEx.Run <GeoLocationCity>(() =>
            {
                var query = PostalCodes
                            .OrderBy(item => item.Location.GetDistanceTo(location))
                            .FirstOrDefault();
                if (query == null)
                {
                    return(GeoLocationCity.UnkownCity());
                }
                return(query);
            });

            return(result);
        }
Ejemplo n.º 10
0
        private void AddToFavoritesExecute()
        {
            if (CurrentAddress == null)
            {
                return;
            }

            int postalCode = 0;

            if (int.TryParse(CurrentAddress.PostalCode, out postalCode))
            {
                GeoLocationCity city = null;

                try
                {
                    switch (CurrentAddress.CountryRegion)
                    {
                    case Greenland.Name:
                        city = Greenland.PostalCodes[postalCode];
                        break;

                    case FaroeIslands.Name:
                        city = FaroeIslands.PostalCodes[postalCode];
                        break;

                    case Denmark.Name:
                        city = Denmark.PostalCodes[postalCode];
                        break;

                    default:
                        city = Denmark.PostalCodes[Denmark.DefaultPostalCode];
                        break;
                    }
                }
                catch (Exception)
                {
                    city = Denmark.PostalCodes[Denmark.DefaultPostalCode];
                }

                if (city != null && Favorites.Any(c => c.Name == city.Name) == false)
                {
                    Favorites.Add(city);
                    SaveFavorites();
                }
            }
        }
Ejemplo n.º 11
0
        public static Task <List <LiveTileWeatherResponse> > GetForecast(GeoLocationCity city, DateTime date)
        {
            if (city == null)
            {
                throw new ArgumentNullException("city");
            }

            var client  = new RestClient("http://www.dr.dk/tjenester/drvejret/");
            var request = new RestRequest();

            request.DateFormat = "yyyyMMddHHmm";
            request.Resource   = "Forecast/{latitude}/{longitude}/{date}";
            request.AddUrlSegment("latitude", city.Location.Latitude.ToString(CultureInfo.InvariantCulture));
            request.AddUrlSegment("longitude", city.Location.Longitude.ToString(CultureInfo.InvariantCulture));
            request.AddUrlSegment("date", date.ToString("yyyyMMdd"));

            return(client.ExecuteTask <List <LiveTileWeatherResponse> >(request));
        }
Ejemplo n.º 12
0
        private void AddLatestTile(GeoLocationCity city, List <LiveTileWeatherResponse> result)
        {
            var now = result.FirstOrDefault(x => x.Df.Hour == DateTime.Now.Hour);

            if (now != null)
            {
                var latestTile = new TileItem(city)
                {
                    LocationName = city.Name,
                    Title        = string.Format(Properties.Resources.LatestTitle, now.Df),
                    CloudImage   = ImageIdToUri(now.S),
                    Temperature  = now.T + '°',
                    TileType     = TileType.Latest,
                    Description  = now.Prosa
                };

                Deployment.Current.Dispatcher.BeginInvoke(() =>
                {
                    this.Tiles.Add(latestTile);
                });
            }
        }
Ejemplo n.º 13
0
        private Task RefreshLatestTile(GeoLocationCity city)
        {
            return(LiveTileWeatherProvider.GetForecast(city, DateTime.Now)
                   .ContinueWith <Task>(task =>
            {
                var tcs = new TaskCompletionSource <bool>(TaskCreationOptions.AttachedToParent);

                if (task.IsCompleted)
                {
                    var now = task.Result.FirstOrDefault(x => x.Df.Hour == DateTime.Now.Hour);
                    if (now != null)
                    {
                        var latestTile = CreateTileItem(city, now, TileType.Latest);

                        Deployment.Current.Dispatcher.BeginInvoke(
                            () => TileGenerator_RefreshTile(latestTile, () => tcs.SetResult(true)));
                    }
                }

                return tcs.Task;
            }));
        }
Ejemplo n.º 14
0
        private void AddPlusTile(GeoLocationCity city, List <LiveTileWeatherResponse> result, int offset)
        {
            var custom = result.FirstOrDefault(x => x.Df.Hour == DateTime.Now.AddHours(offset).Hour);

            if (custom != null)
            {
                var customTile = new TileItem(city)
                {
                    LocationName = city.Name,
                    Title        = string.Format(Properties.Resources.PlusTitleTitle, custom.Df, offset),
                    CloudImage   = ImageIdToUri(custom.S),
                    Temperature  = custom.T + '°',
                    TileType     = TileType.PlusTile,
                    Offset       = offset,
                    Description  = custom.Prosa
                };

                Deployment.Current.Dispatcher.BeginInvoke(() =>
                {
                    this.Tiles.Add(customTile);
                });
            }
        }
Ejemplo n.º 15
0
 public TileItem(GeoLocationCity city)
 {
     this.City = city;
 }
Ejemplo n.º 16
0
        private void AddPlusTile(GeoLocationCity city, List<LiveTileWeatherResponse> result, int offset)
        {
            var custom = result.FirstOrDefault(x => x.Df.Hour == DateTime.Now.AddHours(offset).Hour);
            if (custom != null)
            {
                var customTile = new TileItem(city)
                {
                    LocationName = city.Name,
                    Title = string.Format(Properties.Resources.PlusTitleTitle, custom.Df, offset),
                    CloudImage = ImageIdToUri(custom.S),
                    Temperature = custom.T + '°',
                    TileType = TileType.PlusTile,
                    Offset = offset,
                    Description = custom.Prosa
                };

                Deployment.Current.Dispatcher.BeginInvoke(() =>
                {
                    this.Tiles.Add(customTile);
                });
            }
        }
Ejemplo n.º 17
0
        private void AddLatestTile(GeoLocationCity city, List<LiveTileWeatherResponse> result)
        {
            var now = result.FirstOrDefault(x => x.Df.Hour == DateTime.Now.Hour);
            if (now != null)
            {
                var latestTile = new TileItem(city)
                {
                    LocationName = city.Name,
                    Title = string.Format(Properties.Resources.LatestTitle, now.Df),
                    CloudImage = ImageIdToUri(now.S),
                    Temperature = now.T + '°',
                    TileType = TileType.Latest,
                    Description = now.Prosa
                };

                Deployment.Current.Dispatcher.BeginInvoke(() =>
                {
                    this.Tiles.Add(latestTile);
                });
            }
        }
Ejemplo n.º 18
0
        private void SelectionChangedExecute(GeoLocationCity city)
        {
            var uri = string.Format(AppSettings.MainPageAddress, city.PostalCode, city.Country);

            Deployment.Current.Dispatcher.BeginInvoke(
                () =>  App.CurrentRootVisual.Navigate(new Uri(uri, UriKind.Relative)));
        }
Ejemplo n.º 19
0
 private void RemoveFromFavoritesExecute(GeoLocationCity city)
 {
     if ((city != null) && (city is GeoLocationCity) && (Favorites != null))
     {
         Favorites.Remove(city);
         SaveFavorites();
     }
 }
Ejemplo n.º 20
0
        private Task RefreshLatestTile(GeoLocationCity city)
        {
            return LiveTileWeatherProvider.GetForecast(city, DateTime.Now)
                        .ContinueWith<Task>(task =>
                        {
                            var tcs = new TaskCompletionSource<bool>(TaskCreationOptions.AttachedToParent);

                            if (task.IsCompleted)
                            {
                                var now = task.Result.FirstOrDefault(x => x.Df.Hour == DateTime.Now.Hour);
                                if (now != null)
                                {
                                    var latestTile = CreateTileItem(city, now, TileType.Latest);

                                    Deployment.Current.Dispatcher.BeginInvoke(
                                        () => TileGenerator_RefreshTile(latestTile, () => tcs.SetResult(true)));
                                }
                            }

                            return tcs.Task;
                        });
        }
Ejemplo n.º 21
0
 private TileItem CreateTileItem(GeoLocationCity city, LiveTileWeatherResponse response, TileType type)
 {
     return new TileItem(city)
     {
         TileType = type,
         LocationName = city.Name,
         Title = string.Format(Properties.Resources.LatestTitle, response.Df),
         CloudImage = ImageIdToUri(response.S),
         Temperature = response.T + '°',
         Description = response.Prosa,
     };
 }
Ejemplo n.º 22
0
 private void FavoriteItemSelectedExecute(GeoLocationCity city)
 {
     if (city != null)
     {
         ResolveLocation(city.PostalCode.ToString(), city.Country);
         PivotSelectedIndex = 0;
     }
 }
Ejemplo n.º 23
0
 public TileItem(GeoLocationCity city)
 {
     this.City = city;
 }
Ejemplo n.º 24
0
        private Task RefreshPlusTile(string offset, GeoLocationCity city)
        {
            int offsetHour = int.Parse(offset);
            var date = DateTime.Now.AddHours(offsetHour);

            return LiveTileWeatherProvider.GetForecast(city, date)
                        .ContinueWith<Task>(task =>
                        {
                            var tcs = new TaskCompletionSource<bool>(TaskCreationOptions.AttachedToParent);

                            if (task.IsCompleted)
                            {
                                var result = task.Result.FirstOrDefault(x => x.Df.Hour == date.Hour);
                                if (result != null)
                                {
                                    var plusTile = CreateTileItem(city, result, TileType.PlusTile);
                                    plusTile.Offset = offsetHour;

                                    Deployment.Current.Dispatcher.BeginInvoke(
                                        () => TileGenerator_RefreshTile(plusTile, () => tcs.SetResult(true)));
                                }
                            }

                            return tcs.Task;
                        });
        }