-
Notifications
You must be signed in to change notification settings - Fork 557
/
EventDetailsViewModel.kt
90 lines (80 loc) · 3.36 KB
/
EventDetailsViewModel.kt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
package org.fossasia.openevent.general.event
import androidx.lifecycle.LiveData
import androidx.lifecycle.MutableLiveData
import androidx.lifecycle.ViewModel
import io.reactivex.android.schedulers.AndroidSchedulers
import io.reactivex.disposables.CompositeDisposable
import io.reactivex.schedulers.Schedulers
import org.fossasia.openevent.general.BuildConfig.MAPBOX_KEY
import org.fossasia.openevent.general.R
import org.fossasia.openevent.general.auth.User
import org.fossasia.openevent.general.common.SingleLiveEvent
import org.fossasia.openevent.general.data.Resource
import org.fossasia.openevent.general.event.feedback.Feedback
import timber.log.Timber
class EventDetailsViewModel(private val eventService: EventService, private val resource: Resource) : ViewModel() {
private val compositeDisposable = CompositeDisposable()
private val mutableProgress = MutableLiveData<Boolean>()
val progress: LiveData<Boolean> = mutableProgress
private val mutableUser = MutableLiveData<User>()
val user: LiveData<User> = mutableUser
private val mutableError = SingleLiveEvent<String>()
val error: LiveData<String> = mutableError
private val mutableEvent = MutableLiveData<Event>()
val event: LiveData<Event> = mutableEvent
private val mutableEventFeedback = MutableLiveData<List<Feedback>>()
val eventFeedback: LiveData<List<Feedback>> = mutableEventFeedback
fun loadEventFeedback(id: Long) {
compositeDisposable.add(eventService.getEventFeedback(id)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe({
mutableEventFeedback.value = it
}, {
Timber.e(it, "Error fetching events feedback")
})
)
}
fun loadEvent(id: Long) {
if (id.equals(-1)) {
mutableError.value = resource.getString(R.string.error_fetching_event_message)
return
}
compositeDisposable.add(eventService.getEvent(id)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.doOnSubscribe {
mutableProgress.value = true
}.doFinally {
mutableProgress.value = false
}.subscribe({
mutableEvent.value = it
}, {
Timber.e(it, "Error fetching event %d", id)
mutableError.value = resource.getString(R.string.error_fetching_event_message)
})
)
}
fun loadMap(event: Event): String {
// location handling
val BASE_URL = "https://api.mapbox.com/v4/mapbox.emerald/pin-l-marker+673ab7"
val LOCATION = "(" + event.longitude + "," + event.latitude + ")/" + event.longitude + "," + event.latitude
return "$BASE_URL$LOCATION,15/900x500.png?access_token=$MAPBOX_KEY"
}
fun setFavorite(eventId: Long, favorite: Boolean) {
compositeDisposable.add(eventService.setFavorite(eventId, favorite)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe({
Timber.d("Success")
}, {
Timber.e(it, "Error")
mutableError.value = resource.getString(R.string.error)
})
)
}
override fun onCleared() {
super.onCleared()
compositeDisposable.clear()
}
}