bartosz.malkowski
12/29/2022, 2:07 PMoverride fun observeAll(): Observable<List<RosterPresenceItem>> = queries.query(RosterDatabaseQueries::loadAll)
.observe {
it.executeAsList().map { e -> … }
}
Sometimes I need to push new content from database to all subscribers, when something will be published in
val updateSubject = PublishSubject<Unit>()
I thought that repeatWhen()
should be used for that, but I don't know how to use it.
Any hints?Arkadii Ivanov
12/29/2022, 3:15 PMbartosz.malkowski
12/30/2022, 7:21 AMbartosz.malkowski
12/30/2022, 7:24 AMArkadii Ivanov
12/30/2022, 9:08 AMoverride fun observeAll(): Observable<List<RosterPresenceItem>> =
merge(
queries
.query(RosterDatabaseQueries::loadAll)
.observe {
it.executeAsList().map { e -> … }
},
updateSubject.flatMapSingle {
queries
.query(RosterDatabaseQueries::loadAll)
.single {
it.executeAsList().map { e -> … }
}
}
)
bartosz.malkowski
12/30/2022, 9:45 AMfun <T> Observable<T>.powtorzGdy(observable: Observable<*>): Observable<T> = observable { emitter ->
var listener: Disposable? = this@powtorzGdy.subscribe(
onNext = emitter::onNext, onError = emitter::onError, onComplete = emitter::onComplete
)
observable.subscribe {
listener?.dispose()
listener = this@powtorzGdy.subscribe(
onNext = emitter::onNext, onError = emitter::onError, onComplete = emitter::onComplete
)
}
}
and it works, but I have no idea if it is done correctly 🙂Arkadii Ivanov
12/30/2022, 11:50 AMBehaviorSubject
+ switchMap
:
private val updateSubject = BehaviorSubject(Unit)
override fun observeAll(): Observable<List<RosterPresenceItem>> =
updateSubject.switchMap {
queries
.query(RosterDatabaseQueries::loadAll)
.observe {
it.executeAsList().map { e -> … }
}
}
Here switchMap
replaces your powtorzGdy
function.bartosz.malkowski
12/30/2022, 12:24 PM