summaryrefslogtreecommitdiff
path: root/Source/Android/app/src/main/java
diff options
context:
space:
mode:
authorCharles Lombardo <clombardo169@gmail.com>2023-01-26 13:13:25 -0500
committerCharles Lombardo <clombardo169@gmail.com>2023-03-07 15:45:41 -0500
commit75ce7a04caaae0a9e1ca9083b35442fb6a9f7adb (patch)
tree7f268501db60d650f1ceed7bbc840e52e3c20e44 /Source/Android/app/src/main/java
parentd66d8210bf67435085cb03bd96752683cbb19083 (diff)
Android: Use coroutine for system updates
Diffstat (limited to 'Source/Android/app/src/main/java')
-rw-r--r--Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/sysupdate/ui/SystemUpdateViewModel.kt54
1 files changed, 29 insertions, 25 deletions
diff --git a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/sysupdate/ui/SystemUpdateViewModel.kt b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/sysupdate/ui/SystemUpdateViewModel.kt
index dacc51221d..7dc53d83bd 100644
--- a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/sysupdate/ui/SystemUpdateViewModel.kt
+++ b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/sysupdate/ui/SystemUpdateViewModel.kt
@@ -4,9 +4,12 @@ package org.dolphinemu.dolphinemu.features.sysupdate.ui
import androidx.lifecycle.MutableLiveData
import androidx.lifecycle.ViewModel
+import androidx.lifecycle.viewModelScope
+import kotlinx.coroutines.Dispatchers
+import kotlinx.coroutines.launch
+import kotlinx.coroutines.withContext
import org.dolphinemu.dolphinemu.utils.WiiUpdateCallback
import org.dolphinemu.dolphinemu.utils.WiiUtils
-import java.util.concurrent.Executors
class SystemUpdateViewModel : ViewModel() {
val progressData = MutableLiveData<Int>()
@@ -14,6 +17,7 @@ class SystemUpdateViewModel : ViewModel() {
val titleIdData = MutableLiveData<Long>()
val resultData = MutableLiveData<Int>()
+ private var isRunning = false
private var canceled = false
var region = -1
var discPath: String = ""
@@ -27,34 +31,38 @@ class SystemUpdateViewModel : ViewModel() {
}
fun startUpdate() {
- if (discPath.isNotEmpty()) {
- startDiscUpdate(discPath)
- } else {
- val region: String = when (this.region) {
- 0 -> "EUR"
- 1 -> "JPN"
- 2 -> "KOR"
- 3 -> "USA"
- else -> ""
+ if (isRunning) return
+ isRunning = true
+
+ viewModelScope.launch {
+ withContext(Dispatchers.IO) {
+ if (discPath.isNotEmpty()) {
+ startDiscUpdate(discPath)
+ } else {
+ val region: String = when (region) {
+ 0 -> "EUR"
+ 1 -> "JPN"
+ 2 -> "KOR"
+ 3 -> "USA"
+ else -> ""
+ }
+ startOnlineUpdate(region)
+ }
+ isRunning = false
}
- startOnlineUpdate(region)
}
}
- private fun startOnlineUpdate(region: String?) {
+ private fun startOnlineUpdate(region: String) {
canceled = false
- executor.execute {
- val result = WiiUtils.doOnlineUpdate(region, constructCallback())
- resultData.postValue(result)
- }
+ val result = WiiUtils.doOnlineUpdate(region, constructCallback())
+ resultData.postValue(result)
}
- private fun startDiscUpdate(path: String?) {
+ private fun startDiscUpdate(path: String) {
canceled = false
- executor.execute {
- val result = WiiUtils.doDiscUpdate(path, constructCallback())
- resultData.postValue(result)
- }
+ val result = WiiUtils.doDiscUpdate(path, constructCallback())
+ resultData.postValue(result)
}
fun clear() {
@@ -72,8 +80,4 @@ class SystemUpdateViewModel : ViewModel() {
!canceled
}
}
-
- companion object {
- private val executor = Executors.newFixedThreadPool(1)
- }
}