fun fetchEnvironments()

in src/com/intellij/idea/plugin/hybris/tools/ccv2/CCv2Service.kt [52:97]


    fun fetchEnvironments(
        subscriptions: Collection<CCv2Subscription>,
        onStartCallback: () -> Unit,
        onCompleteCallback: (SortedMap<CCv2Subscription, Collection<CCv2EnvironmentDto>>) -> Unit,
        sendEvents: Boolean = true,
    ) {
        onStartCallback.invoke()
        if (sendEvents) project.messageBus.syncPublisher(TOPIC_ENVIRONMENT).onFetchingStarted(subscriptions)

        val ccv2Settings = DeveloperSettingsComponent.getInstance(project).state.ccv2Settings
        val statuses = ccv2Settings.showEnvironmentStatuses
            .map { it.name }

        coroutineScope.launch {
            withBackgroundProgress(project, "Fetching CCv2 Environments...", true) {
                val environments = sortedMapOf<CCv2Subscription, Collection<CCv2EnvironmentDto>>()
                reportProgress(subscriptions.size) { progressReporter ->
                    coroutineScope {
                        subscriptions
                            .map { subscription ->
                                async {
                                    subscription to (getCCv2Token(subscription)
                                        ?.let { ccv2Token ->
                                            try {
                                                return@let CCv2Api.getInstance().fetchEnvironments(ccv2Token, subscription, statuses, progressReporter)
                                            } catch (e: SocketTimeoutException) {
                                                notifyOnTimeout(subscription)
                                            } catch (e: RuntimeException) {
                                                notifyOnException(subscription, e)
                                            }

                                            return@let emptyList()
                                        }
                                        ?: emptyList())
                                }
                            }
                            .awaitAll()
                            .let { environments.putAll(it) }
                    }
                }

                onCompleteCallback.invoke(environments)
                if (sendEvents) project.messageBus.syncPublisher(TOPIC_ENVIRONMENT).onFetchingCompleted(environments)
            }
        }
    }