Browse Source

Explicitly switch between IO/UI dispatchers when updating list of extensions

Potentially fixes #2566
arkon 5 years ago
parent
commit
7af075633b

+ 8 - 2
app/src/main/java/eu/kanade/tachiyomi/extension/ExtensionManager.kt

@@ -12,7 +12,9 @@ import eu.kanade.tachiyomi.extension.util.ExtensionInstallReceiver
 import eu.kanade.tachiyomi.extension.util.ExtensionInstaller
 import eu.kanade.tachiyomi.extension.util.ExtensionLoader
 import eu.kanade.tachiyomi.source.SourceManager
+import eu.kanade.tachiyomi.util.lang.launchIO
 import eu.kanade.tachiyomi.util.lang.launchNow
+import eu.kanade.tachiyomi.util.lang.launchUI
 import kotlinx.coroutines.async
 import rx.Observable
 import uy.kohesive.injekt.Injekt
@@ -144,12 +146,16 @@ class ExtensionManager(
      * Finds the available extensions in the [api] and updates [availableExtensions].
      */
     fun findAvailableExtensions() {
-        launchNow {
-            availableExtensions = try {
+        launchIO {
+            val extensions: List<Extension.Available> = try {
                 api.findExtensions()
             } catch (e: Exception) {
                 emptyList()
             }
+
+            launchUI {
+                availableExtensions = extensions
+            }
         }
     }
 

+ 3 - 0
app/src/main/java/eu/kanade/tachiyomi/util/lang/CoroutinesExtensions.kt

@@ -5,6 +5,9 @@ import kotlinx.coroutines.*
 fun launchUI(block: suspend CoroutineScope.() -> Unit): Job =
         GlobalScope.launch(Dispatchers.Main, CoroutineStart.DEFAULT, block)
 
+fun launchIO(block: suspend CoroutineScope.() -> Unit): Job =
+        GlobalScope.launch(Dispatchers.IO, CoroutineStart.DEFAULT, block)
+
 @UseExperimental(ExperimentalCoroutinesApi::class)
 fun launchNow(block: suspend CoroutineScope.() -> Unit): Job =
         GlobalScope.launch(Dispatchers.Main, CoroutineStart.UNDISPATCHED, block)