From bdd621786a4081ab95fe6e71255ce32232cbb2b8 Mon Sep 17 00:00:00 2001 From: Cristian Maglie Date: Fri, 6 Dec 2019 15:57:57 +0100 Subject: [PATCH] Removed no more needed LibraryInstaller (it's now done via GRPC) --- .../libraries/ui/LibraryManagerUI.java | 18 +- app/src/processing/app/Base.java | 9 +- .../cc/arduino/cli/ArduinoCoreInstance.java | 39 +++- .../src/cc/arduino/cli/ProgressWrapper.java | 14 ++ .../libraries/LibraryInstaller.java | 186 ------------------ 5 files changed, 65 insertions(+), 201 deletions(-) delete mode 100644 arduino-core/src/cc/arduino/contributions/libraries/LibraryInstaller.java diff --git a/app/src/cc/arduino/contributions/libraries/ui/LibraryManagerUI.java b/app/src/cc/arduino/contributions/libraries/ui/LibraryManagerUI.java index ac5cb27e0..d26242df8 100644 --- a/app/src/cc/arduino/contributions/libraries/ui/LibraryManagerUI.java +++ b/app/src/cc/arduino/contributions/libraries/ui/LibraryManagerUI.java @@ -49,8 +49,8 @@ import javax.swing.JOptionPane; import javax.swing.table.TableCellRenderer; import cc.arduino.contributions.libraries.ContributedLibraryRelease; +import cc.arduino.cli.ArduinoCoreInstance; import cc.arduino.contributions.libraries.ContributedLibrary; -import cc.arduino.contributions.libraries.LibraryInstaller; import cc.arduino.contributions.libraries.LibraryTypeComparator; import cc.arduino.contributions.libraries.ui.MultiLibraryInstallDialog.Result; import cc.arduino.contributions.ui.DropdownItem; @@ -64,8 +64,8 @@ import processing.app.BaseNoGui; @SuppressWarnings("serial") public class LibraryManagerUI extends InstallerJDialog { + private final ArduinoCoreInstance core; private final JComboBox typeChooser; - private final LibraryInstaller installer; @Override protected FilteredAbstractTableModel createContribModel() { @@ -100,9 +100,9 @@ public class LibraryManagerUI extends InstallerJDialog { }; } - public LibraryManagerUI(Frame parent, LibraryInstaller installer) { + public LibraryManagerUI(Frame parent, ArduinoCoreInstance core) { super(parent, tr("Library Manager"), Dialog.ModalityType.APPLICATION_MODAL, tr("Unable to reach Arduino.cc due to possible network issues.")); - this.installer = installer; + this.core = core; filtersContainer.add(new JLabel(tr("Topic")), 1); filtersContainer.remove(2); @@ -218,7 +218,7 @@ public class LibraryManagerUI extends InstallerJDialog { } public void onInstallPressed(final ContributedLibraryRelease lib) { - List deps = BaseNoGui.getArduinoCoreService().libraryResolveDependecies(lib); + List deps = core.libraryResolveDependecies(lib); boolean depsInstalled = deps.stream().allMatch(l -> l.getInstalledLibrary().isPresent() || l.getName().equals(lib.getName())); Result installDeps; if (!depsInstalled) { @@ -237,9 +237,11 @@ public class LibraryManagerUI extends InstallerJDialog { try { setProgressVisible(true, tr("Installing...")); if (installDeps == Result.ALL) { - installer.install(deps, this::setProgress); + deps.forEach(dep -> { + core.libraryInstall(dep, this::setProgress); + }); } else { - installer.install(lib, this::setProgress); + core.libraryInstall(lib, this::setProgress); } onIndexesUpdated(); if (contribTable.getCellEditor() != null) { @@ -271,7 +273,7 @@ public class LibraryManagerUI extends InstallerJDialog { installerThread = new Thread(() -> { try { setProgressVisible(true, tr("Removing...")); - installer.remove(lib, this::setProgress); + core.libraryRemove(lib, this::setProgress); onIndexesUpdated(); if (contribTable.getCellEditor() != null) { contribTable.getCellEditor().stopCellEditing(); diff --git a/app/src/processing/app/Base.java b/app/src/processing/app/Base.java index e0a1bc175..b77be4937 100644 --- a/app/src/processing/app/Base.java +++ b/app/src/processing/app/Base.java @@ -30,7 +30,6 @@ import cc.arduino.contributions.*; import cc.arduino.contributions.libraries.ContributedLibrary; import cc.arduino.contributions.libraries.ContributedLibraryRelease; import cc.arduino.contributions.libraries.LibrariesIndexer; -import cc.arduino.contributions.libraries.LibraryInstaller; import cc.arduino.contributions.libraries.LibraryOfSameTypeComparator; import cc.arduino.contributions.libraries.ui.LibraryManagerUI; import cc.arduino.contributions.packages.ContributedPlatform; @@ -98,7 +97,6 @@ public class Base { public static Map FIND_DIALOG_STATE = new HashMap<>(); private final ContributionInstaller contributionInstaller; - private final LibraryInstaller libraryInstaller; private ContributionsSelfCheck contributionsSelfCheck; // set to true after the first time the menu is built. @@ -302,7 +300,6 @@ public class Base { final GPGDetachedSignatureVerifier gpgDetachedSignatureVerifier = new GPGDetachedSignatureVerifier(); contributionInstaller = new ContributionInstaller(BaseNoGui.getPlatform(), gpgDetachedSignatureVerifier); - libraryInstaller = new LibraryInstaller(BaseNoGui.getPlatform()); parser.parseArgumentsPhase2(); @@ -395,9 +392,9 @@ public class Base { System.out.println(tr(I18n .format("Library {0} is available as built-in in the IDE.\nRemoving the other version {1} installed in the sketchbook...", libraryArg, mayInstalled.get().getParsedVersion()))); - libraryInstaller.remove(mayInstalled.get(), progressListener); + BaseNoGui.getArduinoCoreService().libraryRemove(mayInstalled.get(), progressListener); } else { - libraryInstaller.install(selected, progressListener); + BaseNoGui.getArduinoCoreService().libraryInstall(selected, progressListener); } } @@ -1374,7 +1371,7 @@ public class Base { contributionsSelfCheck.cancel(); } @SuppressWarnings("serial") - LibraryManagerUI managerUI = new LibraryManagerUI(activeEditor, libraryInstaller) { + LibraryManagerUI managerUI = new LibraryManagerUI(activeEditor, BaseNoGui.getArduinoCoreService()) { @Override protected void onIndexesUpdated() throws Exception { BaseNoGui.initPackages(); diff --git a/arduino-core/src/cc/arduino/cli/ArduinoCoreInstance.java b/arduino-core/src/cc/arduino/cli/ArduinoCoreInstance.java index 9269bef1c..7fe0c1399 100644 --- a/arduino-core/src/cc/arduino/cli/ArduinoCoreInstance.java +++ b/arduino-core/src/cc/arduino/cli/ArduinoCoreInstance.java @@ -46,13 +46,18 @@ import cc.arduino.cli.commands.Commands.UpdateLibrariesIndexReq; import cc.arduino.cli.commands.Commands.UpdateLibrariesIndexResp; import cc.arduino.cli.commands.Common.DownloadProgress; import cc.arduino.cli.commands.Common.Instance; +import cc.arduino.cli.commands.Common.TaskProgress; import cc.arduino.cli.commands.Compile.CompileReq; import cc.arduino.cli.commands.Compile.CompileResp; import cc.arduino.cli.commands.Lib.InstalledLibrary; +import cc.arduino.cli.commands.Lib.LibraryInstallReq; +import cc.arduino.cli.commands.Lib.LibraryInstallResp; import cc.arduino.cli.commands.Lib.LibraryListReq; import cc.arduino.cli.commands.Lib.LibraryListResp; import cc.arduino.cli.commands.Lib.LibrarySearchReq; import cc.arduino.cli.commands.Lib.LibrarySearchResp; +import cc.arduino.cli.commands.Lib.LibraryUninstallReq; +import cc.arduino.cli.commands.Lib.LibraryUninstallResp; import cc.arduino.cli.commands.Lib.SearchedLibrary; import cc.arduino.contributions.ProgressListener; import cc.arduino.contributions.libraries.ContributedLibraryRelease; @@ -155,7 +160,8 @@ public class ArduinoCoreInstance { } } - public List libraryList(boolean listAll) throws StatusException { + public List libraryList(boolean listAll) + throws StatusException { try { LibraryListResp resp = stub.libraryList(LibraryListReq.newBuilder() // .setInstance(instance) // @@ -171,4 +177,35 @@ public class ArduinoCoreInstance { return new ArrayList<>(); } + public void libraryInstall(ContributedLibraryRelease lib, + ProgressListener progressListener) { + Iterator stream = stub + .libraryInstall(LibraryInstallReq.newBuilder() // + .setInstance(instance) // + .setName(lib.getName()) // + .setVersion(lib.getVersion()) // + .build()); + ProgressWrapper p = new ProgressWrapper(progressListener); + while (stream.hasNext()) { + LibraryInstallResp resp = stream.next(); + DownloadProgress progress = resp.getProgress(); + p.update(progress); + } + } + + public void libraryRemove(ContributedLibraryRelease lib, + ProgressListener progressListener) { + Iterator stream = stub + .libraryUninstall(LibraryUninstallReq.newBuilder() // + .setInstance(instance) // + .setName(lib.getName()) // + .setVersion(lib.getVersion()) // + .build()); + ProgressWrapper p = new ProgressWrapper(progressListener); + while (stream.hasNext()) { + LibraryUninstallResp resp = stream.next(); + TaskProgress progress = resp.getTaskProgress(); + p.update(progress); + } + } } diff --git a/arduino-core/src/cc/arduino/cli/ProgressWrapper.java b/arduino-core/src/cc/arduino/cli/ProgressWrapper.java index 892108555..f9a37a2ed 100644 --- a/arduino-core/src/cc/arduino/cli/ProgressWrapper.java +++ b/arduino-core/src/cc/arduino/cli/ProgressWrapper.java @@ -33,6 +33,7 @@ import static processing.app.I18n.format; import static processing.app.I18n.tr; import cc.arduino.cli.commands.Common.DownloadProgress; +import cc.arduino.cli.commands.Common.TaskProgress; import cc.arduino.contributions.ProgressListener; import cc.arduino.utils.MultiStepProgress; import cc.arduino.utils.Progress; @@ -78,4 +79,17 @@ class ProgressWrapper { } progressListener.onProgress(progress); } + + String taskName; + + public void update(TaskProgress t) { + String name = t.getName(); + if (!name.isEmpty()) { + taskName = name; + } + + progress.setProgress(t.getCompleted() ? 100 : 0); + progress.setStatus(taskName + " " + t.getMessage()); + progressListener.onProgress(progress); + } } \ No newline at end of file diff --git a/arduino-core/src/cc/arduino/contributions/libraries/LibraryInstaller.java b/arduino-core/src/cc/arduino/contributions/libraries/LibraryInstaller.java deleted file mode 100644 index d7ce827cc..000000000 --- a/arduino-core/src/cc/arduino/contributions/libraries/LibraryInstaller.java +++ /dev/null @@ -1,186 +0,0 @@ -/* - * This file is part of Arduino. - * - * Copyright 2015 Arduino LLC (http://www.arduino.cc/) - * - * Arduino is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - * - * As a special exception, you may use this file as part of a free software - * library without restriction. Specifically, if other files instantiate - * templates or use macros or inline functions from this file, or you compile - * this file and link it with other files to produce an executable, this - * file does not by itself cause the resulting executable to be covered by - * the GNU General Public License. This exception does not however - * invalidate any other reasons why the executable file might be covered by - * the GNU General Public License. - */ - -package cc.arduino.contributions.libraries; - -import cc.arduino.Constants; -import cc.arduino.contributions.DownloadableContributionsDownloader; -import cc.arduino.contributions.GPGDetachedSignatureVerifier; -import cc.arduino.contributions.GZippedJsonDownloader; -import cc.arduino.contributions.ProgressListener; -import cc.arduino.utils.ArchiveExtractor; -import cc.arduino.utils.MultiStepProgress; -import cc.arduino.utils.network.FileDownloader; -import org.apache.commons.io.FilenameUtils; -import org.apache.logging.log4j.LogManager; -import org.apache.logging.log4j.Logger; -import processing.app.BaseNoGui; -import processing.app.I18n; -import processing.app.Platform; -import processing.app.helpers.FileUtils; - -import java.io.File; -import java.io.IOException; -import java.net.URL; -import java.nio.file.Files; -import java.nio.file.StandardCopyOption; -import java.util.ArrayList; -import java.util.List; -import java.util.Optional; - -import static processing.app.I18n.tr; - -public class LibraryInstaller { - private static Logger log = LogManager.getLogger(LibraryInstaller.class); - - private final Platform platform; - - public LibraryInstaller(Platform platform) { - this.platform = platform; - } - - public void install(ContributedLibraryRelease lib, ProgressListener progressListener) throws Exception { - ArrayList libs = new ArrayList<>(); - libs.add(lib); - install(libs, progressListener); - } - - public synchronized void install(List libs, ProgressListener progressListener) throws Exception { -/* - MultiStepProgress progress = new MultiStepProgress(3 * libs.size() + 1); - - for (ContributedLibraryRelease lib : libs) { - // Do install library (3 steps) - performInstall(lib, progressListener, progress); - } - - // Rescan index (1 step) - rescanLibraryIndex(progress, progressListener); -*/ - } - - private void performInstall(ContributedLibraryRelease lib, ProgressListener progressListener, MultiStepProgress progress) throws Exception { - /* - if (lib.isLibraryInstalled()) { - System.out.println(I18n.format(tr("Library is already installed: {0}:{1}"), lib.getName(), lib.getParsedVersion())); - return; - } - - File libsFolder = BaseNoGui.getSketchbookLibrariesFolder().folder; - File destFolder = new File(libsFolder, lib.getName().replaceAll(" ", "_")); - - // Check if we are replacing an already installed lib - LibrariesIndex index = BaseNoGui.librariesIndexer.getIndex(); - Optional mayReplacedLib = lib.getLibrary() - .getInstalled(); - if (mayReplacedLib.isPresent()) { - if (mayReplacedLib.get().getInstalledLibrary().get().getInstalledFolder() - .equals(destFolder) && destFolder.exists()) { - System.out - .println(I18n.format(tr("Library {0} is already installed in: {1}"), - lib.getName(), destFolder)); - return; - - } - } - // TODO: Check correctness - // Optional mayReplacedLib = - // index.find(lib.getName()); - // .filter(l -> - // l.getInstalledLibrary().get().getInstalledFolder().equals(destFolder)) // - // .findAny(); - if (!replacedLib.isPresent() && destFolder.exists()) { - System.out - .println(I18n.format(tr("Library {0} is already installed in: {1}"), - lib.getName(), destFolder)); - return; - } - DownloadableContributionsDownloader downloader = new DownloadableContributionsDownloader(BaseNoGui.librariesIndexer.getStagingFolder()); - - // Step 1: Download library - try { - downloader.download(lib, progress, I18n.format(tr("Downloading library: {0}"), lib.getName()), progressListener, false); - } catch (InterruptedException e) { - // Download interrupted... just exit - return; - } - progress.stepDone(); - - // TODO: Extract to temporary folders and move to the final destination only - // once everything is successfully unpacked. If the operation fails remove - // all the temporary folders and abort installation. - - // Step 2: Unpack library on the correct location - progress.setStatus(I18n.format(tr("Installing library: {0}:{1}"), lib.getName(), lib.getParsedVersion())); - progressListener.onProgress(progress); - File tmpFolder = FileUtils.createTempFolder(libsFolder); - try { - new ArchiveExtractor(platform).extract(lib.getDownloadedFile(), tmpFolder, 1); - } catch (Exception e) { - if (tmpFolder.exists()) - FileUtils.recursiveDelete(tmpFolder); - } - progress.stepDone(); - - // Step 3: Remove replaced library and move installed one to the correct location - // TODO: Fix progress bar... - if (replacedLib.isPresent()) { - remove(replacedLib.get(), progressListener); - } - tmpFolder.renameTo(destFolder); - progress.stepDone(); - */ - } - - public synchronized void remove(ContributedLibraryRelease lib, ProgressListener progressListener) throws IOException { -/* - if (lib.isIDEBuiltIn()) { - return; - } - - final MultiStepProgress progress = new MultiStepProgress(2); - - // Step 1: Remove library - progress.setStatus(I18n.format(tr("Removing library: {0}:{1}"), lib.getName(), lib.getParsedVersion())); - progressListener.onProgress(progress); - FileUtils.recursiveDelete(lib.getInstalledLibrary().get().getInstalledFolder()); - progress.stepDone(); - - // Step 2: Rescan index - rescanLibraryIndex(progress, progressListener); -*/ - } - - private void rescanLibraryIndex(MultiStepProgress progress, ProgressListener progressListener) { - progress.setStatus(tr("Updating list of installed libraries")); - progressListener.onProgress(progress); - BaseNoGui.librariesIndexer.rescanLibraries(); - progress.stepDone(); - } -}