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);
 }
Example #5
0
        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);
        }
Example #6
0
        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);
            }
Example #11
0
        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);
                }
            }
        }
Example #12
0
 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();
            }
        }