From d3f4a86549823f80504a10118e7fc41f51f06a24 Mon Sep 17 00:00:00 2001 From: Rene Gollent Date: Wed, 2 Oct 2013 22:48:44 -0400 Subject: [PATCH] Implement #10051. - Add a simple download progress meter to pkgman that prints a hash mark for every 2% of the download completed. Improvements welcome. --- src/bin/pkgman/PackageManager.cpp | 17 ++++++++++++++--- src/bin/pkgman/PackageManager.h | 1 + 2 files changed, 15 insertions(+), 3 deletions(-) diff --git a/src/bin/pkgman/PackageManager.cpp b/src/bin/pkgman/PackageManager.cpp index e4146c5b4d..d85673f87d 100644 --- a/src/bin/pkgman/PackageManager.cpp +++ b/src/bin/pkgman/PackageManager.cpp @@ -27,7 +27,8 @@ PackageManager::PackageManager(BPackageInstallationLocation location) BPackageManager(location), BPackageManager::UserInteractionHandler(), fDecisionProvider(), - fClientInstallationInterface() + fClientInstallationInterface(), + fPreviousDownloadPercentage(0) { fInstallationInterface = &fClientInstallationInterface; fUserInteractionHandler = this; @@ -156,6 +157,7 @@ void PackageManager::ProgressPackageDownloadStarted(const char* packageName) { printf("Downloading %s...\n", packageName); + fPreviousDownloadPercentage = 0; } @@ -163,14 +165,23 @@ void PackageManager::ProgressPackageDownloadActive(const char* packageName, float completionPercentage) { - // TODO: how to report progress? ncurses perhaps? + int32 currentPercentage = int32(completionPercentage * 100); + int32 difference = currentPercentage - fPreviousDownloadPercentage; + + while (difference >= 2) { + printf("#"); + difference -= 2; + } + fflush(stdout); + + fPreviousDownloadPercentage = currentPercentage - difference; } void PackageManager::ProgressPackageDownloadComplete(const char* packageName) { - printf("Finished downloading %s...\n", packageName); + printf("\nFinished downloading %s.\n", packageName); } diff --git a/src/bin/pkgman/PackageManager.h b/src/bin/pkgman/PackageManager.h index 40191c7290..0162046d19 100644 --- a/src/bin/pkgman/PackageManager.h +++ b/src/bin/pkgman/PackageManager.h @@ -67,6 +67,7 @@ private: DecisionProvider fDecisionProvider; BPackageManager::ClientInstallationInterface fClientInstallationInterface; + int32 fPreviousDownloadPercentage; };