Skip to content
Open
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
361 changes: 208 additions & 153 deletions app/src/main/java/dev/dimension/flare/ui/screen/settings/StorageScreen.kt

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion desktopApp/proguard-rules.pro
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@
-keep class de.jensklingenberg.ktorfit.** { *; }
-keepclassmembers class de.jensklingenberg.ktorfit.** { *; }

-keep class * extends androidx.room.RoomDatabase { <init>(); }
-keep class * extends androidx.room3.RoomDatabase { <init>(); }

-keepnames class io.ktor.serialization.kotlinx.KotlinxSerializationExtensionProvider {}
-keep class * implements io.ktor.serialization.kotlinx.KotlinxSerializationExtensionProvider {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -226,6 +226,7 @@ import io.github.composefluent.component.ListItem
import io.github.composefluent.component.MenuFlyout
import io.github.composefluent.component.MenuFlyoutContainer
import io.github.composefluent.component.MenuFlyoutItem
import io.github.composefluent.component.ProgressBar
import io.github.composefluent.component.RadioButton
import io.github.composefluent.component.SubtleButton
import io.github.composefluent.component.Switcher
Expand All @@ -234,8 +235,10 @@ import io.github.composefluent.component.TextField
import kotlinx.collections.immutable.ImmutableList
import kotlinx.collections.immutable.persistentListOf
import kotlinx.collections.immutable.persistentMapOf
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.flow.map
import kotlinx.coroutines.launch
import kotlinx.coroutines.withContext
import moe.tlaster.precompose.molecule.producePresenter
import org.jetbrains.compose.resources.stringResource
import org.koin.compose.koinInject
Expand Down Expand Up @@ -1057,6 +1060,11 @@ internal fun SettingsScreen(
}
},
)
AnimatedVisibility(state.storageState.isClearingImageCache) {
ProgressBar(
modifier = Modifier.fillMaxWidth(),
)
}

ExpanderItem(
heading = {
Expand All @@ -1082,6 +1090,11 @@ internal fun SettingsScreen(
}
},
)
AnimatedVisibility(state.storageState.isClearingDatabaseCache) {
ProgressBar(
modifier = Modifier.fillMaxWidth(),
)
}

ExpanderItemSeparator()

Expand Down Expand Up @@ -1904,12 +1917,15 @@ private fun storagePresenter(
onImportFilePicker: () -> File?,
) = run {
var refreshKey by remember { mutableStateOf(0) }
val state = remember { StoragePresenter() }.invoke()
val presenter = remember { StoragePresenter() }
val state = presenter.invoke()

val notification = koinInject<ComposeInAppNotification>()
val exportPresenter = remember { ExportDataPresenter() }
val exportState = exportPresenter.body()
val scope = rememberCoroutineScope()
var isClearingImageCache by remember { mutableStateOf(false) }
var isClearingDatabaseCache by remember { mutableStateOf(false) }

var importJson by remember { mutableStateOf<String?>(null) }
val importPresenter = remember(importJson) { importJson?.let { ImportDataPresenter(it) } }
Expand Down Expand Up @@ -1946,14 +1962,40 @@ private fun storagePresenter(
val expanded = expanded
val imageCacheSize = imageCacheSize
val showImportConfirmation = showImportConfirmation
val isClearingImageCache = isClearingImageCache
val isClearingDatabaseCache = isClearingDatabaseCache
val isClearingStorage = isClearingImageCache || isClearingDatabaseCache

fun clearImageCache() {
SingletonImageLoader.get(PlatformContext.INSTANCE).diskCache?.clear()
refreshKey++
if (isClearingStorage) {
return
}
scope.launch {
isClearingImageCache = true
try {
withContext(Dispatchers.IO) {
SingletonImageLoader.get(PlatformContext.INSTANCE).diskCache?.clear()
}
refreshKey++
} finally {
isClearingImageCache = false
}
}
}

fun clearCacheDatabase() {
state.clearCache()
if (isClearingStorage) {
return
}
scope.launch {
isClearingDatabaseCache = true
try {
presenter.clearCacheSuspend()
refreshKey++
} finally {
isClearingDatabaseCache = false
}
}
}

fun export() {
Expand Down
10 changes: 5 additions & 5 deletions gradle/libs.versions.toml
Original file line number Diff line number Diff line change
Expand Up @@ -56,7 +56,7 @@ firebase-bom = "34.11.0"
google-services = "4.4.4"
firebase-crashlytics = "3.0.6"
materialKolor = "4.1.1"
room = "2.8.3"
room = "3.0.0-alpha02"
sqlite = "2.6.2"
compose-multiplatform = "1.10.3"
logback = "1.5.32"
Expand Down Expand Up @@ -125,9 +125,9 @@ datastore = { group = "androidx.datastore", name = "datastore", version = "1.2.1
desugar_jdk_libs = { module = "com.android.tools:desugar_jdk_libs", version.ref = "desugar_jdk_libs" }
androidx-window = { group = "androidx.window", name = "window-core", version = "1.5.1" }
androidx-splash = { group = "androidx.core", name = "core-splashscreen", version = "1.2.0" }
room-runtime = { group = "androidx.room", name = "room-runtime", version.ref = "room" }
room-paging = { group = "androidx.room", name = "room-paging", version.ref = "room" }
room-compiler = { group = "androidx.room", name = "room-compiler", version.ref = "room" }
room-runtime = { group = "androidx.room3", name = "room3-runtime", version.ref = "room" }
room-paging = { group = "androidx.room3", name = "room3-paging", version.ref = "room" }
room-compiler = { group = "androidx.room3", name = "room3-compiler", version.ref = "room" }
sqlite-bundled = { group = "androidx.sqlite", name = "sqlite-bundled", version.ref = "sqlite" }
nestedScrollView = { group = "com.github.Tlaster", name = "NestedScrollView", version = "1.0.3" }
webkit = { group = "androidx.webkit", name = "webkit", version = "1.15.0" }
Expand Down Expand Up @@ -283,6 +283,6 @@ ben-manes-versions = { id = "com.github.ben-manes.versions", version.ref = "vers
google-services = { id = "com.google.gms.google-services", version.ref = "google-services" }
firebase-crashlytics = { id = "com.google.firebase.crashlytics", version.ref = "firebase-crashlytics" }
compose-compiler = { id = "org.jetbrains.kotlin.plugin.compose", version.ref = "kotlin" }
room = { id = "androidx.room", version.ref = "room" }
room = { id = "androidx.room3", version.ref = "room" }
composeMultiplatform = { id = "org.jetbrains.compose", version.ref = "compose-multiplatform" }
nucleus = { id = "io.github.kdroidfilter.nucleus", version.ref = "nucleus" }
Loading
Loading