コード例 #1
0
 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;
 }
コード例 #2
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();
            }
        }
コード例 #3
0
        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;
        }