diff --git a/src/main/kotlin/app/termora/plugin/internal/plugin/MarketplacePanel.kt b/src/main/kotlin/app/termora/plugin/internal/plugin/MarketplacePanel.kt index 154326a..03f5d7e 100644 --- a/src/main/kotlin/app/termora/plugin/internal/plugin/MarketplacePanel.kt +++ b/src/main/kotlin/app/termora/plugin/internal/plugin/MarketplacePanel.kt @@ -125,7 +125,7 @@ class MarketplacePanel : JPanel(BorderLayout()), Disposable { cardLayout.show(cardPanel, PanelState.FetchFailed.name) } } finally { - isLoading.set(true) + isLoading.set(false) } } } diff --git a/src/main/kotlin/app/termora/plugin/marketplace/MarketplaceManager.kt b/src/main/kotlin/app/termora/plugin/marketplace/MarketplaceManager.kt index daa68a3..6eb854e 100644 --- a/src/main/kotlin/app/termora/plugin/marketplace/MarketplaceManager.kt +++ b/src/main/kotlin/app/termora/plugin/marketplace/MarketplaceManager.kt @@ -19,6 +19,7 @@ import org.slf4j.LoggerFactory import org.xml.sax.InputSource import java.io.StringReader import java.util.* +import java.util.concurrent.Callable import java.util.concurrent.Executors import java.util.concurrent.TimeUnit import java.util.concurrent.atomic.AtomicBoolean @@ -97,11 +98,14 @@ internal class MarketplaceManager private constructor() { val plugins = mutableListOf() val executorService = Executors.newVirtualThreadPerTaskExecutor() - val futures = repositories - .map { url -> executorService.submit> { getPlugins(url, version) } } + val futures = executorService + .invokeAll(repositories.map { Callable { getPlugins(it, version) } }, 30, TimeUnit.SECONDS) + for (future in futures) { try { - plugins.addAll(future.get(1, TimeUnit.MINUTES)) + if (future.isDone) { + plugins.addAll(future.get()) + } } catch (e: Exception) { if (log.isWarnEnabled) { log.warn(e.message, e) @@ -110,6 +114,8 @@ internal class MarketplaceManager private constructor() { } } + executorService.shutdown() + if (plugins.isEmpty()) { return emptyList() }