private async Task GetDataAsync() { if (this.Roles.Count != 0) //HERE IS THE ANSWER. IF LOADED, DO NOT LOAD AGAIN return; Uri dataUri = new Uri("ms-appx:///DataModel/Data.json"); //Get location of data StorageFile file = await StorageFile.GetFileFromApplicationUriAsync(dataUri); //Get the file from where the data is located string jsonText = await FileIO.ReadTextAsync(file); //Returns the json text in which it was saved as JsonObject jsonObject = JsonObject.Parse(jsonText); //Parse the json text into object JsonArray jsonArray = jsonObject["Roles"].GetArray(); foreach (JsonValue roleValue in jsonArray) { JsonObject roleObject = roleValue.GetObject(); Role role = new Role(roleObject["UniqueId"].GetString()); foreach (JsonValue championValue in roleObject["Champions"].GetArray()) { JsonObject championObject = championValue.GetObject(); var counterList = new ObservableCollection<String>(); foreach (JsonValue counterValue in championObject["Counters"].GetArray()) { var counterString = counterValue.GetString(); counterList.Add(counterString); } role.Champions.Add(new Champion(championObject["UniqueId"].GetString(), championObject["ImagePath"].GetString(), counterList)); } this.Roles.Add(role); } GetAllChampions(); //Fills up the all role immediately with json data serialization }
/// <summary> /// Populates the page with content passed during navigation. Any saved state is also /// provided when recreating a page from a prior session. /// </summary> /// <param name="sender"> /// The source of the event; typically <see cref="NavigationHelper"/>. /// </param> /// <param name="e">Event data that provides both the navigation parameter passed to /// <see cref="Frame.Navigate(Type, Object)"/> when this page was initially requested and /// a dictionary of state preserved by this page during an earlier /// session. The state will be null the first time a page is visited.</param> private async void NavigationHelper_LoadState(object sender, LoadStateEventArgs e) { int id = await AdData.GetAdId(); HelperMethods.CreateSingleAdUnit(id,"TallAd", AdGrid); HelperMethods.CreateAdUnits(id, "TallAd", AdGrid2, 5); // Setup the underlying UI var champName = (string)e.NavigationParameter; Champion champion = DataSource.GetChampion(champName); champions = DataSource.GetAllChampions(); this.DefaultViewModel["Champion"] = champion; this.DefaultViewModel["Role"] = DataSource.GetRoleId(champion.UniqueId); this.DefaultViewModel["Filter"] = champions.Champions; // If navigating via a counterpick, on loading that page, remove the previous history so the back page will go to main or role, not champion var prevPage = Frame.BackStack.ElementAt(Frame.BackStackDepth - 1); if (prevPage.SourcePageType.Equals(typeof(ChampionPage))){ Frame.BackStack.RemoveAt(Frame.BackStackDepth - 1); } // Champion feedback code // await commentViewModel.SeedDataAsync(champions); // Grab the champion feedback from the server await commentViewModel.GetChampionFeedbackAsync(champName); // Check if an there was no champion retrieved as well as an error message (must be internet connection problem) if (commentViewModel.ChampionFeedback == null && commentViewModel.ErrorMessage != null){ MessageDialog messageBox = new MessageDialog("Make sure your internet connection is working and try again!"); await messageBox.ShowAsync(); Application.Current.Exit(); } // Collapse the progress ring once counters have been loaded. If the ring hasn't loaded yet, set a boolean to collapse it once it loads. championFeedbackLoaded = true; if (counterLoadingRing != null) counterLoadingRing.Visibility = Windows.UI.Xaml.Visibility.Collapsed; if (easyMatchupLoadingRing != null) easyMatchupLoadingRing.Visibility = Windows.UI.Xaml.Visibility.Collapsed; if (synergyLoadingRing != null) synergyLoadingRing.Visibility = Windows.UI.Xaml.Visibility.Collapsed; if (counterCommentsLoadingRing != null) counterCommentsLoadingRing.Visibility = Windows.UI.Xaml.Visibility.Collapsed; if (playingCommentsLoadingRing != null) playingCommentsLoadingRing.Visibility = Windows.UI.Xaml.Visibility.Collapsed; // Check if comments exist for counter comments. If not, show a message indicating so. if (commentViewModel.ChampionFeedback.Comments.Where(x => x.Page == PageEnum.CommentPage.Counter).Count() == 0) { if (counterMessage == null) emptyComments = true; else counterMessage.Visibility = Windows.UI.Xaml.Visibility.Visible; } // Check if comments exist for playing comments. If not, show a message indicating so. if (commentViewModel.ChampionFeedback.Comments.Where(x => x.Page == PageEnum.CommentPage.Playing).Count() == 0) { if (playingMessage == null) emptyPlayingComments = true; else playingMessage.Visibility = Windows.UI.Xaml.Visibility.Visible; } // Check if synergy champions existing. If not, show a message indicating so. if (commentViewModel.ChampionFeedback.Counters.Where(x => x.Page == PageEnum.ChampionPage.Synergy).Count() == 0) { if (synergyMessage == null) emptySynergyChampions = true; else synergyMessage.Visibility = Windows.UI.Xaml.Visibility.Visible; } // Make updates to champion comments observable this.DefaultViewModel["ChampionFeedback"] = commentViewModel.ChampionFeedback; }
public static Role FilterChampions(string filter) { var matches = new Role(filter); foreach (var role in _DataSource.Roles) { foreach (var champion in role.Champions) { if (champion.UniqueId.ToLower().StartsWith(filter.ToLower()) && role.UniqueId != "All") matches.Champions.Add(champion); } } matches.Champions = new ObservableCollection<Champion>(matches.Champions.OrderBy(p => p.UniqueId)); return matches; }