-
Notifications
You must be signed in to change notification settings - Fork 1
/
HomeViewModel.kt
57 lines (49 loc) · 1.76 KB
/
HomeViewModel.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
package com.dluvian.voyage.core.viewModel
import androidx.compose.foundation.lazy.LazyListState
import androidx.lifecycle.ViewModel
import androidx.lifecycle.viewModelScope
import com.dluvian.voyage.core.DELAY_10SEC
import com.dluvian.voyage.core.HomeViewAction
import com.dluvian.voyage.core.HomeViewAppend
import com.dluvian.voyage.core.HomeViewRefresh
import com.dluvian.voyage.core.HomeViewSubAccountAndTrustData
import com.dluvian.voyage.core.launchIO
import com.dluvian.voyage.core.model.Paginator
import com.dluvian.voyage.data.model.HomeFeedSetting
import com.dluvian.voyage.data.nostr.LazyNostrSubscriber
import com.dluvian.voyage.data.provider.FeedProvider
import kotlinx.coroutines.Job
import kotlinx.coroutines.delay
class HomeViewModel(
feedProvider: FeedProvider,
private val lazyNostrSubscriber: LazyNostrSubscriber,
val feedState: LazyListState,
) : ViewModel() {
val paginator = Paginator(
feedProvider = feedProvider,
scope = viewModelScope,
subCreator = lazyNostrSubscriber.subCreator
)
init {
paginator.init(setting = HomeFeedSetting)
}
fun handle(action: HomeViewAction) {
when (action) {
is HomeViewRefresh -> refresh()
is HomeViewAppend -> paginator.append()
is HomeViewSubAccountAndTrustData -> subMyAccountAndTrustData()
}
}
private var job: Job? = null
private fun subMyAccountAndTrustData() {
if (job?.isActive == true) return
job = viewModelScope.launchIO {
lazyNostrSubscriber.lazySubMyAccountAndTrustData()
delay(DELAY_10SEC)
}
}
private fun refresh() {
lazyNostrSubscriber.subCreator.unsubAll()
paginator.refresh(onSub = { subMyAccountAndTrustData() })
}
}