diff --git a/python/src/com/jetbrains/python/packaging/ui/InstalledPackagesPanel.java b/python/src/com/jetbrains/python/packaging/ui/InstalledPackagesPanel.java index b94f4c4a5ef9..04c0f5a4d935 100644 --- a/python/src/com/jetbrains/python/packaging/ui/InstalledPackagesPanel.java +++ b/python/src/com/jetbrains/python/packaging/ui/InstalledPackagesPanel.java @@ -141,13 +141,13 @@ public class InstalledPackagesPanel extends JPanel { myPackageManagementService, new PackageManagementService.Listener() { @Override - public void installationStarted(String packageName) { + public void operationStarted(String packageName) { myPackagesTable.setPaintBusy(true); } @Override - public void installationFinished(String packageName, - @Nullable String errorDescription) { + public void operationFinished(String packageName, + @Nullable String errorDescription) { myNotificationArea.showResult(packageName, errorDescription); myPackagesTable.clearSelection(); doUpdatePackages(mySelectedSdk); @@ -194,13 +194,13 @@ public class InstalledPackagesPanel extends JPanel { public void run() { final PackageManagementService.Listener listener = new PackageManagementService.Listener() { @Override - public void installationStarted(String packageName) { + public void operationStarted(String packageName) { myPackagesTable.setPaintBusy(true); currentlyInstalling.add(packageName); } @Override - public void installationFinished(String packageName, @Nullable String errorDescription) { + public void operationFinished(String packageName, @Nullable String errorDescription) { myPackagesTable.clearSelection(); updatePackages(selectedSdk, selPackageManagementService); myPackagesTable.setPaintBusy(false); @@ -283,45 +283,50 @@ public class InstalledPackagesPanel extends JPanel { myUninstallButton.addActionListener(new ActionListener() { @Override public void actionPerformed(final ActionEvent e) { - final List packages = getSelectedPackages(); + final List packages = getSelectedPackages(); final Sdk sdk = mySelectedSdk; final PackageManagementService selPackageManagementService = myPackageManagementService; if (sdk != null) { - PyPackageManagerImpl.UI ui = new PyPackageManagerImpl.UI(myProject, sdk, new PyPackageManagerImpl.UI.Listener() { + PackageManagementService.Listener listener = new PackageManagementService.Listener() { @Override - public void started() { + public void operationStarted(String packageName) { myPackagesTable.setPaintBusy(true); } @Override - public void finished(final List exceptions) { + public void operationFinished(String packageName, @Nullable String errorDescription) { myPackagesTable.clearSelection(); updatePackages(sdk, selPackageManagementService); myPackagesTable.setPaintBusy(false); - if (exceptions.isEmpty()) { - myNotificationArea.showSuccess("Packages successfully uninstalled"); + if (errorDescription == null) { + if (packageName != null) { + myNotificationArea.showSuccess("Package '" + packageName + "' successfully uninstalled"); + } + else { + myNotificationArea.showSuccess("Packages successfully uninstalled"); + } } else { myNotificationArea.showError("Uninstall packages failed. Details...", "Uninstall Packages Failed", - PyPackageManagerImpl.UI.createDescription(exceptions, "Uninstall packages failed.")); + "Uninstall packages failed.\n" + errorDescription); } } - }); - ui.uninstall(packages); + }; + myPackageManagementService.uninstallPackages(packages, listener); } } }); } @NotNull - private List getSelectedPackages() { - final List results = new ArrayList(); + private List getSelectedPackages() { + final List results = new ArrayList(); final int[] rows = myPackagesTable.getSelectedRows(); for (int row : rows) { final Object packageName = myPackagesTableModel.getValueAt(row, 0); - if (packageName instanceof PyPackage) { - results.add((PyPackage)packageName); + if (packageName instanceof InstalledPackage) { + results.add((InstalledPackage)packageName); } } return results; diff --git a/python/src/com/jetbrains/python/packaging/ui/PyPackageManagementService.java b/python/src/com/jetbrains/python/packaging/ui/PyPackageManagementService.java index 72ee38c0681e..1174a936e50d 100644 --- a/python/src/com/jetbrains/python/packaging/ui/PyPackageManagementService.java +++ b/python/src/com/jetbrains/python/packaging/ui/PyPackageManagementService.java @@ -145,21 +145,49 @@ public class PyPackageManagementService extends PackageManagementService { final PyPackageManagerImpl.UI ui = new PyPackageManagerImpl.UI(myProject, mySdk, new PyPackageManagerImpl.UI.Listener() { @Override public void started() { - listener.installationStarted(packageName); + listener.operationStarted(packageName); } @Override public void finished(@Nullable List exceptions) { - String errorDescription = null; - if (exceptions != null && exceptions.size() > 0) { - errorDescription = PyPackageManagerImpl.UI.createDescription(exceptions, ""); - } - listener.installationFinished(packageName, errorDescription); + listener.operationFinished(packageName, toErrorDescription(exceptions)); } }); ui.install(Collections.singletonList(req), extraArgs); } + private String toErrorDescription(List exceptions) { + String errorDescription = null; + if (exceptions != null && exceptions.size() > 0) { + errorDescription = PyPackageManagerImpl.UI.createDescription(exceptions, ""); + } + return errorDescription; + } + + @Override + public void uninstallPackages(List installedPackages, final Listener listener) { + final String packageName = installedPackages.size() == 1 ? installedPackages.get(0).getName() : null; + PyPackageManagerImpl.UI ui = new PyPackageManagerImpl.UI(myProject, mySdk, new PyPackageManagerImpl.UI.Listener() { + @Override + public void started() { + listener.operationStarted(packageName); + } + + @Override + public void finished(final List exceptions) { + listener.operationFinished(packageName, toErrorDescription(exceptions)); + } + }); + + List pyPackages = new ArrayList(); + for (InstalledPackage aPackage : installedPackages) { + if (aPackage instanceof PyPackage) { + pyPackages.add((PyPackage) aPackage); + } + } + ui.uninstall(pyPackages); + } + @Override public void fetchPackageVersions(final String packageName, final CatchingConsumer, Exception> consumer) { PyPIPackageUtil.INSTANCE.usePackageReleases(packageName, new AsyncCallback() {