예제 #1
0
        public LookupChoice Pick(LookupContext lookup)
        {
            Console.WriteLine("Searched for " + lookup.Query);
            PrintResults(lookup.Results);
            string prompt = (lookup.Results.Count == 0) ? "No results found." : "\nPick result number,";
            Console.WriteLine(prompt + " (s)kip or (r)etry");

            string action = Console.In.ReadLine().Trim();
            switch (action)
            {
                case "r":
                    return RetrySearch();
                case "s":
                    return new LookupChoice(LookupChoice.Action.GiveUp);
                default:
                    try
                    {
                        var selected = lookup.Results[Int32.Parse(action)];
                        return new LookupChoice(selected.ImdbId);
                    }
                    catch
                    {
                        Console.WriteLine("Invalid option: s,r, or a number");
                        return Pick(lookup);
                    }
            }
        }
        public SearchResultPickerViewModel(LookupContext lookup)
        {
            LookupResultList = lookup.Results;
            //RaisePropertyChanged("LookupResultList");

            ErrorMessage = lookup.FailureMessage();
            SearchFailed = !String.IsNullOrEmpty(ErrorMessage);
            if(SearchFailed)
            {
                SearchText = lookup.Query;
            }

            QueryTitle = lookup.Query;

            SearchCommand = new RelayCommand(RetrySearch);
            PickSelectedCommand = new RelayCommand(PickSelected);

            SelectedItem = LookupResultList.FirstOrDefault();
        }
예제 #3
0
파일: App.xaml.cs 프로젝트: Jamedjo/Raticon
 private LookupChoice LookupCalllback(LookupContext lookup)
 {
     return resultPicker.Pick(lookup);
 }
예제 #4
0
 public LookupChoice Pick(LookupContext lookup)
 {
     LookupResult pick = lookup.Results.FirstOrDefault();
     return (pick != null) ? new LookupChoice(pick) : new LookupChoice(LookupChoice.Action.GiveUp);
 }
예제 #5
0
        private async Task<LookupChoice> EnqueuePick(LookupContext lookup)
        {
            Task<LookupChoice> task = new Task<LookupChoice>(()=> ShowPicker(lookup),CancellationToken.None, TaskCreationOptions.AttachedToParent);
            queue.Enqueue(task);

            //If task is the only item in queue we need to run it immediately
            TryDequeueNextPick();

            var choice = await task;

            //After dialog closes, continue by attempting to open next picker
            TryDequeueNextPick();

            return choice;
        }
예제 #6
0
        private LookupChoice ShowPicker(LookupContext lookup)
        {
            SearchResultPicker picker = new SearchResultPicker();
            picker.DataContext = new SearchResultPickerViewModel(lookup);
            picker.Owner = parentWindow;
            picker.ShowDialog();

            isPickerVisible = false;

            if(picker.DialogResult==true)
            {
                return ((SearchResultPickerViewModel)picker.DataContext).LookupChoice;
            }
            else
            {
                return new LookupChoice(LookupChoice.Action.GiveUp);
            }
        }
예제 #7
0
 public LookupChoice Pick(LookupContext lookup)
 {
     if(uiThread == Thread.CurrentThread)
     {
         throw new ThreadStateException("Pick should be called from another thread");
     }
     var guiTask = EnqueuePick(lookup);
     guiTask.Wait();
     return guiTask.Result;
 }