mirror of
https://github.com/Novaloop-AG/element-x-android.git
synced 2026-11-03 16:10:00 +00:00
Add developer option to optimize the SDK DBs
This commit is contained in:
committed by
Jorge Martin Espinosa
parent
0c60b75709
commit
5d6aa1fcfd
+1
@@ -21,4 +21,5 @@ sealed interface DeveloperSettingsEvents {
|
|||||||
data class SetShowColorPicker(val show: Boolean) : DeveloperSettingsEvents
|
data class SetShowColorPicker(val show: Boolean) : DeveloperSettingsEvents
|
||||||
data class ChangeBrandColor(val color: Color?) : DeveloperSettingsEvents
|
data class ChangeBrandColor(val color: Color?) : DeveloperSettingsEvents
|
||||||
data object ClearCache : DeveloperSettingsEvents
|
data object ClearCache : DeveloperSettingsEvents
|
||||||
|
data object VacuumStores : DeveloperSettingsEvents
|
||||||
}
|
}
|
||||||
|
|||||||
+5
@@ -29,6 +29,7 @@ import io.element.android.features.preferences.impl.developer.tracing.toLogLevel
|
|||||||
import io.element.android.features.preferences.impl.model.EnabledFeature
|
import io.element.android.features.preferences.impl.model.EnabledFeature
|
||||||
import io.element.android.features.preferences.impl.tasks.ClearCacheUseCase
|
import io.element.android.features.preferences.impl.tasks.ClearCacheUseCase
|
||||||
import io.element.android.features.preferences.impl.tasks.ComputeCacheSizeUseCase
|
import io.element.android.features.preferences.impl.tasks.ComputeCacheSizeUseCase
|
||||||
|
import io.element.android.features.preferences.impl.tasks.VacuumStoresUseCase
|
||||||
import io.element.android.features.rageshake.api.preferences.RageshakePreferencesState
|
import io.element.android.features.rageshake.api.preferences.RageshakePreferencesState
|
||||||
import io.element.android.libraries.architecture.AsyncAction
|
import io.element.android.libraries.architecture.AsyncAction
|
||||||
import io.element.android.libraries.architecture.AsyncData
|
import io.element.android.libraries.architecture.AsyncData
|
||||||
@@ -61,6 +62,7 @@ class DeveloperSettingsPresenter(
|
|||||||
private val appPreferencesStore: AppPreferencesStore,
|
private val appPreferencesStore: AppPreferencesStore,
|
||||||
private val buildMeta: BuildMeta,
|
private val buildMeta: BuildMeta,
|
||||||
private val enterpriseService: EnterpriseService,
|
private val enterpriseService: EnterpriseService,
|
||||||
|
private val vacuumStoresUseCase: VacuumStoresUseCase,
|
||||||
) : Presenter<DeveloperSettingsState> {
|
) : Presenter<DeveloperSettingsState> {
|
||||||
@Composable
|
@Composable
|
||||||
override fun present(): DeveloperSettingsState {
|
override fun present(): DeveloperSettingsState {
|
||||||
@@ -151,6 +153,9 @@ class DeveloperSettingsPresenter(
|
|||||||
is DeveloperSettingsEvents.SetShowColorPicker -> {
|
is DeveloperSettingsEvents.SetShowColorPicker -> {
|
||||||
showColorPicker = event.show
|
showColorPicker = event.show
|
||||||
}
|
}
|
||||||
|
DeveloperSettingsEvents.VacuumStores -> coroutineScope.launch {
|
||||||
|
vacuumStoresUseCase()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+8
@@ -146,6 +146,14 @@ fun DeveloperSettingsView(
|
|||||||
}
|
}
|
||||||
val cache = state.cacheSize
|
val cache = state.cacheSize
|
||||||
PreferenceCategory(title = "Cache") {
|
PreferenceCategory(title = "Cache") {
|
||||||
|
ListItem(
|
||||||
|
headlineContent = {
|
||||||
|
Text("Vacuum stores")
|
||||||
|
},
|
||||||
|
onClick = {
|
||||||
|
state.eventSink(DeveloperSettingsEvents.VacuumStores)
|
||||||
|
}
|
||||||
|
)
|
||||||
ListItem(
|
ListItem(
|
||||||
headlineContent = {
|
headlineContent = {
|
||||||
Text("Clear cache")
|
Text("Clear cache")
|
||||||
|
|||||||
+27
@@ -0,0 +1,27 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 2025 Element Creations Ltd.
|
||||||
|
*
|
||||||
|
* SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-Element-Commercial.
|
||||||
|
* Please see LICENSE files in the repository root for full details.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package io.element.android.features.preferences.impl.tasks
|
||||||
|
|
||||||
|
import dev.zacsweers.metro.AppScope
|
||||||
|
import dev.zacsweers.metro.ContributesBinding
|
||||||
|
import io.element.android.libraries.matrix.api.MatrixClient
|
||||||
|
import timber.log.Timber
|
||||||
|
|
||||||
|
interface VacuumStoresUseCase {
|
||||||
|
suspend operator fun invoke()
|
||||||
|
}
|
||||||
|
|
||||||
|
@ContributesBinding(AppScope::class)
|
||||||
|
class DefaultVacuumStoresUseCase(
|
||||||
|
private val matrixClient: MatrixClient,
|
||||||
|
) : VacuumStoresUseCase {
|
||||||
|
override suspend fun invoke() {
|
||||||
|
matrixClient.vacuumStores()
|
||||||
|
.onFailure { Timber.e(it, "Failed to vacuum stores") }
|
||||||
|
}
|
||||||
|
}
|
||||||
+2
@@ -194,6 +194,8 @@ interface MatrixClient {
|
|||||||
* Use [Timeline.markAsRead] instead when possible.
|
* Use [Timeline.markAsRead] instead when possible.
|
||||||
*/
|
*/
|
||||||
suspend fun markRoomAsFullyRead(roomId: RoomId, eventId: EventId): Result<Unit>
|
suspend fun markRoomAsFullyRead(roomId: RoomId, eventId: EventId): Result<Unit>
|
||||||
|
|
||||||
|
suspend fun vacuumStores(): Result<Unit>
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
+6
@@ -726,6 +726,12 @@ class RustMatrixClient(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
override suspend fun vacuumStores(): Result<Unit> = withContext(sessionDispatcher) {
|
||||||
|
runCatchingExceptions {
|
||||||
|
innerClient.optimizeStores()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private suspend fun getCacheSize(
|
private suspend fun getCacheSize(
|
||||||
includeCryptoDb: Boolean = false,
|
includeCryptoDb: Boolean = false,
|
||||||
): Long = withContext(sessionDispatcher) {
|
): Long = withContext(sessionDispatcher) {
|
||||||
|
|||||||
Reference in New Issue
Block a user