2727public final class ObservableRedo <T > extends AbstractObservableWithUpstream <T , T > {
2828 final Function <? super Observable <Notification <Object >>, ? extends ObservableSource <?>> manager ;
2929
30+ final boolean retryMode ;
31+
3032 public ObservableRedo (ObservableSource <T > source ,
31- Function <? super Observable <Notification <Object >>, ? extends ObservableSource <?>> manager ) {
33+ Function <? super Observable <Notification <Object >>, ? extends ObservableSource <?>> manager ,
34+ boolean retryMode ) {
3235 super (source );
3336 this .manager = manager ;
37+ this .retryMode = retryMode ;
3438 }
3539
3640 @ Override
3741 public void subscribeActual (Observer <? super T > s ) {
3842
3943 Subject <Notification <Object >> subject = BehaviorSubject .<Notification <Object >>create ().toSerialized ();
4044
41- final RedoObserver <T > parent = new RedoObserver <T >(s , subject , source );
45+ final RedoObserver <T > parent = new RedoObserver <T >(s , subject , source , retryMode );
4246
4347 ToNotificationObserver <Object > actionObserver = new ToNotificationObserver <Object >(new Consumer <Notification <Object >>() {
4448 @ Override
@@ -73,13 +77,16 @@ static final class RedoObserver<T> extends AtomicBoolean implements Observer<T>
7377 final ObservableSource <? extends T > source ;
7478 final SequentialDisposable arbiter ;
7579
80+ final boolean retryMode ;
81+
7682 final AtomicInteger wip = new AtomicInteger ();
7783
78- RedoObserver (Observer <? super T > actual , Subject <Notification <Object >> subject , ObservableSource <? extends T > source ) {
84+ RedoObserver (Observer <? super T > actual , Subject <Notification <Object >> subject , ObservableSource <? extends T > source , boolean retryMode ) {
7985 this .actual = actual ;
8086 this .subject = subject ;
8187 this .source = source ;
8288 this .arbiter = new SequentialDisposable ();
89+ this .retryMode = retryMode ;
8390 this .lazySet (true );
8491 }
8592
@@ -96,14 +103,22 @@ public void onNext(T t) {
96103 @ Override
97104 public void onError (Throwable t ) {
98105 if (compareAndSet (false , true )) {
99- subject .onNext (Notification .createOnError (t ));
106+ if (retryMode ) {
107+ subject .onNext (Notification .createOnError (t ));
108+ } else {
109+ subject .onError (t );
110+ }
100111 }
101112 }
102113
103114 @ Override
104115 public void onComplete () {
105116 if (compareAndSet (false , true )) {
106- subject .onNext (Notification .createOnComplete ());
117+ if (retryMode ) {
118+ subject .onComplete ();
119+ } else {
120+ subject .onNext (Notification .createOnComplete ());
121+ }
107122 }
108123 }
109124
0 commit comments