HaikuDepot: Fix #10115.

- Also reset package state in the BFatalErrorException case.

- Show actual alerts for fatal install/uninstall errors rather than simply
  printing them to the console.
This commit is contained in:
Rene Gollent 2013-11-12 18:13:55 -05:00
parent 7192a9313e
commit 58114b3476
1 changed files with 18 additions and 4 deletions

View File

@ -13,6 +13,7 @@
#include <stdio.h> #include <stdio.h>
#include <Alert.h>
#include <Catalog.h> #include <Catalog.h>
#include <package/DownloadFileRequest.h> #include <package/DownloadFileRequest.h>
@ -113,9 +114,16 @@ public:
try { try {
fPackageManager->Install(&packageName, 1); fPackageManager->Install(&packageName, 1);
} catch (BFatalErrorException ex) { } catch (BFatalErrorException ex) {
fprintf(stderr, "Fatal error occurred while installing package " _SetDownloadedPackagesState(NONE);
"%s: %s (%s)\n", packageName, ex.Message().String(), BString errorString;
errorString.SetToFormat(
"Fatal error occurred while installing package %s: "
"%s (%s)\n", packageName, ex.Message().String(),
ex.Details().String()); ex.Details().String());
BAlert* alert(new(std::nothrow) BAlert(B_TRANSLATE("Fatal error"),
errorString, B_TRANSLATE("Close")));
if (alert != NULL)
alert->Go(NULL);
return ex.Error(); return ex.Error();
} catch (BAbortedByUserException ex) { } catch (BAbortedByUserException ex) {
_SetDownloadedPackagesState(NONE); _SetDownloadedPackagesState(NONE);
@ -207,9 +215,15 @@ public:
try { try {
fPackageManager->Uninstall(&packageName, 1); fPackageManager->Uninstall(&packageName, 1);
} catch (BFatalErrorException ex) { } catch (BFatalErrorException ex) {
fprintf(stderr, "Fatal error occurred while uninstalling package " BString errorString;
"%s: %s (%s)\n", packageName, ex.Message().String(), errorString.SetToFormat(
"Fatal error occurred while uninstalling package %s: "
"%s (%s)\n", packageName, ex.Message().String(),
ex.Details().String()); ex.Details().String());
BAlert* alert(new(std::nothrow) BAlert(B_TRANSLATE("Fatal error"),
errorString, B_TRANSLATE("Close")));
if (alert != NULL)
alert->Go(NULL);
return ex.Error(); return ex.Error();
} catch (BAbortedByUserException ex) { } catch (BAbortedByUserException ex) {
return B_OK; return B_OK;