Advertisement
Guest User

Rx Chain Issue

a guest
May 24th, 2018
94
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Kotlin 1.95 KB | None | 0 0
  1. // Logcat
  2. I/PointRepository$saveEvent: EventDto(id=c2b7cfd8-9a80-4e81-99e4-5f2a4a4fd13c, event=Event(type=hazard, message=, location=LatLon(lat=0.0, lon=0.0)), date=Thu May 24 17:02:45 GMT+03:00 2018)
  3. I/PointRepository$saveEvent: EventDto(id=c2b7cfd8-9a80-4e81-99e4-5f2a4a4fd13c, event=Event(type=hazard, message=, location=LatLon(lat=0.0, lon=0.0)), date=Thu May 24 17:02:45 GMT+03:00 2018)
  4. I/PointRepository$saveEvent: Completed
  5.  
  6. // Presenter
  7. fun onReportClicked(id: Int, text: String) {
  8.     interactor.createEvent(id, text).subscribe({ router.exit() })
  9. }
  10.  
  11. // Interactor
  12. fun createEvent(id: Int, message: String): Completable {
  13.     return delegate.getCameraPositionChanges()
  14.             .flatMapSingle { Single.just(it) }
  15.             .map { Event(strings.getEventType(id), message, it.target) }
  16.             .flatMapCompletable { repository.saveEvent(it) }
  17.             .doOnComplete {
  18.                 Timber.i("Completed")
  19.             }
  20.             .doOnTerminate {
  21.                 Timber.i("Terminated")
  22.             }
  23.             .observeOn(schedulers.ui())
  24. }
  25.  
  26. // Repository
  27. fun saveEvent(event: Event): Completable {
  28.     return Single.fromCallable { event }
  29.             .observeOn(schedulers.computation())
  30.             .map(eventsMapper::mapToDto)
  31.             .doOnSuccess { Timber.i(it.toString()) }
  32.             .observeOn(schedulers.io())
  33.             .flatMap { this.saveToDatabaseAndSchedule(it) }
  34.             .doOnSuccess { Timber.i(it.toString()) }
  35.             .toCompletable()
  36.             .doOnComplete { Timber.i("Completed") }
  37.             .observeOn(schedulers.ui())
  38. }
  39.  
  40. // Repository#saveToDabaseAndSchedule
  41. private fun saveToDatabaseAndSchedule(dto: EventDto): Single<EventDto> {
  42.     return Single.fromCallable {
  43.         val session = sessionStore.getCurrentSession()
  44.         val entity = eventsMapper.mapToEntity(dto, session)
  45.         eventDao.insert(entity)
  46.         works.scheduleEventsSync()
  47.         return@fromCallable dto
  48.     }
  49. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement