Ejemplo n.º 1
0
        public override async Task OnNavigatedToAsync(INavigationParameters parameters)
        {
            IsNavigationFailed.Value     = false;
            NavigationFailedReason.Value = null;

            try
            {
                string keyword = null;
                if (parameters.TryGetValue("keyword", out keyword))
                {
                    keyword = Uri.UnescapeDataString(keyword);
                }


                SearchTarget target = SearchTarget.Keyword;
                if (parameters.TryGetValue("service", out string modeString))
                {
                    Enum.TryParse <SearchTarget>(modeString, out target);
                }
                else if (parameters.TryGetValue("service", out target))
                {
                }

                var pageName = target switch
                {
                    SearchTarget.Keyword => nameof(SearchResultKeywordPage),
                    SearchTarget.Tag => nameof(SearchResultTagPage),
                    SearchTarget.Niconama => nameof(SearchResultLivePage),
                    _ => null
                };

                if (pageName != null && keyword != null)
                {
                    var result = await NavigationService.NavigateAsync(pageName, ("keyword", keyword));

                    if (!result.IsSuccess)
                    {
                        throw result.Exception;
                    }
                }

                SearchText.Value     = keyword;
                SelectedTarget.Value = target;

                _LastSelectedTarget = target;
                _LastKeyword        = keyword;

                DoSearchCommand.Throttle(TimeSpan.FromMilliseconds(50), _scheduler).Subscribe(_ =>
                {
                    //await Task.Delay(50);

                    if (SearchText.Value?.Length == 0)
                    {
                        return;
                    }

                    if (_LastSelectedTarget == SelectedTarget.Value && _LastKeyword == SearchText.Value)
                    {
                        return;
                    }

                    // 検索結果を表示
                    PageManager.Search(SelectedTarget.Value, SearchText.Value);

                    var searched = _searchHistoryRepository.Searched(SearchText.Value, SelectedTarget.Value);

                    var oldSearchHistory = SearchHistoryItems.FirstOrDefault(x => x.Keyword == SearchText.Value);
                    if (oldSearchHistory != null)
                    {
                        SearchHistoryItems.Remove(oldSearchHistory);
                    }
                    SearchHistoryItems.Insert(0, new SearchHistoryListItemViewModel(searched, this));
                })
                .AddTo(_navigationDisposables);
            }
            catch (Exception e)
            {
                IsNavigationFailed.Value = true;
#if DEBUG
                NavigationFailedReason.Value = e.Message;
#endif
                Debug.WriteLine(e.ToString());
            }

            await base.OnNavigatedToAsync(parameters);
        }