fun fetchBuilds()

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


    fun fetchBuilds(
        subscriptions: Collection<CCv2Subscription>,
        onStartCallback: () -> Unit,
        onCompleteCallback: (SortedMap<CCv2Subscription, Collection<CCv2BuildDto>>) -> Unit
    ) {
        onStartCallback.invoke()
        project.messageBus.syncPublisher(TOPIC_BUILDS).onFetchingStarted(subscriptions)

        val ccv2Settings = DeveloperSettingsComponent.getInstance(project).state.ccv2Settings
        val statusNot = CCv2BuildStatus.entries
            .filterNot { ccv2Settings.showBuildStatuses.contains(it) }
            .map { it.name }

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

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

                onCompleteCallback.invoke(builds)
                project.messageBus.syncPublisher(TOPIC_BUILDS).onFetchingCompleted(builds)
            }
        }
    }