Skip to content

Commit bfe4dbb

Browse files
authored
txt2img, img2img | Form input prompt (#49)
* Form input prompt - Patch 1 * Form input prompt - Patch 2 * Form input prompt - Patch 3 * Form input prompt - Patch 4 * Translations * Translations
1 parent 9d2a416 commit bfe4dbb

32 files changed

+697
-121
lines changed

domain/src/main/java/com/shifthackz/aisdv1/domain/di/DomainModule.kt

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -18,10 +18,10 @@ import com.shifthackz.aisdv1.domain.usecase.gallery.DeleteGalleryItemUseCase
1818
import com.shifthackz.aisdv1.domain.usecase.gallery.DeleteGalleryItemUseCaseImpl
1919
import com.shifthackz.aisdv1.domain.usecase.gallery.GetAllGalleryUseCase
2020
import com.shifthackz.aisdv1.domain.usecase.gallery.GetAllGalleryUseCaseImpl
21-
import com.shifthackz.aisdv1.domain.usecase.gallery.GetGalleryItemUseCase
22-
import com.shifthackz.aisdv1.domain.usecase.gallery.GetGalleryItemUseCaseImpl
23-
import com.shifthackz.aisdv1.domain.usecase.gallery.GetGalleryPageUseCase
24-
import com.shifthackz.aisdv1.domain.usecase.gallery.GetGalleryPageUseCaseImpl
21+
import com.shifthackz.aisdv1.domain.usecase.generation.GetGenerationResultPagedUseCase
22+
import com.shifthackz.aisdv1.domain.usecase.generation.GetGenerationResultPagedUseCaseImpl
23+
import com.shifthackz.aisdv1.domain.usecase.generation.GetGenerationResultUseCase
24+
import com.shifthackz.aisdv1.domain.usecase.generation.GetGenerationResultUseCaseImpl
2525
import com.shifthackz.aisdv1.domain.usecase.generation.ImageToImageUseCase
2626
import com.shifthackz.aisdv1.domain.usecase.generation.ImageToImageUseCaseImpl
2727
import com.shifthackz.aisdv1.domain.usecase.generation.SaveGenerationResultUseCase
@@ -56,9 +56,9 @@ val domainModule = module {
5656
factoryOf(::DataPreLoaderUseCaseImpl) bind DataPreLoaderUseCase::class
5757
factoryOf(::GetStableDiffusionModelsUseCaseImpl) bind GetStableDiffusionModelsUseCase::class
5858
factoryOf(::SelectStableDiffusionModelUseCaseImpl) bind SelectStableDiffusionModelUseCase::class
59-
factoryOf(::GetGalleryPageUseCaseImpl) bind GetGalleryPageUseCase::class
59+
factoryOf(::GetGenerationResultPagedUseCaseImpl) bind GetGenerationResultPagedUseCase::class
6060
factoryOf(::GetAllGalleryUseCaseImpl) bind GetAllGalleryUseCase::class
61-
factoryOf(::GetGalleryItemUseCaseImpl) bind GetGalleryItemUseCase::class
61+
factoryOf(::GetGenerationResultUseCaseImpl) bind GetGenerationResultUseCase::class
6262
factoryOf(::DeleteGalleryItemUseCaseImpl) bind DeleteGalleryItemUseCase::class
6363
factoryOf(::GetStableDiffusionSamplersUseCaseImpl) bind GetStableDiffusionSamplersUseCase::class
6464
factoryOf(::SplashNavigationUseCaseImpl) bind SplashNavigationUseCase::class

domain/src/main/java/com/shifthackz/aisdv1/domain/usecase/gallery/GetGalleryPageUseCase.kt renamed to domain/src/main/java/com/shifthackz/aisdv1/domain/usecase/generation/GetGenerationResultPagedUseCase.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
1-
package com.shifthackz.aisdv1.domain.usecase.gallery
1+
package com.shifthackz.aisdv1.domain.usecase.generation
22

33
import com.shifthackz.aisdv1.domain.entity.AiGenerationResult
44
import io.reactivex.rxjava3.core.Single
55

6-
interface GetGalleryPageUseCase {
6+
interface GetGenerationResultPagedUseCase {
77
operator fun invoke(limit: Int, offset: Int): Single<List<AiGenerationResult>>
88
}

domain/src/main/java/com/shifthackz/aisdv1/domain/usecase/gallery/GetGalleryPageUseCaseImpl.kt renamed to domain/src/main/java/com/shifthackz/aisdv1/domain/usecase/generation/GetGenerationResultPagedUseCaseImpl.kt

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
1-
package com.shifthackz.aisdv1.domain.usecase.gallery
1+
package com.shifthackz.aisdv1.domain.usecase.generation
22

33
import com.shifthackz.aisdv1.domain.repository.GenerationResultRepository
44

5-
internal class GetGalleryPageUseCaseImpl(
5+
internal class GetGenerationResultPagedUseCaseImpl(
66
private val repository: GenerationResultRepository,
7-
) : GetGalleryPageUseCase {
7+
) : GetGenerationResultPagedUseCase {
88

99
override operator fun invoke(limit: Int, offset: Int) = repository.getPage(limit, offset)
1010
}

domain/src/main/java/com/shifthackz/aisdv1/domain/usecase/gallery/GetGalleryItemUseCase.kt renamed to domain/src/main/java/com/shifthackz/aisdv1/domain/usecase/generation/GetGenerationResultUseCase.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
1-
package com.shifthackz.aisdv1.domain.usecase.gallery
1+
package com.shifthackz.aisdv1.domain.usecase.generation
22

33
import com.shifthackz.aisdv1.domain.entity.AiGenerationResult
44
import io.reactivex.rxjava3.core.Single
55

6-
interface GetGalleryItemUseCase {
6+
interface GetGenerationResultUseCase {
77
operator fun invoke(id: Long): Single<AiGenerationResult>
88
}

domain/src/main/java/com/shifthackz/aisdv1/domain/usecase/gallery/GetGalleryItemUseCaseImpl.kt renamed to domain/src/main/java/com/shifthackz/aisdv1/domain/usecase/generation/GetGenerationResultUseCaseImpl.kt

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
1-
package com.shifthackz.aisdv1.domain.usecase.gallery
1+
package com.shifthackz.aisdv1.domain.usecase.generation
22

33
import com.shifthackz.aisdv1.domain.repository.GenerationResultRepository
44

5-
internal class GetGalleryItemUseCaseImpl(
5+
internal class GetGenerationResultUseCaseImpl(
66
private val repository: GenerationResultRepository,
7-
) : GetGalleryItemUseCase {
7+
) : GetGenerationResultUseCase {
88

99
override operator fun invoke(id: Long) = repository.getById(id)
1010
}
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
package com.shifthackz.aisdv1.presentation.core
2+
3+
import com.shifthackz.aisdv1.domain.entity.AiGenerationResult
4+
import io.reactivex.rxjava3.subjects.PublishSubject
5+
6+
class GenerationFormUpdateEvent {
7+
8+
private val sRoute: PublishSubject<AiGenerationResult.Type> = PublishSubject.create()
9+
private val sTxt2Img: PublishSubject<AiGenerationResult> = PublishSubject.create()
10+
private val sImg2Img: PublishSubject<AiGenerationResult> = PublishSubject.create()
11+
12+
fun update(generation: AiGenerationResult, route: AiGenerationResult.Type) {
13+
sRoute.onNext(route)
14+
when (route) {
15+
AiGenerationResult.Type.TEXT_TO_IMAGE -> sTxt2Img
16+
AiGenerationResult.Type.IMAGE_TO_IMAGE -> sImg2Img
17+
}.onNext(generation)
18+
}
19+
20+
fun observeRoute() = sRoute
21+
22+
fun observeTxt2ImgForm() = sTxt2Img
23+
24+
fun observeImg2ImgForm() = sImg2Img
25+
}

presentation/src/main/java/com/shifthackz/aisdv1/presentation/core/GenerationMviViewModel.kt

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ import com.shifthackz.aisdv1.core.common.schedulers.SchedulersProvider
1010
import com.shifthackz.aisdv1.core.common.schedulers.subscribeOnMainThread
1111
import com.shifthackz.aisdv1.core.ui.MviEffect
1212
import com.shifthackz.aisdv1.core.viewmodel.MviRxViewModel
13+
import com.shifthackz.aisdv1.domain.entity.AiGenerationResult
1314
import com.shifthackz.aisdv1.domain.entity.StableDiffusionSampler
1415
import com.shifthackz.aisdv1.domain.preference.PreferenceManager
1516
import com.shifthackz.aisdv1.domain.usecase.coin.ObserveCoinsUseCase
@@ -73,6 +74,26 @@ abstract class GenerationMviViewModel<S : GenerationMviState, E : MviEffect>(
7374
}
7475
}
7576

77+
open fun updateFormPreviousAiGeneration(ai: AiGenerationResult) = currentState
78+
.copyState(
79+
advancedOptionsVisible = true,
80+
prompt = ai.prompt,
81+
negativePrompt = ai.negativePrompt,
82+
width = "${ai.width}",
83+
height = "${ai.height}",
84+
seed = ai.seed,
85+
subSeed = ai.subSeed,
86+
subSeedStrength = ai.subSeedStrength,
87+
samplingSteps = ai.samplingSteps,
88+
cfgScale = ai.cfgScale,
89+
restoreFaces = ai.restoreFaces,
90+
)
91+
.let { state ->
92+
if (!state.availableSamplers.contains(ai.sampler)) state
93+
else state.copyState(selectedSampler = ai.sampler)
94+
}
95+
.let(::setGenerationState)
96+
7697
fun toggleAdvancedOptions(value: Boolean) = currentState
7798
.copyState(advancedOptionsVisible = value)
7899
.let(::setGenerationState)
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,18 @@
11
package com.shifthackz.aisdv1.presentation.di
22

3+
import com.shifthackz.aisdv1.presentation.core.GenerationFormUpdateEvent
34
import com.shifthackz.aisdv1.presentation.screen.gallery.detail.GalleryDetailBitmapExporter
45
import com.shifthackz.aisdv1.presentation.screen.gallery.detail.GalleryDetailSharing
56
import com.shifthackz.aisdv1.presentation.screen.gallery.list.GalleryExporter
67
import com.shifthackz.aisdv1.presentation.screen.settings.SettingsStateProducer
78
import org.koin.core.module.dsl.factoryOf
9+
import org.koin.core.module.dsl.singleOf
810
import org.koin.dsl.module
911

1012
val presentationModule = (viewModelModule + module {
1113
factoryOf(::GalleryExporter)
1214
factoryOf(::GalleryDetailBitmapExporter)
1315
factoryOf(::GalleryDetailSharing)
1416
factoryOf(::SettingsStateProducer)
17+
singleOf(::GenerationFormUpdateEvent)
1518
}).toTypedArray()

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

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package com.shifthackz.aisdv1.presentation.di
22

33
import com.shifthackz.aisdv1.core.common.links.LinksProvider
44
import com.shifthackz.aisdv1.presentation.activity.AiStableDiffusionViewModel
5+
import com.shifthackz.aisdv1.presentation.modal.history.InputHistoryViewModel
56
import com.shifthackz.aisdv1.presentation.screen.gallery.detail.GalleryDetailViewModel
67
import com.shifthackz.aisdv1.presentation.screen.gallery.list.GalleryViewModel
78
import com.shifthackz.aisdv1.presentation.screen.home.HomeNavigationViewModel
@@ -33,6 +34,7 @@ val viewModelModule = module {
3334
viewModelOf(::VersionCheckerViewModel)
3435
viewModelOf(::AvailableCoinsViewModel)
3536
viewModelOf(::MotdViewModel)
37+
viewModelOf(::InputHistoryViewModel)
3638

3739
viewModel { parameters ->
3840
val launchSource = ServerSetupLaunchSource.fromKey(parameters.get())
@@ -54,6 +56,6 @@ val viewModelModule = module {
5456
}
5557

5658
viewModel { parameters ->
57-
GalleryDetailViewModel(parameters.get(), get(), get(), get(), get(), get(), get())
59+
GalleryDetailViewModel(parameters.get(), get(), get(), get(), get(), get(), get(), get())
5860
}
5961
}
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
package com.shifthackz.aisdv1.presentation.modal.history
2+
3+
import android.graphics.Bitmap
4+
import com.shifthackz.aisdv1.core.ui.MviState
5+
import com.shifthackz.aisdv1.domain.entity.AiGenerationResult
6+
7+
data class InputHistoryItemUi(
8+
val generationResult: AiGenerationResult,
9+
val bitmap: Bitmap,
10+
)
11+
12+
object InputHistoryState : MviState

0 commit comments

Comments
 (0)