Skip to content

Commit 922410c

Browse files
authored
Implement DispatchersProvider (#275)
1 parent a8a8d8f commit 922410c

File tree

51 files changed

+200
-20
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

51 files changed

+200
-20
lines changed

app/src/main/java/com/shifthackz/aisdv1/app/di/ProvidersModule.kt

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import com.shifthackz.aisdv1.core.common.appbuild.BuildType
88
import com.shifthackz.aisdv1.core.common.appbuild.BuildVersion
99
import com.shifthackz.aisdv1.core.common.file.FileProviderDescriptor
1010
import com.shifthackz.aisdv1.core.common.links.LinksProvider
11+
import com.shifthackz.aisdv1.core.common.schedulers.DispatchersProvider
1112
import com.shifthackz.aisdv1.core.common.schedulers.SchedulersProvider
1213
import com.shifthackz.aisdv1.core.common.time.TimeProvider
1314
import com.shifthackz.aisdv1.domain.entity.ServerSource
@@ -26,6 +27,8 @@ import com.shifthackz.aisdv1.presentation.activity.AiStableDiffusionActivity
2627
import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers
2728
import io.reactivex.rxjava3.core.Scheduler
2829
import io.reactivex.rxjava3.schedulers.Schedulers
30+
import kotlinx.coroutines.CoroutineDispatcher
31+
import kotlinx.coroutines.Dispatchers
2932
import org.koin.android.ext.koin.androidApplication
3033
import org.koin.android.ext.koin.androidContext
3134
import org.koin.dsl.module
@@ -132,6 +135,14 @@ val providersModule = module {
132135
}
133136
}
134137

138+
single<DispatchersProvider> {
139+
object : DispatchersProvider {
140+
override val io: CoroutineDispatcher = Dispatchers.IO
141+
override val ui: CoroutineDispatcher = Dispatchers.Main
142+
override val immediate: CoroutineDispatcher = Dispatchers.Main.immediate
143+
}
144+
}
145+
135146
single<SchedulersProvider> {
136147
object : SchedulersProvider {
137148
override val io: Scheduler = Schedulers.io()
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
package com.shifthackz.aisdv1.core.common.schedulers
2+
3+
import kotlinx.coroutines.CoroutineDispatcher
4+
5+
interface DispatchersProvider {
6+
val io: CoroutineDispatcher
7+
val ui: CoroutineDispatcher
8+
val immediate: CoroutineDispatcher
9+
}

gradle/libs.versions.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ exif = "1.3.7"
3939
apacheStringUtils = "3.16.0"
4040
composeGestures = "4.0.0"
4141
crop = "0.1.1"
42-
mvi = "1.0.1"
42+
mvi = "1.0.2"
4343
dayNightSwitch = "1.0.0"
4444
imagepicker = "v2.0.3"
4545
catppuccin = "0.1.2"

presentation/src/main/java/com/shifthackz/aisdv1/presentation/activity/AiStableDiffusionViewModel.kt

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package com.shifthackz.aisdv1.presentation.activity
22

33
import com.shifthackz.aisdv1.core.common.extensions.EmptyLambda
44
import com.shifthackz.aisdv1.core.common.log.errorLog
5+
import com.shifthackz.aisdv1.core.common.schedulers.DispatchersProvider
56
import com.shifthackz.aisdv1.core.common.schedulers.SchedulersProvider
67
import com.shifthackz.aisdv1.core.common.schedulers.subscribeOnMainThread
78
import com.shifthackz.aisdv1.core.viewmodel.MviRxViewModel
@@ -14,6 +15,7 @@ import com.shifthackz.aisdv1.presentation.navigation.router.main.MainRouter
1415
import io.reactivex.rxjava3.kotlin.subscribeBy
1516

1617
class AiStableDiffusionViewModel(
18+
dispatchersProvider: DispatchersProvider,
1719
schedulersProvider: SchedulersProvider,
1820
mainRouter: MainRouter,
1921
drawerRouter: DrawerRouter,
@@ -23,6 +25,8 @@ class AiStableDiffusionViewModel(
2325

2426
override val initialState = AppState()
2527

28+
override val effectDispatcher = dispatchersProvider.immediate
29+
2630
init {
2731
!mainRouter.observe()
2832
.subscribeOnMainThread(schedulersProvider)

presentation/src/main/java/com/shifthackz/aisdv1/presentation/di/ViewModelModule.kt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,7 @@ val viewModelModule = module {
5757
viewModel { parameters ->
5858
OnBoardingViewModel(
5959
launchSource = LaunchSource.fromKey(parameters.get()),
60+
dispatchersProvider = get(),
6061
mainRouter = get(),
6162
splashNavigationUseCase = get(),
6263
preferenceManager = get(),
@@ -69,6 +70,7 @@ val viewModelModule = module {
6970
val launchSource = LaunchSource.fromKey(parameters.get())
7071
ServerSetupViewModel(
7172
launchSource = launchSource,
73+
dispatchersProvider = get(),
7274
getConfigurationUseCase = get(),
7375
getLocalAiModelsUseCase = get(),
7476
fetchAndGetHuggingFaceModelsUseCase = get(),
@@ -88,6 +90,7 @@ val viewModelModule = module {
8890
viewModel { parameters ->
8991
GalleryDetailViewModel(
9092
itemId = parameters.get(),
93+
dispatchersProvider = get(),
9194
getGenerationResultUseCase = get(),
9295
getLastResultFromCacheUseCase = get(),
9396
deleteGalleryItemUseCase = get(),

presentation/src/main/java/com/shifthackz/aisdv1/presentation/modal/embedding/EmbeddingViewModel.kt

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package com.shifthackz.aisdv1.presentation.modal.embedding
22

33
import com.shifthackz.aisdv1.core.common.log.errorLog
4+
import com.shifthackz.aisdv1.core.common.schedulers.DispatchersProvider
45
import com.shifthackz.aisdv1.core.common.schedulers.SchedulersProvider
56
import com.shifthackz.aisdv1.core.common.schedulers.subscribeOnMainThread
67
import com.shifthackz.aisdv1.core.viewmodel.MviRxViewModel
@@ -12,13 +13,16 @@ import com.shifthackz.aisdv1.presentation.utils.ExtrasFormatter
1213
import io.reactivex.rxjava3.kotlin.subscribeBy
1314

1415
class EmbeddingViewModel(
16+
dispatchersProvider: DispatchersProvider,
1517
private val fetchAndGetEmbeddingsUseCase: FetchAndGetEmbeddingsUseCase,
1618
private val preferenceManager: PreferenceManager,
1719
private val schedulersProvider: SchedulersProvider,
1820
) : MviRxViewModel<EmbeddingState, EmbeddingIntent, ExtrasEffect>() {
1921

2022
override val initialState = EmbeddingState()
2123

24+
override val effectDispatcher = dispatchersProvider.immediate
25+
2226
init {
2327
updateState {
2428
it.copy(source = preferenceManager.source)

presentation/src/main/java/com/shifthackz/aisdv1/presentation/modal/extras/ExtrasViewModel.kt

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package com.shifthackz.aisdv1.presentation.modal.extras
22

33
import com.shifthackz.aisdv1.core.common.log.errorLog
4+
import com.shifthackz.aisdv1.core.common.schedulers.DispatchersProvider
45
import com.shifthackz.aisdv1.core.common.schedulers.SchedulersProvider
56
import com.shifthackz.aisdv1.core.common.schedulers.subscribeOnMainThread
67
import com.shifthackz.aisdv1.core.common.time.TimeProvider
@@ -16,6 +17,7 @@ import com.shifthackz.aisdv1.presentation.utils.ExtrasFormatter
1617
import io.reactivex.rxjava3.kotlin.subscribeBy
1718

1819
class ExtrasViewModel(
20+
dispatchersProvider: DispatchersProvider,
1921
private val fetchAndGetLorasUseCase: FetchAndGetLorasUseCase,
2022
private val fetchAndGetHyperNetworksUseCase: FetchAndGetHyperNetworksUseCase,
2123
private val schedulersProvider: SchedulersProvider,
@@ -25,6 +27,8 @@ class ExtrasViewModel(
2527

2628
override val initialState = ExtrasState()
2729

30+
override val effectDispatcher = dispatchersProvider.immediate
31+
2832
init {
2933
updateState {
3034
it.copy(source = preferenceManager.source)

presentation/src/main/java/com/shifthackz/aisdv1/presentation/modal/history/InputHistoryViewModel.kt

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ package com.shifthackz.aisdv1.presentation.modal.history
33
import androidx.paging.Pager
44
import androidx.paging.PagingConfig
55
import androidx.paging.PagingData
6+
import com.shifthackz.aisdv1.core.common.schedulers.DispatchersProvider
67
import com.shifthackz.aisdv1.core.common.schedulers.SchedulersProvider
78
import com.shifthackz.aisdv1.core.imageprocessing.Base64ToBitmapConverter
89
import com.shifthackz.aisdv1.core.viewmodel.MviRxViewModel
@@ -15,13 +16,16 @@ import com.shifthackz.android.core.mvi.EmptyState
1516
import kotlinx.coroutines.flow.Flow
1617

1718
class InputHistoryViewModel(
19+
dispatchersProvider: DispatchersProvider,
1820
private val getGenerationResultPagedUseCase: GetGenerationResultPagedUseCase,
1921
private val base64ToBitmapConverter: Base64ToBitmapConverter,
2022
private val schedulersProvider: SchedulersProvider,
2123
) : MviRxViewModel<EmptyState, EmptyIntent, EmptyEffect>() {
2224

2325
override val initialState = EmptyState
2426

27+
override val effectDispatcher = dispatchersProvider.immediate
28+
2529
private val config = PagingConfig(
2630
pageSize = Constants.PAGINATION_PAYLOAD_SIZE,
2731
initialLoadSize = Constants.PAGINATION_PAYLOAD_SIZE

presentation/src/main/java/com/shifthackz/aisdv1/presentation/modal/tag/EditTagViewModel.kt

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,18 @@
11
package com.shifthackz.aisdv1.presentation.modal.tag
22

3+
import com.shifthackz.aisdv1.core.common.schedulers.DispatchersProvider
34
import com.shifthackz.aisdv1.core.viewmodel.MviRxViewModel
45
import com.shifthackz.aisdv1.presentation.utils.Constants
56
import com.shifthackz.aisdv1.presentation.utils.ExtrasFormatter
67

7-
class EditTagViewModel : MviRxViewModel<EditTagState, EditTagIntent, EditTagEffect>() {
8+
class EditTagViewModel(
9+
dispatchersProvider: DispatchersProvider,
10+
) : MviRxViewModel<EditTagState, EditTagIntent, EditTagEffect>() {
811

912
override val initialState = EditTagState()
1013

14+
override val effectDispatcher = dispatchersProvider.immediate
15+
1116
override fun processIntent(intent: EditTagIntent) {
1217
when (intent) {
1318
is EditTagIntent.InitialData -> updateState {

presentation/src/main/java/com/shifthackz/aisdv1/presentation/screen/debug/DebugMenuViewModel.kt

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ package com.shifthackz.aisdv1.presentation.screen.debug
33
import com.shifthackz.aisdv1.core.common.file.FileProviderDescriptor
44
import com.shifthackz.aisdv1.core.common.log.FileLoggingTree
55
import com.shifthackz.aisdv1.core.common.log.errorLog
6+
import com.shifthackz.aisdv1.core.common.schedulers.DispatchersProvider
67
import com.shifthackz.aisdv1.core.common.schedulers.SchedulersProvider
78
import com.shifthackz.aisdv1.core.common.schedulers.subscribeOnMainThread
89
import com.shifthackz.aisdv1.core.model.asUiText
@@ -16,6 +17,7 @@ import io.reactivex.rxjava3.kotlin.subscribeBy
1617
import com.shifthackz.aisdv1.core.localization.R as LocalizationR
1718

1819
class DebugMenuViewModel(
20+
dispatchersProvider: DispatchersProvider,
1921
private val preferenceManager: PreferenceManager,
2022
private val fileProviderDescriptor: FileProviderDescriptor,
2123
private val debugInsertBadBase64UseCase: DebugInsertBadBase64UseCase,
@@ -26,6 +28,8 @@ class DebugMenuViewModel(
2628

2729
override val initialState = DebugMenuState()
2830

31+
override val effectDispatcher = dispatchersProvider.immediate
32+
2933
init {
3034
!preferenceManager
3135
.observe()

0 commit comments

Comments
 (0)