diff --git a/plugins/ide-startup/importSettings/resources/ideIcons/IC_48.svg b/plugins/ide-startup/importSettings/resources/ideIcons/IC_48.svg
index d50d5add85ca..2198b4ba667a 100644
--- a/plugins/ide-startup/importSettings/resources/ideIcons/IC_48.svg
+++ b/plugins/ide-startup/importSettings/resources/ideIcons/IC_48.svg
@@ -1,19 +1,68 @@
-
+
+
+
+
diff --git a/plugins/ide-startup/importSettings/resources/messages/ImportSettingsBundle.properties b/plugins/ide-startup/importSettings/resources/messages/ImportSettingsBundle.properties
index e5310f7796b2..7f9996fde88a 100644
--- a/plugins/ide-startup/importSettings/resources/messages/ImportSettingsBundle.properties
+++ b/plugins/ide-startup/importSettings/resources/messages/ImportSettingsBundle.properties
@@ -94,7 +94,7 @@ plugins.page.ok.button.continue.without = Продолжить без Плаги
plugins.page.ok.button.install = Установить Выбранные
plugins.page.choose.counter.no = Нет плагинов для установки
plugins.page.choose.counter.one = 1 плагин выбран для установки
-plugins.page.choose.counter.multiple = {0} плагина выбрано для установки
+plugins.page.choose.counter.multiple = Выбрано плагинов для установки: {0}
plugins.page.list.item.bundled = Предустановлен
# Plugin descriptions
diff --git a/plugins/ide-startup/importSettings/src/com/intellij/ide/startup/importSettings/chooser/ui/OpenIdeStartupWizardService.kt b/plugins/ide-startup/importSettings/src/com/intellij/ide/startup/importSettings/chooser/ui/OpenIdeStartupWizardService.kt
index 1ef4df09f5a5..1b1a70fe2db6 100644
--- a/plugins/ide-startup/importSettings/src/com/intellij/ide/startup/importSettings/chooser/ui/OpenIdeStartupWizardService.kt
+++ b/plugins/ide-startup/importSettings/src/com/intellij/ide/startup/importSettings/chooser/ui/OpenIdeStartupWizardService.kt
@@ -143,12 +143,12 @@ class OpenIdeStartupWizardService(private val coroutineScope: CoroutineScope) :
name = "CSV Editor",
description = ImportSettingsBundle.message("plugin.description.csvEditor"),
),
- WizardPluginImpl(
- id = "com.koxudaxi.pydantic",
- icon = AllIcons.Plugins.PluginLogo,
- name = "Pydantic",
- description = ImportSettingsBundle.message("plugin.description.pydantic"),
- ),
+ //WizardPluginImpl(
+ // id = "com.koxudaxi.pydantic",
+ // icon = AllIcons.Plugins.PluginLogo,
+ // name = "Pydantic",
+ // description = ImportSettingsBundle.message("plugin.description.pydantic"),
+ //),
)
),
WizardPluginGroupImpl(
diff --git a/plugins/ide-startup/importSettings/src/com/intellij/ide/startup/importSettings/jb/JbImportServiceImpl.kt b/plugins/ide-startup/importSettings/src/com/intellij/ide/startup/importSettings/jb/JbImportServiceImpl.kt
index 8dff16da903c..6c3284930ffe 100644
--- a/plugins/ide-startup/importSettings/src/com/intellij/ide/startup/importSettings/jb/JbImportServiceImpl.kt
+++ b/plugins/ide-startup/importSettings/src/com/intellij/ide/startup/importSettings/jb/JbImportServiceImpl.kt
@@ -7,11 +7,11 @@ package com.intellij.ide.startup.importSettings.jb
import com.intellij.configurationStore.getPerOsSettingsStorageFolderName
import com.intellij.ide.GeneralSettings
import com.intellij.ide.plugins.*
-import com.intellij.ide.plugins.marketplace.MarketplaceRequests
import com.intellij.ide.startup.importSettings.ImportSettingsBundle
import com.intellij.ide.startup.importSettings.StartupImportIcons
import com.intellij.ide.startup.importSettings.chooser.ui.SettingsImportOrigin
import com.intellij.ide.startup.importSettings.data.*
+import com.intellij.ide.startup.importSettings.openide.utils.PluginInstallationUtil
import com.intellij.ide.startup.importSettings.statistics.ImportSettingsEventsCollector
import com.intellij.ide.startup.importSettings.transfer.TransferSettingsProgress
import com.intellij.l10n.LocalizationStateService
@@ -402,6 +402,8 @@ class JbImportServiceImpl(private val coroutineScope: CoroutineScope) : JbServic
filteredCategories.add(SettingsCategory.PLUGINS)
plugins2import = productInfo.getPluginsDescriptors().filter {
setting.selectedChildIds?.contains(it.key.idString) ?: false
+ }.filter { (_, descriptor) ->
+ PluginManagerCore.isCompatible(descriptor) && descriptor.namespace?.lowercase() != "jetbrains"
}
unselectedPlugins = setting.unselectedChildIds
logger.info("Will import ${setting.selectedChildIds?.size} custom plugins: ${setting.selectedChildIds?.joinToString()}\n" +
@@ -650,11 +652,9 @@ private suspend fun calculatePluginsToInstall(alreadyInstalled: Set, t
if (pluginsToAttemptInstallation.isEmpty()) return emptyList()
reporter.text(ImportSettingsBundle.message("plugin-installation.progress.determining-plugins-to-download"))
- val loadedPlugins = withContext(Dispatchers.IO) {
- MarketplaceRequests.loadLastCompatiblePluginDescriptors(pluginsToAttemptInstallation.toSet(), null, true)
- }
+ val loadedPlugins = PluginInstallationUtil.getPluginsToInstall(pluginsToAttemptInstallation)
- return loadedPlugins
+ return loadedPlugins.filter { it.pluginId !in alreadyInstalled }
}
}
diff --git a/plugins/ide-startup/importSettings/src/com/intellij/ide/startup/importSettings/openide/utils/PluginInstallationUtil.kt b/plugins/ide-startup/importSettings/src/com/intellij/ide/startup/importSettings/openide/utils/PluginInstallationUtil.kt
index 079cef1ab1c0..a41168d9940e 100644
--- a/plugins/ide-startup/importSettings/src/com/intellij/ide/startup/importSettings/openide/utils/PluginInstallationUtil.kt
+++ b/plugins/ide-startup/importSettings/src/com/intellij/ide/startup/importSettings/openide/utils/PluginInstallationUtil.kt
@@ -15,6 +15,7 @@ package com.intellij.ide.startup.importSettings.openide.utils
import com.intellij.ide.plugins.IdeaPluginDescriptor
import com.intellij.ide.plugins.PluginManagerCore
+import com.intellij.ide.plugins.PluginNode
import com.intellij.ide.plugins.marketplace.MarketplaceRequests
import com.intellij.ide.startup.importSettings.ImportSettingsBundle
import com.intellij.ide.startup.importSettings.openide.service.PluginIconService
@@ -57,9 +58,7 @@ object PluginInstallationUtil {
progressIndicator.text = ImportSettingsBundle.message("plugin-installation.progress.determining-plugins-to-download")
progressIndicator.fraction = 0.05
- val pluginsToInstall: List = withContext(Dispatchers.IO) {
- MarketplaceRequests.Companion.loadLastCompatiblePluginDescriptors(idsToInstall.toSet(), null, true)
- }
+ val pluginsToInstall: List = getPluginsToInstall(idsToInstall)
if (pluginsToInstall.isEmpty()) {
progressIndicator.fraction = 1.0
@@ -67,20 +66,12 @@ object PluginInstallationUtil {
}
var shouldRestart = false
- val installedDuringSession = mutableSetOf()
- val queue = ArrayDeque(pluginsToInstall)
+ val progressPerPlugin = 0.9 / pluginsToInstall.size.coerceAtLeast(1)
var currentProgress = 0.1
- while (queue.isNotEmpty()) {
+ for (plugin in pluginsToInstall) {
if (progressIndicator.isCanceled) break
- val plugin = queue.removeFirst()
- if (plugin.pluginId in installedDuringSession || PluginManagerCore.isPluginInstalled(plugin.pluginId)) {
- continue
- }
-
- val progressPerPlugin = 0.9 / (queue.size + 1).coerceAtLeast(1)
-
progressIndicator.text = ImportSettingsBundle.message("plugin-installation.progress.downloading", plugin.name)
// Load and set plugin icon
@@ -102,28 +93,13 @@ object PluginInstallationUtil {
}
withContext(Dispatchers.IO) {
- val prepareToInstall = downloader.prepareToInstall(null)
- if (prepareToInstall) {
-
- val depIds = downloader.descriptor
- .dependencies
- .filter { !it.isOptional }
- .map { it.pluginId }
- .filter { it !in installedDuringSession && !PluginManagerCore.isPluginInstalled(it) }
-
- if (depIds.isNotEmpty()) {
- val depDescriptors = MarketplaceRequests.loadLastCompatiblePluginDescriptors(depIds.toSet(), null, true)
- queue.addAll(depDescriptors)
- }
- }
+ downloader.prepareToInstall(null)
}
val appliedWithoutRestart = withContext(Dispatchers.EDT + ModalityState.any().asContextElement()) {
downloader.installDynamically(null)
}
- installedDuringSession.add(plugin.pluginId)
-
if (!appliedWithoutRestart) {
shouldRestart = true
}
@@ -139,4 +115,20 @@ object PluginInstallationUtil {
progressIndicator.text = null
return shouldRestart
}
+
+ suspend fun getPluginsToInstall(idsToInstall: List): List = withContext(Dispatchers.IO) {
+ val directPlugins = MarketplaceRequests.loadLastCompatiblePluginDescriptors(idsToInstall.toSet(), null, true)
+
+ val dependencyIds = directPlugins
+ .asSequence()
+ .flatMap { it.dependencies }
+ .filter { !it.isOptional }
+ .map { it.pluginId }
+ .filter { it !in idsToInstall && !PluginManagerCore.isPluginInstalled(it) }
+ .toSet()
+
+ val dependencyPlugins = MarketplaceRequests.loadLastCompatiblePluginDescriptors(dependencyIds, null, true)
+
+ (directPlugins + dependencyPlugins).distinctBy { it.pluginId }
+ }
}
\ No newline at end of file