mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
allow dynamic plugins installation via advertiser
GitOrigin-RevId: 6dcd1ef37b4e30915c2133c67a97b72fe5cf202c
This commit is contained in:
committed by
intellij-monorepo-bot
parent
564a4065b8
commit
fa7b906c44
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
+10
-3
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user