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(); } }
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(); } }