Skip to content

Commit 67dd78f

Browse files
authored
Local Diffusion (#81)
* Local Diffusion :: Patch 1 * Local Diffusion :: Patch 2 * Local Diffusion :: Patch 3 * Local Diffusion :: Patch 4 * Local Diffusion :: Patch 5 * Local Diffusion :: Patch 6 * Local Diffusion :: Patch 7 * Local Diffusion :: Patch 7 * Local Diffusion :: Patch 8
1 parent e110756 commit 67dd78f

File tree

91 files changed

+2817
-292
lines changed

Some content is hidden

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

91 files changed

+2817
-292
lines changed

app/build.gradle

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,8 +21,8 @@ android {
2121
namespace 'com.shifthackz.aisdv1.app'
2222
defaultConfig {
2323
applicationId "com.shifthackz.aisdv1.app"
24-
versionName "0.4.13"
25-
versionCode 160
24+
versionName "0.5.0"
25+
versionCode 161
2626

2727
buildConfigField "String", "CLOUD_AI_URL", "\"https://sdai.moroz.cc\""
2828
buildConfigField "String", "IMAGE_CDN_URL", "\"https://random.imagecdn.app\""
@@ -78,6 +78,7 @@ dependencies {
7878
implementation project(":feature:ads")
7979
implementation project(":feature:analytics")
8080
implementation project(":feature:auth")
81+
implementation project(":feature:diffusion")
8182
implementation project(":data")
8283
implementation project(":demo")
8384
implementation di.koinCore

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

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,5 +3,11 @@ package com.shifthackz.aisdv1.app.di
33
import com.shifthackz.aisdv1.feature.ads.di.adFeatureModule
44
import com.shifthackz.aisdv1.feature.analytics.di.analyticsModule
55
import com.shifthackz.aisdv1.feature.auth.di.authModule
6+
import com.shifthackz.aisdv1.feature.diffusion.di.diffusionModule
67

7-
val featureModule = (adFeatureModule + analyticsModule + authModule).toTypedArray()
8+
val featureModule = (
9+
adFeatureModule
10+
+ analyticsModule
11+
+ authModule
12+
+ diffusionModule
13+
).toTypedArray()

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
@@ -10,6 +10,8 @@ import com.shifthackz.aisdv1.core.common.schedulers.SchedulersProvider
1010
import com.shifthackz.aisdv1.domain.feature.auth.AuthorizationCredentials
1111
import com.shifthackz.aisdv1.domain.feature.auth.AuthorizationStore
1212
import com.shifthackz.aisdv1.domain.preference.PreferenceManager
13+
import com.shifthackz.aisdv1.feature.diffusion.entity.LocalDiffusionFlag
14+
import com.shifthackz.aisdv1.feature.diffusion.environment.DeviceNNAPIFlagProvider
1315
import com.shifthackz.aisdv1.network.qualifiers.ApiUrlProvider
1416
import com.shifthackz.aisdv1.network.qualifiers.CredentialsProvider
1517
import com.shifthackz.aisdv1.network.qualifiers.HordeApiKeyProvider
@@ -99,6 +101,15 @@ val providersModule = module {
99101
override val providerPath: String = "${androidApplication().packageName}.fileprovider"
100102
override val imagesCacheDirPath: String = "${androidApplication().cacheDir}/images"
101103
override val logsCacheDirPath: String = "${androidApplication().cacheDir}/logs"
104+
override val localModelDirPath: String = "${androidApplication().filesDir.absolutePath}/model"
105+
}
106+
}
107+
108+
single {
109+
DeviceNNAPIFlagProvider {
110+
get<PreferenceManager>().localUseNNAPI
111+
.let { nnApi -> if (nnApi) LocalDiffusionFlag.NN_API else LocalDiffusionFlag.CPU }
112+
.let(LocalDiffusionFlag::value)
102113
}
103114
}
104115
}

build.gradle

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ buildscript {
1414
}
1515

1616
plugins {
17-
id 'com.android.application' version '8.0.2' apply false
18-
id 'com.android.library' version '8.0.2' apply false
17+
id 'com.android.application' version '8.1.0' apply false
18+
id 'com.android.library' version '8.1.0' apply false
1919
id 'org.jetbrains.kotlin.android' version '1.8.21' apply false
2020
}

core/common/src/main/java/com/shifthackz/aisdv1/core/common/file/FileExtensions.kt

Lines changed: 31 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
package com.shifthackz.aisdv1.core.common.file
22

33
import android.graphics.Bitmap
4-
import java.io.BufferedInputStream
5-
import java.io.File
4+
import java.io.*
65
import java.util.zip.ZipEntry
6+
import java.util.zip.ZipFile
77
import java.util.zip.ZipOutputStream
88

99
fun File.writeBitmap(
@@ -41,3 +41,32 @@ fun File.writeFilesToZip(
4141
}
4242
}
4343
}
44+
45+
fun File.unzip() {
46+
if (!path.endsWith(".zip")) return
47+
val destinationDir = parentFile ?: return
48+
49+
fun extractFile(inputStream: InputStream, destFilePath: String) {
50+
val bos = BufferedOutputStream(FileOutputStream(destFilePath))
51+
val bytesIn = ByteArray(DEFAULT_BUFFER_SIZE)
52+
var read: Int
53+
while (inputStream.read(bytesIn).also { read = it } != -1) {
54+
bos.write(bytesIn, 0, read)
55+
}
56+
bos.close()
57+
}
58+
59+
ZipFile(this).use { zip ->
60+
zip.entries().asSequence().forEach { entry ->
61+
zip.getInputStream(entry).use { inputStream ->
62+
val filePath = destinationDir.path + File.separator + entry.name
63+
if (!entry.isDirectory) {
64+
extractFile(inputStream, filePath)
65+
} else {
66+
val dir = File(filePath)
67+
dir.mkdir()
68+
}
69+
}
70+
}
71+
}
72+
}

core/common/src/main/java/com/shifthackz/aisdv1/core/common/file/FileProviderDescriptor.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,4 +4,5 @@ interface FileProviderDescriptor {
44
val providerPath: String
55
val imagesCacheDirPath: String
66
val logsCacheDirPath: String
7+
val localModelDirPath: String
78
}

core/common/src/main/java/com/shifthackz/aisdv1/core/common/log/FileLoggingTree.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,7 @@ class FileLoggingTree : Timber.Tree(), KoinComponent {
6565
}
6666

6767
private fun writeLine(message: String) = schedulersProvider.singleThread.execute {
68-
run {
68+
runCatching {
6969
val cacheDirectory = File(fileProviderDescriptor.logsCacheDirPath)
7070
if (!cacheDirectory.exists()) cacheDirectory.mkdirs()
7171
val outFile = File(cacheDirectory, LOGGER_FILENAME)

core/validation/src/main/java/com/shifthackz/aisdv1/core/validation/dimension/DimensionValidatorImpl.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,6 @@ internal class DimensionValidatorImpl(
3434

3535
companion object {
3636
private const val MINIMUM = 64
37-
private const val MAXIMUM = 2048
37+
private const val MAXIMUM = 1024
3838
}
3939
}

data/src/main/java/com/shifthackz/aisdv1/data/di/LocalDataSourceModule.kt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,13 +4,15 @@ import com.shifthackz.aisdv1.data.gateway.DatabaseClearGatewayImpl
44
import com.shifthackz.aisdv1.data.gateway.mediastore.MediaStoreGatewayFactory
55
import com.shifthackz.aisdv1.data.local.AppVersionLocalDataSource
66
import com.shifthackz.aisdv1.data.local.CoinLocalDataSource
7+
import com.shifthackz.aisdv1.data.local.DownloadableModelLocalDataSource
78
import com.shifthackz.aisdv1.data.local.FeatureFlagsLocalDataSource
89
import com.shifthackz.aisdv1.data.local.GenerationResultLocalDataSource
910
import com.shifthackz.aisdv1.data.local.ServerConfigurationLocalDataSource
1011
import com.shifthackz.aisdv1.data.local.StableDiffusionModelsLocalDataSource
1112
import com.shifthackz.aisdv1.data.local.StableDiffusionSamplersLocalDataSource
1213
import com.shifthackz.aisdv1.domain.datasource.AppVersionDataSource
1314
import com.shifthackz.aisdv1.domain.datasource.CoinDataSource
15+
import com.shifthackz.aisdv1.domain.datasource.DownloadableModelDataSource
1416
import com.shifthackz.aisdv1.domain.datasource.FeatureFlagsDataSource
1517
import com.shifthackz.aisdv1.domain.datasource.GenerationResultDataSource
1618
import com.shifthackz.aisdv1.domain.datasource.ServerConfigurationDataSource
@@ -32,5 +34,6 @@ val localDataSourceModule = module {
3234
factoryOf(::GenerationResultLocalDataSource) bind GenerationResultDataSource.Local::class
3335
factoryOf(::AppVersionLocalDataSource) bind AppVersionDataSource.Local::class
3436
factoryOf(::CoinLocalDataSource) bind CoinDataSource.Local::class
37+
factoryOf(::DownloadableModelLocalDataSource) bind DownloadableModelDataSource.Local::class
3538
factory { MediaStoreGatewayFactory(androidContext(), get()).invoke() }
3639
}

data/src/main/java/com/shifthackz/aisdv1/data/di/RemoteDataSourceModule.kt

Lines changed: 3 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -4,27 +4,8 @@ import com.shifthackz.aisdv1.core.common.extensions.fixUrlSlashes
44
import com.shifthackz.aisdv1.core.common.links.LinksProvider
55
import com.shifthackz.aisdv1.data.gateway.ServerConnectivityGatewayImpl
66
import com.shifthackz.aisdv1.data.provider.ServerUrlProvider
7-
import com.shifthackz.aisdv1.data.remote.AppVersionRemoteDataSource
8-
import com.shifthackz.aisdv1.data.remote.CoinRemoteDateSource
9-
import com.shifthackz.aisdv1.data.remote.FeatureFlagsRemoteDataSource
10-
import com.shifthackz.aisdv1.data.remote.HordeGenerationRemoteDataSource
11-
import com.shifthackz.aisdv1.data.remote.HordeStatusSource
12-
import com.shifthackz.aisdv1.data.remote.MotdRemoteDataSource
13-
import com.shifthackz.aisdv1.data.remote.RandomImageRemoteDataSource
14-
import com.shifthackz.aisdv1.data.remote.ServerConfigurationRemoteDataSource
15-
import com.shifthackz.aisdv1.data.remote.StableDiffusionGenerationRemoteDataSource
16-
import com.shifthackz.aisdv1.data.remote.StableDiffusionModelsRemoteDataSource
17-
import com.shifthackz.aisdv1.data.remote.StableDiffusionSamplersRemoteDataSource
18-
import com.shifthackz.aisdv1.domain.datasource.AppVersionDataSource
19-
import com.shifthackz.aisdv1.domain.datasource.CoinDataSource
20-
import com.shifthackz.aisdv1.domain.datasource.FeatureFlagsDataSource
21-
import com.shifthackz.aisdv1.domain.datasource.HordeGenerationDataSource
22-
import com.shifthackz.aisdv1.domain.datasource.MotdDataSource
23-
import com.shifthackz.aisdv1.domain.datasource.RandomImageDataSource
24-
import com.shifthackz.aisdv1.domain.datasource.ServerConfigurationDataSource
25-
import com.shifthackz.aisdv1.domain.datasource.StableDiffusionGenerationDataSource
26-
import com.shifthackz.aisdv1.domain.datasource.StableDiffusionModelsDataSource
27-
import com.shifthackz.aisdv1.domain.datasource.StableDiffusionSamplersDataSource
7+
import com.shifthackz.aisdv1.data.remote.*
8+
import com.shifthackz.aisdv1.domain.datasource.*
289
import com.shifthackz.aisdv1.domain.entity.ServerSource
2910
import com.shifthackz.aisdv1.domain.gateway.ServerConnectivityGateway
3011
import com.shifthackz.aisdv1.domain.preference.PreferenceManager
@@ -60,6 +41,7 @@ val remoteDataSourceModule = module {
6041
factoryOf(::MotdRemoteDataSource) bind MotdDataSource.Remote::class
6142
factoryOf(::FeatureFlagsRemoteDataSource) bind FeatureFlagsDataSource.Remote::class
6243
factoryOf(::RandomImageRemoteDataSource) bind RandomImageDataSource.Remote::class
44+
factoryOf(::DownloadableModelRemoteDataSource) bind DownloadableModelDataSource.Remote::class
6345

6446
factory<ServerConnectivityGateway> {
6547
val lambda: () -> Boolean = {

0 commit comments

Comments
 (0)