From a1052bff3e7bad08d6f54c9cf283b6eeb70edb27 Mon Sep 17 00:00:00 2001 From: Canny Date: Tue, 11 Oct 2022 17:44:53 +0300 Subject: [PATCH] fix: don't block ui thread when fetching --- .../main/java/app/revanced/manager/api/API.kt | 20 ++++++++++++++----- .../manager/repository/GitHubRepository.kt | 4 ++-- .../ui/viewmodel/DashboardViewModel.kt | 4 +++- 3 files changed, 20 insertions(+), 8 deletions(-) diff --git a/app/src/main/java/app/revanced/manager/api/API.kt b/app/src/main/java/app/revanced/manager/api/API.kt index 55d0fbe..c9032f5 100644 --- a/app/src/main/java/app/revanced/manager/api/API.kt +++ b/app/src/main/java/app/revanced/manager/api/API.kt @@ -8,6 +8,7 @@ import com.vk.knet.core.Knet import com.vk.knet.core.http.HttpMethod import com.vk.knet.core.http.HttpRequest import com.vk.knet.cornet.CronetKnetEngine +import kotlinx.coroutines.* import java.io.File class API(private val repository: GitHubRepository, private val prefs: PreferencesManager, cronet: CronetKnetEngine) { @@ -25,8 +26,13 @@ class API(private val repository: GitHubRepository, private val prefs: Preferenc suspend fun downloadPatchBundle(workdir: File): File { return try { - val (_, out) = downloadAsset(workdir, findAsset(prefs.srcPatches.toString(), ".jar")) - out + withContext(Dispatchers.IO) { + val (_, out) = downloadAsset( + workdir, + findAsset(prefs.srcPatches.toString(), ".jar") + ) + out + } } catch (e: Exception) { throw Exception("Failed to download patch bundle", e) } @@ -56,9 +62,13 @@ class API(private val repository: GitHubRepository, private val prefs: Preferenc return assets to out } Log.d("ReVanced Manager", "Downloading asset ${assets.asset.name}") - val file = client.execute(HttpRequest(HttpMethod.GET, assets.asset.downloadUrl)).body?.asBytes() - file?.let { out.writeBytes(it) } - + val file = client.execute( + HttpRequest( + HttpMethod.GET, + assets.asset.downloadUrl + ) + ).body!!.asBytes() + out.writeBytes(file) return assets to out } diff --git a/app/src/main/java/app/revanced/manager/repository/GitHubRepository.kt b/app/src/main/java/app/revanced/manager/repository/GitHubRepository.kt index 330f559..47a8630 100644 --- a/app/src/main/java/app/revanced/manager/repository/GitHubRepository.kt +++ b/app/src/main/java/app/revanced/manager/repository/GitHubRepository.kt @@ -15,12 +15,12 @@ class GitHubRepository(cronet: CronetKnetEngine) { val client = Knet.Build(cronet) - suspend fun fetchAssets() = withContext(Dispatchers.IO) { + suspend fun fetchAssets() = withContext(Dispatchers.Default) { val stream = client.execute(HttpRequest(HttpMethod.GET, "$apiUrl/tools")).body!!.asString() Json.decodeFromString(stream) as Tools } - suspend fun fetchContributors() = withContext(Dispatchers.IO) { + suspend fun fetchContributors() = withContext(Dispatchers.Default) { val stream = client.execute(HttpRequest(HttpMethod.GET,"$apiUrl/contributors")).body!!.asString() Json.decodeFromString(stream) as Repositories } diff --git a/app/src/main/java/app/revanced/manager/ui/viewmodel/DashboardViewModel.kt b/app/src/main/java/app/revanced/manager/ui/viewmodel/DashboardViewModel.kt index 5a4aaab..2ab0469 100644 --- a/app/src/main/java/app/revanced/manager/ui/viewmodel/DashboardViewModel.kt +++ b/app/src/main/java/app/revanced/manager/ui/viewmodel/DashboardViewModel.kt @@ -13,7 +13,9 @@ import app.revanced.manager.repository.GitHubRepository import app.revanced.manager.util.ghManager import app.revanced.manager.util.ghPatcher import app.revanced.manager.util.tag +import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.launch +import kotlinx.coroutines.withContext import java.text.SimpleDateFormat import java.util.* @@ -33,7 +35,7 @@ class DashboardViewModel(private val repository: GitHubRepository) : ViewModel() private fun fetchLastCommit() { viewModelScope.launch { try { - val repo = repository.fetchAssets() + val repo = withContext(Dispatchers.Default) {repository.fetchAssets()} for (asset in repo.tools) { when (asset.repository) { ghPatcher -> {