package <%= appPackage %>.extensions import <%= appPackage %>.ui.base.BasePresenter import <%= appPackage %>.ui.base.PresenterView import nucleus.presenter.RxPresenter import rx.Observable import rx.Single import rx.functions.Action1 import rx.lang.kotlin.toSingletonObservable fun BasePresenter.justView(observable: Observable, delivered: (V) -> Unit, deliveredError: (view: V, result: Throwable) -> Unit, throwable: (t: Throwable) -> Unit) { add(deliverFirst().call(observable).subscribe(split({ v, o -> delivered(v) }) { v, t -> deliveredError(v, t) }, Action1 { throwable(it) })) } fun BasePresenter.singleView(single: Single, delivered: (V) -> Unit, deliveredError: (view: V, result: Throwable) -> Unit, throwable: (t: Throwable) -> Unit) { add(deliverFirst().call(single.toObservable()).subscribe(split({ v, o -> delivered(v) }) { v, t -> deliveredError(v, t) }, Action1 { throwable(it) })) } fun BasePresenter.justView(delivered: (view: V) -> Unit, deliveredError: (view: V, error: Throwable) -> Unit = { v, s -> }, throwable: (Throwable) -> Unit = {}) { justView(toSingletonObservable(), delivered, deliveredError, throwable) } fun BasePresenter.singleView(delivered: (view: V) -> Unit, deliveredError: (view: V, error: Throwable) -> Unit = { v, s -> }, throwable: (Throwable) -> Unit = {}) { singleView(Single.just(this), delivered, deliveredError, throwable) } fun BasePresenter.compose(observable: Observable, delivered: (V, R) -> Unit, deliveredError: (view: V, result: Throwable) -> Unit = { v, t -> t.printStackTrace() }, throwable: (t: Throwable) -> Unit = { t -> t.printStackTrace() }) { add(deliverFirst().call(observable).subscribe(split({ v, r -> delivered(v, r) }) { v, t -> deliveredError(v, t) }, Action1 { throwable(it) })) }