From 24e3b35816f93635e1d7f25b8a0093ae5861d767 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Stephan=20A=C3=9Fmus?= Date: Sat, 25 Oct 2014 11:02:24 +0200 Subject: [PATCH] HaikuDepot: Support installing local package files * Give the PackageManager either the package name, or the path to a local .hpkg package to Install(). * Implement Warn() to at least print something to the command line. Change the TODO to show the warning to the user instead. --- src/apps/haikudepot/model/PackageManager.cpp | 33 +++++++++++++++----- 1 file changed, 26 insertions(+), 7 deletions(-) diff --git a/src/apps/haikudepot/model/PackageManager.cpp b/src/apps/haikudepot/model/PackageManager.cpp index 83b42c0363..b2791b7820 100644 --- a/src/apps/haikudepot/model/PackageManager.cpp +++ b/src/apps/haikudepot/model/PackageManager.cpp @@ -109,17 +109,25 @@ public: | BPackageManager::B_REFRESH_REPOSITORIES); PackageInfoRef ref(Package()); ref->SetState(PENDING); + fPackageManager->SetCurrentActionPackage(ref, true); fPackageManager->AddProgressListener(this); - const char* packageName = ref->Title().String(); + + BString packageName; + if (ref->IsLocalFile()) + packageName = ref->LocalFilePath(); + else + packageName = ref->Title(); + + const char* packageNameString = packageName.String(); try { - fPackageManager->Install(&packageName, 1); + fPackageManager->Install(&packageNameString, 1); } catch (BFatalErrorException ex) { _SetDownloadedPackagesState(NONE); BString errorString; errorString.SetToFormat( "Fatal error occurred while installing package %s: " - "%s (%s)\n", packageName, ex.Message().String(), + "%s (%s)\n", packageNameString, ex.Message().String(), ex.Details().String()); BAlert* alert(new(std::nothrow) BAlert(B_TRANSLATE("Fatal error"), errorString, B_TRANSLATE("Close"))); @@ -128,16 +136,17 @@ public: return ex.Error(); } catch (BAbortedByUserException ex) { fprintf(stderr, "Installation of package " - "%s aborted by user: %s\n", packageName, ex.Message().String()); + "%s aborted by user: %s\n", packageNameString, + ex.Message().String()); _SetDownloadedPackagesState(NONE); return B_OK; } catch (BNothingToDoException ex) { fprintf(stderr, "Nothing to do while installing package " - "%s: %s\n", packageName, ex.Message().String()); + "%s: %s\n", packageNameString, ex.Message().String()); return B_OK; } catch (BException ex) { fprintf(stderr, "Exception occurred while installing package " - "%s: %s\n", packageName, ex.Message().String()); + "%s: %s\n", packageNameString, ex.Message().String()); _SetDownloadedPackagesState(NONE); return B_ERROR;; } @@ -440,7 +449,17 @@ PackageManager::ConfirmChanges(bool fromMostSpecific) void PackageManager::Warn(status_t error, const char* format, ...) { - // TODO: implement + // TODO: Show alert to user + + va_list args; + va_start(args, format); + vfprintf(stderr, format, args); + va_end(args); + + if (error == B_OK) + printf("\n"); + else + printf(": %s\n", strerror(error)); }