Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions app/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@ android {
buildConfigField("String", "OPEN_AI_INFO_URL", "\"https://platform.openai.com/api-keys\"")
buildConfigField("String", "STABILITY_AI_INFO_URL", "\"https://platform.stability.ai/\"")
buildConfigField("String", "UPDATE_API_URL", "\"https://sdai.moroz.cc\"")
buildConfigField("String", "REPORT_API_URL", "\"https://sdai-report.moroz.cc\"")
buildConfigField("String", "DEMO_MODE_API_URL", "\"https://sdai.moroz.cc\"")
buildConfigField("String", "POLICY_URL", "\"https://sdai.moroz.cc/policy.html\"")
buildConfigField("String", "DONATE_URL", "\"https://www.buymeacoffee.com/shifthackz\"")
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,7 @@ val providersModule = module {
object : ApiUrlProvider {
override val stableDiffusionAutomaticApiUrl: String = DEFAULT_SERVER_URL
override val stableDiffusionAppApiUrl: String = BuildConfig.UPDATE_API_URL
override val stableDiffusionReportApiUrl: String = BuildConfig.REPORT_API_URL
override val hordeApiUrl: String = BuildConfig.HORDE_AI_URL
override val imageCdnApiUrl: String = BuildConfig.IMAGE_CDN_URL
override val huggingFaceApiUrl: String = BuildConfig.HUGGING_FACE_URL
Expand Down
13 changes: 13 additions & 0 deletions core/localization/src/main/res/values-ru/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -361,4 +361,17 @@
<string name="on_boarding_page_local_title">[Офлайн] генерация\nLocal Diffusion.</string>
<string name="on_boarding_page_ui_title">Настройте приложение,\nсделайте его [своим]!</string>
<string name="on_boarding_page_provider_title">[Свобода] выбора\nпровайедра генерации.</string>

<string name="report_title">Пожаловаться</string>
<string name="report_submit">Отправить жалобу</string>
<string name="report_description">Описание жалобы</string>
<string name="report_sent">Ваша жалоба отправлена!</string>
<string name="report_done">Вернуться назад</string>

<string name="report_reason_inappropriate_content">Неподобающий контент</string>
<string name="report_reason_violence">Насилие</string>
<string name="report_reason_hateful_speech">Ненавистнические высказывания</string>
<string name="report_reason_intellectual">Нарушение интеллектуальной собственности</string>
<string name="report_reason_adult">Контент для взрослых</string>
<string name="report_reason_other">Другое</string>
</resources>
13 changes: 13 additions & 0 deletions core/localization/src/main/res/values-tr/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -361,4 +361,17 @@
<string name="on_boarding_page_local_title">[Çevrimdışı] nesil\nYerel Dağıtım.</string>
<string name="on_boarding_page_ui_title">Uygulamayı özelleştirin,\n[kendinizin] yapın!</string>
<string name="on_boarding_page_provider_title">Nesil sağlayıcıyı\nseçme [Özgürlüğü].</string>

<string name="report_title">Görüntüyü Şikayet Et</string>
<string name="report_submit">Şikayeti Gönder</string>
<string name="report_description">Şikayet açıklaması</string>
<string name="report_sent">Şikayetiniz gönderildi!</string>
<string name="report_done">Geri dön</string>

<string name="report_reason_inappropriate_content">Uygunsuz içerik</string>
<string name="report_reason_violence">Şiddet</string>
<string name="report_reason_hateful_speech">Nefret söylemi</string>
<string name="report_reason_intellectual">Fikri mülkiyet ihlali</string>
<string name="report_reason_adult">Yetişkin içeriği</string>
<string name="report_reason_other">Diğer</string>
</resources>
13 changes: 13 additions & 0 deletions core/localization/src/main/res/values-uk/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -361,4 +361,17 @@
<string name="on_boarding_page_local_title">[Офлайн] генерація\nLocal Diffusion.</string>
<string name="on_boarding_page_ui_title">Налаштуйте додаток,\nзробіть його [своїм]!</string>
<string name="on_boarding_page_provider_title">[Свобода] вибору\nпостачальника генерації.</string>

<string name="report_title">Поскаржитись</string>
<string name="report_submit">Надіслати скаргу</string>
<string name="report_description">Опис скарги</string>
<string name="report_sent">Вашу скаргу надіслано!</string>
<string name="report_done">Повернутися назад</string>

<string name="report_reason_inappropriate_content">Неприйнятний вміст</string>
<string name="report_reason_violence">Насильство</string>
<string name="report_reason_hateful_speech">Мовлення ненависті</string>
<string name="report_reason_intellectual">Порушення авторських прав</string>
<string name="report_reason_adult">Контент для дорослих</string>
<string name="report_reason_other">Інше</string>
</resources>
13 changes: 13 additions & 0 deletions core/localization/src/main/res/values-zh/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -427,4 +427,17 @@
<string name="on_boarding_page_local_title">[离线]生成\n本地扩散。</string>
<string name="on_boarding_page_ui_title">自定义应用程序,\n让它成为[您的]!</string>
<string name="on_boarding_page_provider_title">[自由]选择\n代提供商。</string>

<string name="report_title">举报图片</string>
<string name="report_submit">提交举报</string>
<string name="report_description">举报描述</string>
<string name="report_sent">您的举报已发送!</string>
<string name="report_done">返回</string>

<string name="report_reason_inappropriate_content">不适当内容</string>
<string name="report_reason_violence">暴力</string>
<string name="report_reason_hateful_speech">仇恨言论</string>
<string name="report_reason_intellectual">知识产权侵犯</string>
<string name="report_reason_adult">成人内容</string>
<string name="report_reason_other">其他</string>
</resources>
13 changes: 13 additions & 0 deletions core/localization/src/main/res/values/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -388,4 +388,17 @@
<string name="on_boarding_page_local_title">[Offline] Local Diffusion\nAI generation.</string>
<string name="on_boarding_page_ui_title">Configure, customize,\nmake it [yours]!</string>
<string name="on_boarding_page_provider_title">[Freedom] to choose your\nAI generation provider.</string>

<string name="report_title">Report Image</string>
<string name="report_submit">Submit Report</string>
<string name="report_description">Report description</string>
<string name="report_sent">Your report was sent!</string>
<string name="report_done">Go back</string>

<string name="report_reason_inappropriate_content">Inappropriate content</string>
<string name="report_reason_violence">Violence</string>
<string name="report_reason_hateful_speech">Hateful speech</string>
<string name="report_reason_intellectual">Intellectual property infringement</string>
<string name="report_reason_adult">Adult content</string>
<string name="report_reason_other">Other</string>
</resources>
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ import com.shifthackz.aisdv1.data.remote.HuggingFaceGenerationRemoteDataSource
import com.shifthackz.aisdv1.data.remote.HuggingFaceModelsRemoteDataSource
import com.shifthackz.aisdv1.data.remote.OpenAiGenerationRemoteDataSource
import com.shifthackz.aisdv1.data.remote.RandomImageRemoteDataSource
import com.shifthackz.aisdv1.data.remote.ReportRemoteDataSource
import com.shifthackz.aisdv1.data.remote.ServerConfigurationRemoteDataSource
import com.shifthackz.aisdv1.data.remote.StabilityAiCreditsRemoteDataSource
import com.shifthackz.aisdv1.data.remote.StabilityAiEnginesRemoteDataSource
Expand All @@ -34,6 +35,7 @@ import com.shifthackz.aisdv1.domain.datasource.HuggingFaceModelsDataSource
import com.shifthackz.aisdv1.domain.datasource.LorasDataSource
import com.shifthackz.aisdv1.domain.datasource.OpenAiGenerationDataSource
import com.shifthackz.aisdv1.domain.datasource.RandomImageDataSource
import com.shifthackz.aisdv1.domain.datasource.ReportDataSource
import com.shifthackz.aisdv1.domain.datasource.ServerConfigurationDataSource
import com.shifthackz.aisdv1.domain.datasource.StabilityAiCreditsDataSource
import com.shifthackz.aisdv1.domain.datasource.StabilityAiEnginesDataSource
Expand Down Expand Up @@ -94,6 +96,7 @@ val remoteDataSourceModule = module {
factoryOf(::StabilityAiGenerationRemoteDataSource) bind StabilityAiGenerationDataSource.Remote::class
factoryOf(::StabilityAiCreditsRemoteDataSource) bind StabilityAiCreditsDataSource.Remote::class
factoryOf(::StabilityAiEnginesRemoteDataSource) bind StabilityAiEnginesDataSource.Remote::class
factoryOf(::ReportRemoteDataSource) bind ReportDataSource.Remote::class

factory<ServerConnectivityGateway> {
val lambda: () -> Boolean = {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ import com.shifthackz.aisdv1.data.repository.LorasRepositoryImpl
import com.shifthackz.aisdv1.data.repository.MediaPipeGenerationRepositoryImpl
import com.shifthackz.aisdv1.data.repository.OpenAiGenerationRepositoryImpl
import com.shifthackz.aisdv1.data.repository.RandomImageRepositoryImpl
import com.shifthackz.aisdv1.data.repository.ReportRepositoryImpl
import com.shifthackz.aisdv1.data.repository.ServerConfigurationRepositoryImpl
import com.shifthackz.aisdv1.data.repository.StabilityAiCreditsRepositoryImpl
import com.shifthackz.aisdv1.data.repository.StabilityAiEnginesRepositoryImpl
Expand All @@ -37,6 +38,7 @@ import com.shifthackz.aisdv1.domain.repository.LorasRepository
import com.shifthackz.aisdv1.domain.repository.MediaPipeGenerationRepository
import com.shifthackz.aisdv1.domain.repository.OpenAiGenerationRepository
import com.shifthackz.aisdv1.domain.repository.RandomImageRepository
import com.shifthackz.aisdv1.domain.repository.ReportRepository
import com.shifthackz.aisdv1.domain.repository.ServerConfigurationRepository
import com.shifthackz.aisdv1.domain.repository.StabilityAiCreditsRepository
import com.shifthackz.aisdv1.domain.repository.StabilityAiEnginesRepository
Expand Down Expand Up @@ -86,4 +88,5 @@ val repositoryModule = module {
factoryOf(::DownloadableModelRepositoryImpl) bind DownloadableModelRepository::class
factoryOf(::HuggingFaceModelsRepositoryImpl) bind HuggingFaceModelsRepository::class
factoryOf(::SupportersRepositoryImpl) bind SupportersRepository::class
factoryOf(::ReportRepositoryImpl) bind ReportRepository::class
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
package com.shifthackz.aisdv1.data.remote

import com.shifthackz.aisdv1.domain.datasource.ReportDataSource
import com.shifthackz.aisdv1.domain.entity.ReportReason
import com.shifthackz.aisdv1.network.api.sdai.ReportApi
import com.shifthackz.aisdv1.network.request.ReportRequest
import io.reactivex.rxjava3.core.Completable

internal class ReportRemoteDataSource(private val api: ReportApi) : ReportDataSource.Remote {

override fun send(
text: String,
reason: ReportReason,
image: String,
source: String,
model: String
): Completable {
val payload = ReportRequest(text, reason.toString(), image, source, model)
return api.postReport(payload)
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
package com.shifthackz.aisdv1.data.repository

import com.shifthackz.aisdv1.domain.datasource.ReportDataSource
import com.shifthackz.aisdv1.domain.entity.ReportReason
import com.shifthackz.aisdv1.domain.entity.ServerSource
import com.shifthackz.aisdv1.domain.preference.PreferenceManager
import com.shifthackz.aisdv1.domain.repository.ReportRepository
import io.reactivex.rxjava3.core.Completable

internal class ReportRepositoryImpl(
private val rds: ReportDataSource.Remote,
private val preferenceManager: PreferenceManager,
) : ReportRepository {

override fun send(text: String, reason: ReportReason, image: String): Completable {
val source = preferenceManager.source
val model = when (source) {
ServerSource.HUGGING_FACE -> preferenceManager.huggingFaceModel
ServerSource.STABILITY_AI -> preferenceManager.stabilityAiEngineId
ServerSource.LOCAL_MICROSOFT_ONNX -> preferenceManager.localOnnxModelId
ServerSource.LOCAL_GOOGLE_MEDIA_PIPE -> preferenceManager.localMediaPipeModelId
else -> ""
}
return rds.send(text, reason, image, source.toString(), model)
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
package com.shifthackz.aisdv1.domain.datasource

import com.shifthackz.aisdv1.domain.entity.ReportReason
import io.reactivex.rxjava3.core.Completable

sealed interface ReportDataSource {

interface Remote : ReportDataSource {

fun send(
text: String,
reason: ReportReason,
image: String,
source: String,
model: String,
): Completable
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -74,6 +74,8 @@ import com.shifthackz.aisdv1.domain.usecase.generation.TextToImageUseCase
import com.shifthackz.aisdv1.domain.usecase.generation.TextToImageUseCaseImpl
import com.shifthackz.aisdv1.domain.usecase.huggingface.FetchAndGetHuggingFaceModelsUseCase
import com.shifthackz.aisdv1.domain.usecase.huggingface.FetchAndGetHuggingFaceModelsUseCaseImpl
import com.shifthackz.aisdv1.domain.usecase.report.SendReportUseCase
import com.shifthackz.aisdv1.domain.usecase.report.SendReportUseCaseImpl
import com.shifthackz.aisdv1.domain.usecase.sdembedding.FetchAndGetEmbeddingsUseCase
import com.shifthackz.aisdv1.domain.usecase.sdembedding.FetchAndGetEmbeddingsUseCaseImpl
import com.shifthackz.aisdv1.domain.usecase.sdhypernet.FetchAndGetHyperNetworksUseCase
Expand Down Expand Up @@ -179,6 +181,7 @@ internal val useCasesModule = module {
factoryOf(::ObserveStabilityAiCreditsUseCaseImpl) bind ObserveStabilityAiCreditsUseCase::class
factoryOf(::FetchAndGetStabilityAiEnginesUseCaseImpl) bind FetchAndGetStabilityAiEnginesUseCase::class
factoryOf(::FetchAndGetSupportersUseCaseImpl) bind FetchAndGetSupportersUseCase::class
factoryOf(::SendReportUseCaseImpl) bind SendReportUseCase::class
}

internal val interActorsModule = module {
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
package com.shifthackz.aisdv1.domain.entity

enum class ReportReason {
IntellectualPropertyInfringement,
Violence,
InappropriateContent,
AdultContent,
HatefulSpeech,
Other;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
package com.shifthackz.aisdv1.domain.repository

import com.shifthackz.aisdv1.domain.entity.ReportReason
import io.reactivex.rxjava3.core.Completable

interface ReportRepository {
fun send(text: String, reason: ReportReason, image: String): Completable
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
package com.shifthackz.aisdv1.domain.usecase.report

import com.shifthackz.aisdv1.domain.entity.ReportReason
import io.reactivex.rxjava3.core.Completable

interface SendReportUseCase {
operator fun invoke(text: String, reason: ReportReason, image: String): Completable
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
package com.shifthackz.aisdv1.domain.usecase.report

import com.shifthackz.aisdv1.domain.entity.ReportReason
import com.shifthackz.aisdv1.domain.repository.ReportRepository

class SendReportUseCaseImpl(
private val repository: ReportRepository,
) : SendReportUseCase {

override fun invoke(text: String, reason: ReportReason, image: String) =
repository.send(text, reason, image)

}
6 changes: 3 additions & 3 deletions gradle/libs.versions.toml
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
[versions]
versionName = "0.6.4"
versionCode = "184"
versionName = "0.6.5"
versionCode = "185"
targetSdk = "34"
compileSdk = "34"
compileSdk = "35"
minSdk = "24"
agp = "8.7.2"
kotlin = "2.0.21"
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
package com.shifthackz.aisdv1.network.api.sdai

import com.shifthackz.aisdv1.network.request.ReportRequest
import io.reactivex.rxjava3.core.Completable
import retrofit2.http.Body
import retrofit2.http.POST

interface ReportApi {

@POST("/report")
fun postReport(@Body request: ReportRequest): Completable
}
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@ import com.shifthackz.aisdv1.network.api.sdai.DonateApi
import com.shifthackz.aisdv1.network.api.sdai.DownloadableModelsApi
import com.shifthackz.aisdv1.network.api.sdai.DownloadableModelsApiImpl
import com.shifthackz.aisdv1.network.api.sdai.HuggingFaceModelsApi
import com.shifthackz.aisdv1.network.api.sdai.ReportApi
import com.shifthackz.aisdv1.network.api.stabilityai.StabilityAiApi
import com.shifthackz.aisdv1.network.api.swarmui.SwarmUiApi
import com.shifthackz.aisdv1.network.api.swarmui.SwarmUiApiImpl
Expand Down Expand Up @@ -143,6 +144,12 @@ val networkModule = module {
.create(DonateApi::class.java)
}

single {
get<Retrofit.Builder>()
.withBaseUrl(get<ApiUrlProvider>().stableDiffusionReportApiUrl)
.create(ReportApi::class.java)
}

single {
get<Retrofit.Builder>()
.withBaseUrl(get<ApiUrlProvider>().imageCdnApiUrl)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ package com.shifthackz.aisdv1.network.qualifiers
interface ApiUrlProvider {
val stableDiffusionAutomaticApiUrl: String
val stableDiffusionAppApiUrl: String
val stableDiffusionReportApiUrl: String
val hordeApiUrl: String
val imageCdnApiUrl: String
val huggingFaceApiUrl: String
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
package com.shifthackz.aisdv1.network.request

import com.google.gson.annotations.SerializedName

data class ReportRequest(
@SerializedName("text")
val text: String,
@SerializedName("reason")
val reason: String,
@SerializedName("image")
val image: String,
@SerializedName("server_source")
val serverSource: String,
@SerializedName("model")
val model: String,
)
Original file line number Diff line number Diff line change
Expand Up @@ -76,6 +76,8 @@ sealed interface GenerationMviIntent : MviIntent {
data class Save(val ai: List<AiGenerationResult>) : Result

data class View(val ai: AiGenerationResult) : Result

data class Report(val ai: AiGenerationResult) : Result
}

data class SetModal(val modal: Modal) : GenerationMviIntent
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -231,6 +231,8 @@ abstract class GenerationMviViewModel<S : GenerationMviState, I : GenerationMviI
.subscribeOnMainThread(schedulersProvider)
.subscribeBy(::errorLog) { mainRouter.navigateToGalleryDetails(it.id) }

is GenerationMviIntent.Result.Report -> mainRouter.navigateToReportImage(intent.ai.id)

is GenerationMviIntent.SetModal -> setActiveModal(intent.modal)

GenerationMviIntent.Cancel.Generation -> {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ import com.shifthackz.aisdv1.presentation.screen.inpaint.InPaintViewModel
import com.shifthackz.aisdv1.presentation.screen.loader.ConfigurationLoaderViewModel
import com.shifthackz.aisdv1.presentation.screen.logger.LoggerViewModel
import com.shifthackz.aisdv1.presentation.screen.onboarding.OnBoardingViewModel
import com.shifthackz.aisdv1.presentation.screen.report.ReportViewModel
import com.shifthackz.aisdv1.presentation.screen.settings.SettingsViewModel
import com.shifthackz.aisdv1.presentation.screen.setup.ServerSetupViewModel
import com.shifthackz.aisdv1.presentation.screen.splash.SplashViewModel
Expand Down Expand Up @@ -103,4 +104,16 @@ val viewModelModule = module {
mainRouter = get(),
)
}

viewModel { parameters ->
ReportViewModel(
itemId = parameters.get(),
sendReportUseCase = get(),
getGenerationResultUseCase = get(),
getLastResultFromCacheUseCase = get(),
base64ToBitmapConverter = get(),
mainRouter = get(),
schedulersProvider = get(),
)
}
}
Loading