diff --git a/app/src/main/kotlin/org/fdroid/ui/repositories/add/AddRepoViewModel.kt b/app/src/main/kotlin/org/fdroid/ui/repositories/add/AddRepoViewModel.kt index e0b90df16..43e7745eb 100644 --- a/app/src/main/kotlin/org/fdroid/ui/repositories/add/AddRepoViewModel.kt +++ b/app/src/main/kotlin/org/fdroid/ui/repositories/add/AddRepoViewModel.kt @@ -4,12 +4,22 @@ import android.app.Application import androidx.core.net.toUri import androidx.lifecycle.AndroidViewModel import dagger.hilt.android.lifecycle.HiltViewModel +import kotlinx.coroutines.CoroutineScope +import kotlinx.coroutines.cancel import kotlinx.coroutines.flow.StateFlow +import kotlinx.coroutines.launch import mu.KotlinLogging import org.fdroid.download.NetworkMonitor import org.fdroid.index.RepoManager +import org.fdroid.repo.AddRepoError import org.fdroid.repo.AddRepoState +import org.fdroid.repo.Added +import org.fdroid.repo.Adding +import org.fdroid.repo.Fetching +import org.fdroid.repo.None import org.fdroid.settings.SettingsManager +import org.fdroid.updates.UpdatesManager +import org.fdroid.utils.IoDispatcher import javax.inject.Inject @HiltViewModel @@ -18,6 +28,8 @@ class AddRepoViewModel @Inject constructor( networkMonitor: NetworkMonitor, settingsManager: SettingsManager, private val repoManager: RepoManager, + private val updateManager: UpdatesManager, + @param:IoDispatcher private val ioScope: CoroutineScope, ) : AndroidViewModel(app) { private val log = KotlinLogging.logger { } @@ -43,6 +55,19 @@ class AddRepoViewModel @Inject constructor( fun addFetchedRepository() { log.info { "addFetchedRepository()" } - repoManager.addFetchedRepository() + ioScope.launch { + repoManager.addFetchedRepository() + // wait for repo to get added, so we can load updates afterward + repoManager.addRepoState.collect { + when (it) { + is Fetching, Adding, None -> {} + is Added -> { + updateManager.loadUpdates().join() + cancel() + } + is AddRepoError -> cancel() + } + } + } } }