Migrate OkHttp to Ktor

This commit is contained in:
MM20
2025-09-13 17:26:40 +02:00
parent f9d5d2a36c
commit 2953667875
22 changed files with 369 additions and 289 deletions

View File

@@ -44,7 +44,7 @@ dependencies {
implementation(libs.androidx.appcompat)
implementation(libs.androidx.work)
implementation(libs.okhttp)
implementation(libs.bundles.ktor)
implementation(project(":core:ktx"))
implementation(project(":core:i18n"))

View File

@@ -2,28 +2,30 @@ package de.mm20.launcher2.currencies
import android.content.Context
import android.util.Log
import androidx.work.Worker
import androidx.work.CoroutineWorker
import androidx.work.WorkerParameters
import de.mm20.launcher2.crashreporter.CrashReporter
import de.mm20.launcher2.database.AppDatabase
import okhttp3.OkHttpClient
import okhttp3.Request
import io.ktor.client.HttpClient
import io.ktor.client.request.get
import io.ktor.client.request.url
import io.ktor.client.statement.bodyAsChannel
import io.ktor.utils.io.jvm.javaio.toInputStream
import org.w3c.dom.Element
import java.text.SimpleDateFormat
import javax.xml.parsers.DocumentBuilderFactory
class ExchangeRateWorker(val context: Context, params: WorkerParameters) : Worker(context, params) {
override fun doWork(): Result {
class ExchangeRateWorker(val context: Context, params: WorkerParameters) :
CoroutineWorker(context, params) {
override suspend fun doWork(): Result {
Log.d("MM20", "Updating currency exchange rates")
val httpClient = OkHttpClient()
val request = Request.Builder()
.url("https://www.ecb.europa.eu/stats/eurofxref/eurofxref-daily.xml")
.get()
.build()
val httpClient = HttpClient()
try {
val response = httpClient.newCall(request).execute()
val document = DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(response.body?.byteStream()
?: return Result.retry())
val response = httpClient.get {
url("https://www.ecb.europa.eu/stats/eurofxref/eurofxref-daily.xml")
}
val document = DocumentBuilderFactory.newInstance().newDocumentBuilder()
.parse(response.bodyAsChannel().toInputStream())
val cubes = document.getElementsByTagName("Cube")
val values = mutableListOf<Pair<String, Double>>()
var timestamp = System.currentTimeMillis()
@@ -41,9 +43,9 @@ class ExchangeRateWorker(val context: Context, params: WorkerParameters) : Worke
}
val currencies = values.map {
Currency(
symbol = it.first,
value = it.second,
lastUpdate = timestamp
symbol = it.first,
value = it.second,
lastUpdate = timestamp
).toDatabaseEntity()
}
AppDatabase.getInstance(context).currencyDao().insertAll(currencies)