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)
}
}
}