X-Git-Url: https://git.saurik.com/apt.git/blobdiff_plain/8c9c50f94768a13359b108e2cd0da9832f9cf6ad..acddd9188c21c2e13aff5cea3a82f2d01aff788b:/apt-pkg/install-progress.h diff --git a/apt-pkg/install-progress.h b/apt-pkg/install-progress.h index 4b7590983..b5c133676 100644 --- a/apt-pkg/install-progress.h +++ b/apt-pkg/install-progress.h @@ -1,9 +1,12 @@ #ifndef PKGLIB_IPROGRESS_H #define PKGLIB_IPROGRESS_H +#include + #include #include #include +#include namespace APT { namespace Progress { @@ -15,7 +18,7 @@ namespace Progress { { private: /** \brief dpointer placeholder */ - void *d; + void * const d; protected: std::string progress_str; @@ -23,42 +26,42 @@ namespace Progress { int last_reported_progress; public: - PackageManager() - : percentage(0.0), last_reported_progress(-1) {}; - virtual ~PackageManager() {}; + PackageManager(); + virtual ~PackageManager(); /* Global Start/Stop */ - virtual void Start() {}; + virtual void Start(int /*child_pty*/=-1) {}; virtual void Stop() {}; - /* When dpkg is invoked (may happen multiple times for each - * install/remove block + /* When dpkg is invoked (may happen multiple times for each + * install/remove block */ virtual void StartDpkg() {}; - virtual pid_t fork() {return fork(); }; + virtual pid_t fork() {return ::fork(); }; virtual void Pulse() {}; virtual long GetPulseInterval() { - return 500000; + return 50000000; }; - virtual bool StatusChanged(std::string PackageName, + virtual bool StatusChanged(std::string PackageName, unsigned int StepsDone, unsigned int TotalSteps, - std::string HumanReadableAction) ; - virtual void Error(std::string PackageName, - unsigned int StepsDone, - unsigned int TotalSteps, - std::string ErrorMessage) {}; - virtual void ConffilePrompt(std::string PackageName, - unsigned int StepsDone, - unsigned int TotalSteps, - std::string ConfMessage) {}; + std::string HumanReadableAction); + virtual void Error(std::string /*PackageName*/, + unsigned int /*StepsDone*/, + unsigned int /*TotalSteps*/, + std::string /*ErrorMessage*/) {} + virtual void ConffilePrompt(std::string /*PackageName*/, + unsigned int /*StepsDone*/, + unsigned int /*TotalSteps*/, + std::string /*ConfMessage*/) {} }; class PackageManagerProgressFd : public PackageManager { + void * const d; protected: int OutStatusFd; int StepsDone; @@ -66,28 +69,30 @@ namespace Progress { void WriteToStatusFd(std::string msg); public: - PackageManagerProgressFd(int progress_fd); + explicit PackageManagerProgressFd(int progress_fd); + virtual ~PackageManagerProgressFd(); - virtual void StartDpkg(); - virtual void Stop(); + virtual void StartDpkg() APT_OVERRIDE; + virtual void Stop() APT_OVERRIDE; - virtual bool StatusChanged(std::string PackageName, + virtual bool StatusChanged(std::string PackageName, unsigned int StepsDone, unsigned int TotalSteps, - std::string HumanReadableAction); - virtual void Error(std::string PackageName, + std::string HumanReadableAction) APT_OVERRIDE; + virtual void Error(std::string PackageName, unsigned int StepsDone, unsigned int TotalSteps, - std::string ErrorMessage); + std::string ErrorMessage) APT_OVERRIDE; virtual void ConffilePrompt(std::string PackageName, unsigned int StepsDone, unsigned int TotalSteps, - std::string ConfMessage); + std::string ConfMessage) APT_OVERRIDE; }; class PackageManagerProgressDeb822Fd : public PackageManager { + void * const d; protected: int OutStatusFd; int StepsDone; @@ -95,55 +100,77 @@ namespace Progress { void WriteToStatusFd(std::string msg); public: - PackageManagerProgressDeb822Fd(int progress_fd); + explicit PackageManagerProgressDeb822Fd(int progress_fd); + virtual ~PackageManagerProgressDeb822Fd(); - virtual void StartDpkg(); - virtual void Stop(); + virtual void StartDpkg() APT_OVERRIDE; + virtual void Stop() APT_OVERRIDE; - virtual bool StatusChanged(std::string PackageName, + virtual bool StatusChanged(std::string PackageName, unsigned int StepsDone, unsigned int TotalSteps, - std::string HumanReadableAction); - virtual void Error(std::string PackageName, + std::string HumanReadableAction) APT_OVERRIDE; + virtual void Error(std::string PackageName, unsigned int StepsDone, unsigned int TotalSteps, - std::string ErrorMessage); + std::string ErrorMessage) APT_OVERRIDE; virtual void ConffilePrompt(std::string PackageName, unsigned int StepsDone, unsigned int TotalSteps, - std::string ConfMessage); + std::string ConfMessage) APT_OVERRIDE; }; class PackageManagerFancy : public PackageManager { + void * const d; + private: + APT_HIDDEN static void staticSIGWINCH(int); + static std::vector instances; + APT_HIDDEN bool DrawStatusLine(); + protected: - static void SetupTerminalScrollArea(int nr_rows); - static int GetNumberTerminalRows(); - static void HandleSIGWINCH(int); + void SetupTerminalScrollArea(int nr_rows); + void HandleSIGWINCH(int); + + typedef struct { + int rows; + int columns; + } TermSize; + TermSize GetTerminalSize(); + sighandler_t old_SIGWINCH; + int child_pty; public: PackageManagerFancy(); - ~PackageManagerFancy(); - virtual void Start(); - virtual void Stop(); - virtual bool StatusChanged(std::string PackageName, + virtual ~PackageManagerFancy(); + virtual void Start(int child_pty=-1) APT_OVERRIDE; + virtual void Stop() APT_OVERRIDE; + virtual bool StatusChanged(std::string PackageName, unsigned int StepsDone, unsigned int TotalSteps, - std::string HumanReadableAction); + std::string HumanReadableAction) APT_OVERRIDE; + + // return a progress bar of the given size for the given progress + // percent between 0.0 and 1.0 in the form "[####...]" + static std::string GetTextProgressStr(float percent, int OutputSize); }; class PackageManagerText : public PackageManager { + void * const d; public: - virtual bool StatusChanged(std::string PackageName, + virtual bool StatusChanged(std::string PackageName, unsigned int StepsDone, unsigned int TotalSteps, - std::string HumanReadableAction); + std::string HumanReadableAction) APT_OVERRIDE; + + PackageManagerText(); + virtual ~PackageManagerText(); }; -}; // namespace Progress -}; // namespace APT +} // namespace Progress +} // namespace APT #endif