protected async override void OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs e) { if (!App.Recipes.IsLoaded) await App.Recipes.LoadLocalDataAsync(); if (NavigationContext.QueryString.ContainsKey("groupName")) { string groupName = NavigationContext.QueryString["groupName"]; group = App.Recipes.FindGroupByName(groupName); pivot.DataContext = group; SetView(); } else { string UniqueId = NavigationContext.QueryString["ID"]; group = App.Recipes.FindGroup(UniqueId); pivot.DataContext = group; SetView(); } SetPinBar(); base.OnNavigatedTo(e); }
protected async override void OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs e) { if (!App.Recipes.IsLoaded) await App.Recipes.LoadLocalDataAsync(); if (NavigationContext.QueryString.ContainsKey("groupName")) { string groupName = NavigationContext.QueryString["groupName"]; group = App.Recipes.FindGroupByName(groupName); pivot.DataContext = group; } else { string UniqueId = NavigationContext.QueryString["ID"]; group = App.Recipes.FindGroup(UniqueId); pivot.DataContext = group; } //TODO-EX-9 SetView(); // SetPinBar(); //Update main tile with recently visited group Features.Tile.UpdateMainTile(group); base.OnNavigatedTo(e); }
protected override void OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs e) { string UniqueId = NavigationContext.QueryString["ID"]; group = App.Recipes.FindGroup(UniqueId); pivot.DataContext = group; base.OnNavigatedTo(e); }
protected override void OnNavigatedTo(Windows.UI.Xaml.Navigation.NavigationEventArgs e) { var navigationArguments = (e.Parameter ?? "").ToString().Split('&').Where(t => !string.IsNullOrWhiteSpace(t)).Select(t => t.Split('=')).ToDictionary(t => t[0], t => t[1]); string UniqueId = navigationArguments["ID"]; group = App.Recipes.FindGroup(UniqueId); pivot.DataContext = group; base.OnNavigatedTo(e); }
private static RecipeDataGroup CreateRecipeGroup(JsonObject obj) { RecipeDataGroup group = new RecipeDataGroup(); foreach (var key in obj.Keys) { IJsonValue val; if (!obj.TryGetValue(key, out val)) { continue; } switch (key) { case "key": group.UniqueId = val.GetString(); break; case "title": group.Title = val.GetString(); break; case "shortTitle": group.ShortTitle = val.GetString(); break; case "description": group.Description = val.GetString(); break; case "backgroundImage": group.SetImage(val.GetString()); break; case "groupImage": group.SetGroupImage(val.GetString()); break; } } _recipeDataSource.AllGroups.Add(group); return(group); }
public async System.Threading.Tasks.Task LoadLocalDataAsync() { // Retrieve recipe data from Recipes.txt var sri = App.GetResourceStream(new Uri("Data\\Recipes.txt", UriKind.Relative)); List <Type> types = new List <Type>(); types.Add(typeof(RecipeDataItem)); types.Add(typeof(RecipeDataGroup)); types.Add(typeof(RecipeDataCommon)); DataContractJsonSerializer deserializer = new DataContractJsonSerializer(typeof(IEnumerable <RecipeDataItem>), types); IEnumerable <RecipeDataItem> data = (IEnumerable <RecipeDataItem>)deserializer.ReadObject(sri.Stream); await LoadUserImagesLocalDataAsync(); List <string> IDs = new List <string>(); RecipeDataGroup group = null; foreach (var recipe in data) { if (!IDs.Contains(recipe.Group.UniqueId)) { group = recipe.Group; group.Items = new ObservableCollection <RecipeDataItem>(); IDs.Add(recipe.Group.UniqueId); _itemGroups.Add(group); } AssignedUserImages(recipe); group.LicensedRequired = false; group.Items.Add(recipe); } // Fire a RecipesLoaded event if (RecipesLoaded != null) { RecipesLoaded(this, null); } IsLoaded = true; }
private static RecipeDataGroup CreateRecipeGroup(JsonObject obj) { RecipeDataGroup group = new RecipeDataGroup(); foreach (var key in obj.Keys) { IJsonValue val; if (!obj.TryGetValue(key, out val)) continue; switch (key) { case "key": group.UniqueId = val.GetString(); break; case "title": group.Title = val.GetString(); break; case "shortTitle": group.ShortTitle = val.GetString(); break; case "description": group.Description = val.GetString(); break; case "backgroundImage": group.SetImage(val.GetString()); break; case "groupImage" : group.SetGroupImage(val.GetString()); break; } } _recipeDataSource.AllGroups.Add(group); return group; }
public RecipeDataItem(String uniqueId, String title, String shortTitle, String imagePath, int preptime, String directions, ObservableCollection<string> ingredients, RecipeDataGroup group) : base(uniqueId, title, shortTitle, imagePath) { this._preptime = preptime; this._directions = directions; this._ingredients = ingredients; this._group = group; }
public static void UpdateMainTile(RecipeDataGroup group) { //Get application's main tile var mainTile = ShellTile.ActiveTiles.FirstOrDefault(); if (null != mainTile) { IconicTileData tileData = new IconicTileData() { Count = group.RecipesCount, BackgroundColor = Color.FromArgb(255, 195, 61, 39), Title = "Contoso Cookbooks", IconImage = new Uri("/Assets/MediumLogo.png", UriKind.RelativeOrAbsolute), SmallIconImage = new Uri("/Assets/SmallLogo.png", UriKind.RelativeOrAbsolute), WideContent1 = "Recent activity:", WideContent2 = "Browsed " + group.Title + " group", WideContent3 = "with total of " + group.RecipesCount + " recipes" }; mainTile.Update(tileData); } }
public static void SetGroupTile(RecipeDataGroup group, string NavSource) { List<Uri> list = new List<Uri>(); foreach (var recipe in group.Items) list.Add(new Uri(recipe.ImagePath.LocalPath, UriKind.Relative)); CycleTileData tileData = new CycleTileData() { Title = group.Title, SmallBackgroundImage = new Uri(group.GetImageUri(), UriKind.RelativeOrAbsolute), CycleImages = list }; ShellTile.Create(new Uri(NavSource, UriKind.Relative), tileData, true); }
private static void CreateRecipesAndRecipeGroups(JsonArray array) { foreach (var item in array) { var obj = item.GetObject(); RecipeDataItem recipe = new RecipeDataItem(); RecipeDataGroup group = null; foreach (var key in obj.Keys) { IJsonValue val; if (!obj.TryGetValue(key, out val)) { continue; } switch (key) { case "key": recipe.UniqueId = val.GetNumber().ToString(); break; case "title": recipe.Title = val.GetString(); break; case "shortTitle": recipe.ShortTitle = val.GetString(); break; case "preptime": recipe.PrepTime = (int)val.GetNumber(); break; case "directions": recipe.Directions = val.GetString(); break; case "ingredients": var ingredients = val.GetArray(); var list = (from i in ingredients select i.GetString()).ToList(); recipe.Ingredients = new ObservableCollection <string>(list); break; case "backgroundImage": recipe.SetImage(val.GetString()); break; case "tileImage": recipe.SetTileImage(val.GetString()); break; case "group": var recipeGroup = val.GetObject(); IJsonValue groupKey; if (!recipeGroup.TryGetValue("key", out groupKey)) { continue; } group = _recipeDataSource.AllGroups.FirstOrDefault(c => c.UniqueId.Equals(groupKey.GetString())); if (group == null) { group = CreateRecipeGroup(recipeGroup); } recipe.Group = group; break; } } if (group != null) { group.Items.Add(recipe); } } }
public RecipeDataItem(String uniqueId, String title, String shortTitle, String imagePath, int preptime, String directions, ObservableCollection <string> ingredients, RecipeDataGroup group) : base(uniqueId, title, shortTitle, imagePath) { this._preptime = preptime; this._directions = directions; this._ingredients = ingredients; this._group = group; }
private static RecipeDataGroup CreateRecipeGroup(string obj) { RecipeDataGroup group = new RecipeDataGroup(); group.Title = obj; group.UniqueId = new Random().Next().ToString(); _recipeDataSource.AllGroups.Add(group); return group; }
private async Task GetRecipeDataAsync() { if (this._groups.Count != 0) return; bool useLocalData = false; //// Local settings //if (ApplicationData.Current.LocalSettings.Values.ContainsKey(_key)) //{ // useLocalData = (bool)ApplicationData.Current.LocalSettings.Values[_key]; //} // Roaming settings if (ApplicationData.Current.RoamingSettings.Values.ContainsKey(_key)) { useLocalData = (bool)ApplicationData.Current.RoamingSettings.Values[_key]; } string jsonText = null; if (useLocalData) { Uri dataUri = new Uri(_baseUri + "DataModel/RecipeData.json"); StorageFile file = await StorageFile.GetFileFromApplicationUriAsync(dataUri); jsonText = await FileIO.ReadTextAsync(file); } else { _baseUri = "http://contosorecipes8.blob.core.windows.net/"; CancellationTokenSource cts = new CancellationTokenSource(); cts.CancelAfter(5000); // Wait up to 5 seconds bool isTimedOut = false; try { HttpClient client = new HttpClient(); HttpResponseMessage response = await client.GetAsync(new Uri(_baseUri + "BlueRecipes")).AsTask(cts.Token); if (!response.IsSuccessStatusCode) { await new MessageDialog("Unable to load remote data (request failed)").ShowAsync(); return; } jsonText = await response.Content.ReadAsStringAsync(); } catch (OperationCanceledException) { isTimedOut = true; } if (isTimedOut) { await new MessageDialog("Unable to load remote data (operation timed out)").ShowAsync(); return; } } bool isJSONInvalid = false; try { JsonObject jsonObject = JsonObject.Parse(jsonText); JsonArray jsonArray = jsonObject["Groups"].GetArray(); foreach (JsonValue groupValue in jsonArray) { JsonObject groupObject = groupValue.GetObject(); RecipeDataGroup group = new RecipeDataGroup( groupObject["UniqueId"].GetString(), groupObject["Title"].GetString(), groupObject["Subtitle"].GetString(), _baseUri + groupObject["ImagePath"].GetString(), _baseUri + groupObject["GroupImagePath"].GetString(), groupObject["Description"].GetString() ); foreach (JsonValue itemValue in groupObject["Items"].GetArray()) { JsonObject itemObject = itemValue.GetObject(); JsonArray array = itemObject["Ingredients"].GetArray(); IEnumerable<string> ingredients = (from i in array select i.GetString()); group.Items.Add(new RecipeDataItem( itemObject["UniqueId"].GetString(), itemObject["Title"].GetString(), itemObject["Subtitle"].GetString(), itemObject["Description"].GetString(), _baseUri + itemObject["ImagePath"].GetString(), "ms-appx:///" + itemObject["TileImagePath"].GetString(), // Tile images must be local (int)itemObject["PrepTime"].GetNumber(), itemObject["Directions"].GetString(), ingredients )); } this.Groups.Add(group); } } catch (Exception) { isJSONInvalid = true; } if (isJSONInvalid) { await new MessageDialog("Invalid JSON data").ShowAsync(); this.Groups.Clear(); } }