in src/org/jetbrains/r/packages/remote/ui/RInstalledPackagesPanelBase.java [392:449]
private void upgradePackage(final @NotNull RInstalledPackage pkg, final @Nullable String toVersion) {
final RPackageManagementService selectedPackageManagementService = myPackageManagementService;
myPackageManagementService.fetchPackageVersions(pkg.getName(), new CatchingConsumer<>() {
@Override
public void consume(java.util.List<String> releases) {
if (!releases.isEmpty() && !isUpdateAvailable(pkg.getVersion(), releases.get(0))) {
return;
}
ApplicationManager.getApplication().invokeLater(() -> {
ModalityState modalityState = ModalityState.current();
final PackageManagementService.Listener listener = new PackageManagementService.Listener() {
@Override
public void operationStarted(final String packageName) {
ApplicationManager.getApplication().invokeLater(() -> myCurrentlyInstalling.add(packageName), modalityState);
}
@Override
public void operationFinished(final String packageName,
final @Nullable PackageManagementService.ErrorDescription errorDescription) {
ApplicationManager.getApplication().invokeLater(() -> {
myPackagesTable.clearSelection();
updatePackages(selectedPackageManagementService);
myCurrentlyInstalling.remove(packageName);
if (errorDescription == null) {
myNotificationArea.showSuccess("Package " + packageName + " successfully upgraded");
}
else {
myNotificationArea.showError("Upgrade packages failed. <a href=\"xxx\">Details...</a>",
RBundle.INSTANCE.message("install.package.dialog.title.upgrade.packages.failed"),
errorDescription);
}
if (myCurrentlyInstalling.isEmpty() && !myWaitingToUpgrade.isEmpty()) {
upgradePostponedPackages();
}
}, modalityState);
}
};
PackageManagementServiceEx serviceEx = getServiceEx();
if (serviceEx != null) {
serviceEx.updatePackage(pkg, toVersion, listener);
}
else {
myPackageManagementService.installPackage(new RepoPackage(pkg.getName(), null /* TODO? */), null, true, null, listener, false);
}
myUpgradeEnabled = false;
}, ModalityState.any());
}
@Override
public void consume(Exception e) {
ApplicationManager.getApplication().invokeLater(() -> Messages
.showErrorDialog(RBundle.INSTANCE.message("install.package.dialog.message.error.occurred.please.check.your.internet.connection"),
RBundle.INSTANCE.message("install.package.dialog.title.upgrade.package.failed")), ModalityState.any());
}
});
}