private void PopulateItems() { AnimeSearchItemViewModels.Clear(); foreach ( var item in _allAnimeSearchItemViewModels.Where( item => string.IsNullOrWhiteSpace(_currrentFilter) || string.Equals(_currrentFilter, item.Type, StringComparison.CurrentCultureIgnoreCase))) { AnimeSearchItemViewModels.Add(item); } EmptyNoticeVisibility = AnimeSearchItemViewModels.Count == 0; }
public void Init(SearchPageNavigationArgs args) { PrevArgs = args; if (args.ByGenre || args.ByStudio) { PrevQuery = null; EmptyNoticeVisibility = false; IsFirstVisitGridVisible = false; GenreSelectionGridVisibility = true; DirectQueryInputVisibility = false; if (args.ByGenre) { AvailableSelectionChoices = Enum.GetValues(typeof(AnimeGenres)).Cast <Enum>().OrderBy(val => val.ToString()).ToList(); } else { AvailableSelectionChoices = Enum.GetValues(typeof(AnimeStudios)).Cast <Enum>().OrderBy(val => val.ToString()).ToList(); } return; } else { GenreSelectionGridVisibility = false; } if (_animeSearch != args.Anime) { PrevQuery = null; } if (!_queryHandler) { ViewModelLocator.GeneralMain.OnSearchQuerySubmitted += SubmitQuery; } _queryHandler = true; _currrentFilter = null; _animeSearch = args.Anime; EmptyNoticeVisibility = false; IsFirstVisitGridVisible = true; if (args.DisplayMode == SearchPageDisplayModes.Off) { ViewModelLocator.NavMgr.ResetOffBackNav(); DirectQueryInputVisibility = true; if (_queryHandler) { ViewModelLocator.GeneralMain.OnSearchQuerySubmitted -= SubmitQuery; _queryHandler = false; } } else { DirectQueryInputVisibility = false; } if (!string.IsNullOrWhiteSpace(args.Query) && (args.DisplayMode == SearchPageDisplayModes.Main || args.ForceQuery)) { ViewModelLocator.GeneralMain.PopulateSearchFilters(_filters); SubmitQuery(args.Query); if (args.ForceQuery) { ViewModelLocator.GeneralMain.CurrentSearchQuery = args.Query; InternalQuery = args.Query; } } else { _filters.Clear(); AnimeSearchItemViewModels.Clear(); IsFirstVisitGridVisible = true; ResetQuery(); } }
public async void SubmitQuery(string query) { if (string.IsNullOrEmpty(query) || query == PrevQuery || query.Length < 2) { IsFirstVisitGridVisible = false; EmptyNoticeVisibility = false; return; } IsFirstVisitGridVisible = false; PrevQuery = query; Loading = true; EmptyNoticeVisibility = false; AnimeSearchItemViewModels.Clear(); var data = new List <AnimeGeneralDetailsData>(); _filters.Clear(); _allAnimeSearchItemViewModels = new List <AnimeSearchItemViewModel>(); if (_animeSearch) { await Task.Run( async() => data = await new AnimeSearchQuery(Utils.Utilities.CleanAnimeTitle(query)).GetSearchResults()); try { foreach (var item in data) { var type = item.Type; _allAnimeSearchItemViewModels.Add(new AnimeSearchItemViewModel(item)); if (!_filters.Contains(type)) { _filters.Add(type); } } } catch (Exception) //if MAL returns nothing it returns unparsable xml ... { //will display empty notice } } else // manga search { var response = ""; await Task.Run( async() => response = await new MangaSearchQuery(Utils.Utilities.CleanAnimeTitle(query)).GetRequestResponse()); try { response = WebUtility.HtmlDecode(response); var parsedData = XDocument.Parse(response.Replace("&", "")); //due to unparasable stuff returned by mal); foreach (var item in parsedData.Element("manga").Elements("entry")) { var type = item.Element("type").Value; var mangaData = new AnimeGeneralDetailsData(); mangaData.ParseXElement(item, false, Settings.PreferEnglishTitles); _allAnimeSearchItemViewModels.Add(new AnimeSearchItemViewModel(mangaData, false)); if (!_filters.Contains(type)) { _filters.Add(type); } } } catch (Exception) //if MAL returns nothing it returns unparsable xml ... { //will display empty notice } } ViewModelLocator.GeneralMain.PopulateSearchFilters(_filters); PopulateItems(); Loading = false; }