public MainViewModel(INarrator narrator, Host host) { _hwnds = new ConcurrentQueue <IntPtr>(); _narrator = narrator; _host = host; Task.Run(InitStates); _host.Streams.CreateGazePointDataStream().GazePoint(CheckGazePointIsInScreenBounds); Task.Factory.StartNew(() => { while (true) { IntPtr hwnd; while (_hwnds.TryDequeue(out hwnd)) { Debug.WriteLine($"{hwnd} at {DateTime.UtcNow}"); var title = GetWindowTitle(hwnd); _narrator.Cancel(_lastTitle); _narrator.Say(title); _lastTitle = title; } } }, TaskCreationOptions.LongRunning); }
//---------------------------------------------------------------------------- // RegisterNarrator //---------------------------------------------------------------------------- #region RegisterNarrator public void RegisterNarrator(INarrator narrator) { MyNarrator = narrator; }
KeyboardHost(IKeyboardApplicationEnvironment environment) { _environment = environment; _editor = new TextBoxEditor(_environment.ClipboardProvider); SetTrainingPhrase(); _environment.AppSettings.Keyboard.AttachPropertyChangedAction(nameof(_environment.AppSettings.Keyboard.IsTrainingMode), SetTrainingPhrase); _isUpdateAvailable = _environment.IsUpdateAvailable; _environment.UpdateAvailable += (s, e) => IsUpdateAvailable = _environment.IsUpdateAvailable; var publicTextToAudio = _environment.TextToAudioProviderFactory.Create(AppSettings.Instance.PublicNarration); var privateTextToAudio = _environment.TextToAudioProviderFactory.Create(AppSettings.Instance.PrivateNarration); ActivityDisplayStatus = _environment.ActivityDisplayProvider.Status; _environment.ActivityDisplayProvider.StatusChanged += (s, e) => ActivityDisplayStatus = _environment.ActivityDisplayProvider.Status; var publicNarrator = new Narrator(environment.Random, AppSettings.Instance.PublicNarration, _environment.AudioProviderFactory, publicTextToAudio, _environment.ActivityDisplayProvider); var privateNarrator = new Narrator(environment.Random, AppSettings.Instance.PrivateNarration, _environment.AudioProviderFactory, privateTextToAudio, NullActivityDisplayProvider.Instance); _narrator = new CompoundNarrator(publicNarrator, privateNarrator); Speak = new RelayCommand(SpeakAction); SendToSlack = new RelayCommand(SendToSlackAction, (o) => AppSettings.Instance.General.SlackHostUri != GeneralSettings.UnsetSlackHostUri); Clear = new RelayCommand(ClearAction); UpdateApplication = new RelayCommand(UpdateApplicationAction); ExitApplication = new RelayCommand(ExitApplicationAction); Calibrate = new RelayCommand(CalibrateAction); for (var index = 0; index < 7; index++) { suggestionItems.Add(new SuggestionItem(this, index)); } for (var index = 0; index < 6; index++) { phraseItems.Add(new PhraseItem(this, index)); } ShiftToggleState = ToggleStates["Shift"]; ControlToggleState = ToggleStates["Control"]; AltToggleState = ToggleStates["Alt"]; ShiftToggleState.CheckChanged += OnShiftChanged; _predictor = PredictionEngineFactory.Create(PredictionEnvironment.Instance); _predictor.PredictionChanged += OnPredictionChanged; _ambiguousKeys = new List <List <string> >(); _minuteTick.Tick += OnMinuteTick; ScheduleNextMinuteTick(); ShowActiveListening = new RelayCommand((o) => AppSettings.Instance.Prediction.PredictionLayout = PredictionLayout.ActiveListening); ShowWordPrediction = new RelayCommand((o) => AppSettings.Instance.Prediction.PredictionLayout = PredictionLayout.WordsAlone); ShowPhrasePrediction = new RelayCommand((o) => AppSettings.Instance.Prediction.PredictionLayout = PredictionLayout.PhraseAlone); ActiveListeningLaugh = new RelayCommand((o) => SpeakEffect(AudioGesture.Laugh)); ActiveListeningHmm = new RelayCommand((o) => SpeakEffect(AudioGesture.Hmm)); ActiveListeningSarcasm = new RelayCommand((o) => SpeakEffect(AudioGesture.Sarcasm)); ActiveListeningOh = new RelayCommand((o) => SpeakEffect(AudioGesture.Oh)); ActiveListeningSharpBreath = new RelayCommand((o) => SpeakEffect(AudioGesture.SharpBreath)); ActiveListeningArgh = new RelayCommand((o) => SpeakEffect(AudioGesture.Argh)); ActiveListeningCough = new RelayCommand((o) => SpeakEffect(AudioGesture.Cough)); ActiveListeningUgh = new RelayCommand((o) => SpeakEffect(AudioGesture.Ugh)); }