Skip to content

Instantly share code, notes, and snippets.

@exallium
Last active June 20, 2017 17:21
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save exallium/00b06c46f48e27182a679ea310cd84a5 to your computer and use it in GitHub Desktop.
Save exallium/00b06c46f48e27182a679ea310cd84a5 to your computer and use it in GitHub Desktop.
Firebase Callback to Rx Observable
private class ValueEventListenerToEmitter(private val emitter: Emitter<DataSnapshot>) : ValueEventListener {
override fun onCancelled(error: DatabaseError) {
emitter.onError(error.toException())
}
override fun onDataChange(snapshot: DataSnapshot) {
emitter.onNext(snapshot)
}
}
private fun (() -> DatabaseReference).observe(): Observable<DataSnapshot> = Observable.create { emitter ->
val dbRef = this()
val eventListener = ValueEventListenerToEmitter(emitter)
dbRef.addValueEventListener(eventListener)
emitter.setCancellable { dbRef.removeEventListener(eventListener) }
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment