From 51d43f9004d97e10fa6b54ee1a9366760fba8a69 Mon Sep 17 00:00:00 2001 From: Torsten Grote Date: Thu, 21 Sep 2023 17:46:49 +0200 Subject: [PATCH] [db] update repo cache right after new repo got added so we can use the new repo right away without waiting for DB to inform us about change. This is important if we want to show list of apps of a repo right after adding it. --- .../src/main/java/org/fdroid/index/RepoManager.kt | 8 +++++++- libs/database/src/main/java/org/fdroid/repo/RepoAdder.kt | 5 +++-- 2 files changed, 10 insertions(+), 3 deletions(-) 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() {