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