Refactor preferences module
This commit is contained in:
@@ -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,
|
||||
|
||||
Reference in New Issue
Block a user