diff --git a/Wabbajack.Common/CustomObservable.cs b/Wabbajack.Common/CustomObservable.cs index e076a561..975e3fa9 100644 --- a/Wabbajack.Common/CustomObservable.cs +++ b/Wabbajack.Common/CustomObservable.cs @@ -1,12 +1,13 @@ using System; using System.Collections.Generic; -using System.Reactive; +using System.Reactive.Subjects; namespace Wabbajack.Common; -public class CustomObservable : ObservableBase +public class CustomObservable : IObservable { - private readonly List> _observers = new(); + private readonly Subject _subject = new(); + private readonly IEqualityComparer _equalityComparer; private T _value; public T Value @@ -14,46 +15,17 @@ public class CustomObservable : ObservableBase get => _value; set { - if (EqualityComparer.Default.Equals(value, _value)) return; + if (_equalityComparer.Equals(value, _value)) return; _value = value; - - foreach (var observer in _observers) - { - observer.OnNext(value); - } + _subject.OnNext(value); } } - public CustomObservable(T value) + public CustomObservable(T value, IEqualityComparer? equalityComparer = null) { _value = value; + _equalityComparer = equalityComparer ?? EqualityComparer.Default; } - protected override IDisposable SubscribeCore(IObserver observer) - { - if (!_observers.Contains(observer)) - { - _observers.Add(observer); - observer.OnNext(Value); - } - - return new Unsubscriber(_observers, observer); - } -} - -internal sealed class Unsubscriber : IDisposable -{ - private readonly List> _observers; - private readonly IObserver _observer; - - public Unsubscriber(List> observers, IObserver observer) - { - _observers = observers; - _observer = observer; - } - - public void Dispose() - { - if (_observers.Contains(_observer)) _observers.Remove(_observer); - } + public IDisposable Subscribe(IObserver observer) => _subject.Subscribe(observer); } \ No newline at end of file