allow dynamic plugins installation via advertiser

GitOrigin-RevId: 6dcd1ef37b4e30915c2133c67a97b72fe5cf202c
This commit is contained in:
Gregory.Shrago
2019-11-07 02:40:58 +00:00
committed by intellij-monorepo-bot
parent 564a4065b8
commit fa7b906c44
3 changed files with 40 additions and 6 deletions
@@ -4,6 +4,7 @@ package com.intellij.ide.plugins;
import com.intellij.CommonBundle;
import com.intellij.ide.startup.StartupActionScriptManager;
import com.intellij.ide.util.PropertiesComponent;
import com.intellij.openapi.application.ApplicationManager;
import com.intellij.openapi.application.ApplicationNamesInfo;
import com.intellij.openapi.application.PathManager;
import com.intellij.openapi.application.ex.ApplicationInfoEx;
@@ -54,11 +55,27 @@ public class PluginInstaller {
public static boolean prepareToInstall(List<PluginNode> pluginsToInstall,
List<? extends IdeaPluginDescriptor> allPlugins,
boolean allowInstallWithoutRestart,
PluginManagerMain.PluginEnabler pluginEnabler,
Runnable onSuccess,
@NotNull ProgressIndicator indicator) {
PluginInstallOperation operation = new PluginInstallOperation(pluginsToInstall, allPlugins, pluginEnabler, indicator);
operation.setAllowInstallWithoutRestart(allowInstallWithoutRestart);
operation.run();
return operation.isSuccess();
boolean success = operation.isSuccess();
if (success) {
ApplicationManager.getApplication().invokeLater(() -> {
if (allowInstallWithoutRestart) {
for (PendingDynamicPluginInstall install : operation.getPendingDynamicPluginInstalls()) {
installAndLoadDynamicPlugin(install.getFile(), null, install.getPluginDescriptor());
}
}
if (onSuccess != null) {
onSuccess.run();
}
});
}
return success;
}
/**
@@ -27,6 +27,7 @@ import com.intellij.openapi.util.text.StringUtil;
import com.intellij.ui.scale.JBUIScale;
import com.intellij.util.containers.ContainerUtil;
import com.intellij.xml.util.XmlStringUtil;
import org.jetbrains.annotations.ApiStatus;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
@@ -87,6 +88,7 @@ public abstract class PluginManagerMain {
/**
* @deprecated use {@link #downloadPlugins(List, List, Runnable, PluginEnabler, Runnable)} instead
*/
@ApiStatus.ScheduledForRemoval(inVersion = "2020.2")
@Deprecated
public static boolean downloadPlugins(List<PluginNode> plugins,
List<? extends PluginId> allPlugins,
@@ -104,14 +106,22 @@ public abstract class PluginManagerMain {
Runnable onSuccess,
PluginEnabler pluginEnabler,
@Nullable Runnable cleanup) throws IOException {
return downloadPlugins(plugins, allPlugins, false, onSuccess, pluginEnabler, cleanup);
}
public static boolean downloadPlugins(List<PluginNode> plugins,
List<? extends IdeaPluginDescriptor> allPlugins,
boolean allowInstallWithoutRestart,
Runnable onSuccess,
PluginEnabler pluginEnabler,
@Nullable Runnable cleanup) throws IOException {
boolean[] result = new boolean[1];
try {
ProgressManager.getInstance().run(new Task.Backgroundable(null, IdeBundle.message("progress.download.plugins"), true, PluginManagerUISettings.getInstance()) {
@Override
public void run(@NotNull ProgressIndicator indicator) {
try {
if (PluginInstaller.prepareToInstall(plugins, allPlugins, pluginEnabler, indicator)) {
ApplicationManager.getApplication().invokeLater(onSuccess);
if (PluginInstaller.prepareToInstall(plugins, allPlugins, allowInstallWithoutRestart, pluginEnabler, onSuccess, indicator)) {
result[0] = true;
}
}
@@ -1,7 +1,10 @@
// Copyright 2000-2018 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
package com.intellij.openapi.updateSettings.impl.pluginsAdvertisement;
import com.intellij.ide.plugins.*;
import com.intellij.ide.plugins.IdeaPluginDescriptor;
import com.intellij.ide.plugins.PluginManagerCore;
import com.intellij.ide.plugins.PluginManagerMain;
import com.intellij.ide.plugins.PluginNode;
import com.intellij.openapi.diagnostic.Logger;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.ui.DialogWrapper;
@@ -74,13 +77,17 @@ public class PluginsAdvertiserDialog extends DialogWrapper {
PluginManagerMain.suggestToEnableInstalledDependantPlugins(pluginHelper, nodes);
final Runnable notifyRunnable = () -> PluginManagerMain.notifyPluginsUpdated(myProject);
Runnable notifyRunnable = () -> {
if (nodes.stream().anyMatch(o -> PluginManagerCore.getPlugin(o.getPluginId()) == null)) {
PluginManagerMain.notifyPluginsUpdated(myProject);
}
};
for (String pluginId : pluginsToEnable) {
PluginManagerCore.enablePlugin(pluginId);
}
if (!nodes.isEmpty()) {
try {
PluginManagerMain.downloadPlugins(nodes, myAllPlugins, notifyRunnable, pluginHelper, null);
PluginManagerMain.downloadPlugins(nodes, myAllPlugins, true, notifyRunnable, pluginHelper, null);
}
catch (IOException e) {
LOG.error(e);