diff --git a/libs/database/src/main/java/org/fdroid/index/RepoManager.kt b/libs/database/src/main/java/org/fdroid/index/RepoManager.kt index b0b43150a..4f12b0ce9 100644 --- a/libs/database/src/main/java/org/fdroid/index/RepoManager.kt +++ b/libs/database/src/main/java/org/fdroid/index/RepoManager.kt @@ -143,7 +143,13 @@ public class RepoManager @JvmOverloads constructor( @AnyThread public fun addFetchedRepository() { GlobalScope.launch(coroutineContext) { - repoAdder.addFetchedRepository() + val addedRepo = repoAdder.addFetchedRepository() + // if repo was added, update state right away, so it becomes available asap + if (addedRepo != null) withContext(Dispatchers.Main) { + _repositoriesState.value = _repositoriesState.value.toMutableList().apply { + add(addedRepo) + } + } } } diff --git a/libs/database/src/main/java/org/fdroid/repo/RepoAdder.kt b/libs/database/src/main/java/org/fdroid/repo/RepoAdder.kt index 98d37cbd2..b361dc3a4 100644 --- a/libs/database/src/main/java/org/fdroid/repo/RepoAdder.kt +++ b/libs/database/src/main/java/org/fdroid/repo/RepoAdder.kt @@ -217,9 +217,9 @@ internal class RepoAdder( } @WorkerThread - internal fun addFetchedRepository() { + internal fun addFetchedRepository(): Repository? { // prevent double calls (e.g. caused by double tapping a UI button) - if (addRepoState.compareAndSet(Adding, Adding)) return + if (addRepoState.compareAndSet(Adding, Adding)) return null // cancel fetch preview job, so it stops emitting new states fetchJob?.cancel() @@ -265,6 +265,7 @@ internal class RepoAdder( } } addRepoState.value = Added(modifiedRepo) + return modifiedRepo } internal fun abortAddingRepo() {