Refactor preferences module

This commit is contained in:
MM20
2024-01-19 22:29:37 +01:00
parent 94aee6baba
commit 92ddc75060
171 changed files with 3202 additions and 2962 deletions
@@ -2,7 +2,7 @@ package de.mm20.launcher2.wikipedia
import android.content.Context
import de.mm20.launcher2.crashreporter.CrashReporter
import de.mm20.launcher2.preferences.LauncherDataStore
import de.mm20.launcher2.preferences.search.WikipediaSearchSettings
import de.mm20.launcher2.search.Article
import de.mm20.launcher2.search.SearchableRepository
import kotlinx.collections.immutable.ImmutableList
@@ -10,7 +10,6 @@ import kotlinx.collections.immutable.persistentListOf
import kotlinx.coroutines.*
import kotlinx.coroutines.flow.*
import okhttp3.OkHttpClient
import org.koin.core.component.KoinComponent
import retrofit2.Retrofit
import retrofit2.converter.gson.GsonConverterFactory
import java.util.concurrent.TimeUnit
@@ -18,7 +17,7 @@ import java.util.concurrent.TimeUnit
internal class WikipediaRepository(
private val context: Context,
private val dataStore: LauncherDataStore
private val settings: WikipediaSearchSettings,
) : SearchableRepository<Article> {
private val scope = CoroutineScope(Job() + Dispatchers.Default)
@@ -34,8 +33,7 @@ internal class WikipediaRepository(
init {
scope.launch {
dataStore.data
.map { it.wikipediaSearch.customUrl }
settings.customUrl
.distinctUntilChanged()
.collectLatest {
try { retrofit = Retrofit.Builder()
@@ -55,24 +53,27 @@ internal class WikipediaRepository(
private lateinit var wikipediaService: WikipediaApi
override fun search(query: String): Flow<ImmutableList<Wikipedia>> = channelFlow {
send(persistentListOf())
withContext(Dispatchers.IO) {
httpClient.dispatcher.cancelAll()
override fun search(query: String): Flow<ImmutableList<Wikipedia>> {
if (query.length < 4) return flowOf(persistentListOf())
return settings.enabled.transformLatest {
emit(persistentListOf())
withContext(Dispatchers.IO) {
httpClient.dispatcher.cancelAll()
}
if (!it || !::wikipediaService.isInitialized) return@transformLatest
if (query.isBlank()) return@transformLatest
val results = queryWikipedia(query)
if (results != null) {
emit(persistentListOf(results))
}
}
if (query.length < 4) return@channelFlow
if (!::wikipediaService.isInitialized) return@channelFlow
if (query.isBlank()) return@channelFlow
dataStore.data.map { it.wikipediaSearch.images }.collectLatest {
val wikipedia = queryWikipedia(query, false)
send(wikipedia?.let { persistentListOf(it) } ?: persistentListOf())
}
}
private suspend fun queryWikipedia(query: String, loadImages: Boolean): Wikipedia? {
private suspend fun queryWikipedia(query: String): Wikipedia? {
val wikipediaService = wikipediaService
val wikipediaUrl = retrofit.baseUrl().toString()
@@ -87,9 +88,7 @@ internal class WikipediaRepository(
val page = result.query?.pages?.values?.toList()?.getOrNull(0) ?: return null
val image = if (loadImages) {
result.query.pages.values.toList().getOrNull(0)?.thumbnail?.source
} else null
val image = result.query.pages.values.toList().getOrNull(0)?.thumbnail?.source
return Wikipedia(
label = page.title,