1
0
mirror of https://github.com/arduino/Arduino.git synced 2025-02-12 06:54:24 +01:00

Removed no more needed LibraryInstaller (it's now done via GRPC)

This commit is contained in:
Cristian Maglie 2019-12-06 15:57:57 +01:00
parent 401fe65418
commit bdd621786a
5 changed files with 65 additions and 201 deletions

View File

@ -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<ContributedLibrary> {
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<ContributedLibrary> {
};
}
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<ContributedLibrary> {
}
public void onInstallPressed(final ContributedLibraryRelease lib) {
List<ContributedLibraryRelease> deps = BaseNoGui.getArduinoCoreService().libraryResolveDependecies(lib);
List<ContributedLibraryRelease> 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<ContributedLibrary> {
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<ContributedLibrary> {
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();

View File

@ -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<String, Object> 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();

View File

@ -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<InstalledLibrary> libraryList(boolean listAll) throws StatusException {
public List<InstalledLibrary> 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<LibraryInstallResp> 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<LibraryUninstallResp> 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);
}
}
}

View File

@ -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);
}
}

View File

@ -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<ContributedLibraryRelease> libs = new ArrayList<>();
libs.add(lib);
install(libs, progressListener);
}
public synchronized void install(List<ContributedLibraryRelease> 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<ContributedLibraryRelease> 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<ContributedLibraryRelease> 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();
}
}