Exemple #1
0
        public IDisposable Subscribe(IQuickCaptionObserver observer)
        {
            _logService.TraceEnter();
            try
            {
                _logService.Trace("Checking if observer is already subscribed...");
                if (_observers.Contains(observer))
                {
                    return(new Unsubscriber <IQuickCaptionObserver>(_observers, observer));
                }

                _logService.Trace("Observer is not subscribed.  Subscribing...");
                _observers.Add(observer);

                _logService.Trace("Notifying observer of current state...");
                var captions = GetQuickCaptions();
                Notify(observer, captions);

                return(new Unsubscriber <IQuickCaptionObserver>(_observers, observer));
            }
            finally
            {
                _logService.TraceExit();
            }
        }
Exemple #2
0
        private void Notify(IQuickCaptionObserver observer, IList <string> captions)
        {
            _logService.TraceEnter();
            try
            {
                _logService.Trace("Clearing current list...");
                observer.OnClear();

                _logService.Trace($"Notifying of {captions.Count} captions...");
                foreach (var caption in captions)
                {
                    _logService.Trace($@"Notifying of ""{caption}""...");
                    observer.OnNext(caption);
                }

                _logService.Trace("All captions have been returned...");
                observer.OnCompleted();
            }
            catch (Exception ex)
            {
                observer.OnError(ex);
            }
            finally
            {
                _logService.TraceExit();
            }
        }