/* * Copyright 2013-2017 consulo.io * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.intellij.openapi.updateSettings.impl.pluginsAdvertisement; import com.intellij.ide.plugins.IdeaPluginDescriptor; import com.intellij.ide.plugins.RepositoryHelper; import com.intellij.openapi.application.ApplicationManager; import com.intellij.openapi.progress.Task; import com.intellij.openapi.project.Project; import com.intellij.util.containers.ContainerUtil; import consulo.ide.updateSettings.UpdateSettings; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import java.util.Collections; import java.util.List; import java.util.function.Consumer; /** * @author VISTALL * @since 05-May-17 */ public class PluginsAdvertiserHolder { private static List<IdeaPluginDescriptor> ourLoadedPluginDescriptors; @NotNull public static List<IdeaPluginDescriptor> getLoadedPluginDescriptors() { return ourLoadedPluginDescriptors == null ? Collections.emptyList() : ourLoadedPluginDescriptors; } public static void update(@Nullable List<IdeaPluginDescriptor> list) { ourLoadedPluginDescriptors = ContainerUtil.isEmpty(list) ? null : list; } public static void initiaze(@NotNull Project project, @NotNull Consumer<List<IdeaPluginDescriptor>> consumer) { UpdateSettings updateSettings = UpdateSettings.getInstance(); if (!updateSettings.isEnable()) { return; } if (ourLoadedPluginDescriptors != null) { ApplicationManager.getApplication().executeOnPooledThread(() -> consumer.accept(ourLoadedPluginDescriptors)); return; } Task.Backgroundable.queue(project, "Loading plugin list", false, indicator -> { List<IdeaPluginDescriptor> pluginDescriptors = Collections.emptyList(); try { pluginDescriptors = RepositoryHelper.loadPluginsFromRepository(indicator, updateSettings.getChannel()); ourLoadedPluginDescriptors = pluginDescriptors; if (pluginDescriptors.isEmpty()) { return; } consumer.accept(pluginDescriptors); } catch (Exception ignored) { } }); } }