123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177 |
- #ifndef PKGLIB_IPROGRESS_H
- #define PKGLIB_IPROGRESS_H
- #include <apt-pkg/macros.h>
- #include <string>
- #include <unistd.h>
- #include <signal.h>
- #include <vector>
- namespace APT {
- namespace Progress {
- class PackageManager;
- PackageManager* PackageManagerProgressFactory();
- class PackageManager
- {
- private:
- /** \brief dpointer placeholder */
- void * const d;
- protected:
- std::string progress_str;
- float percentage;
- int last_reported_progress;
- public:
- PackageManager();
- virtual ~PackageManager();
- /* Global Start/Stop */
- virtual void Start(int /*child_pty*/=-1) {};
- virtual void Stop() {};
- /* When dpkg is invoked (may happen multiple times for each
- * install/remove block
- */
- virtual void StartDpkg() {};
- virtual pid_t fork() {return ::fork(); };
- virtual void Pulse() {};
- virtual long GetPulseInterval() {
- return 50000000;
- };
- 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*/) {}
- };
- class PackageManagerProgressFd : public PackageManager
- {
- void * const d;
- protected:
- int OutStatusFd;
- int StepsDone;
- int StepsTotal;
- void WriteToStatusFd(std::string msg);
- public:
- explicit PackageManagerProgressFd(int progress_fd);
- virtual ~PackageManagerProgressFd();
- virtual void StartDpkg() APT_OVERRIDE;
- virtual void Stop() APT_OVERRIDE;
- virtual bool StatusChanged(std::string PackageName,
- unsigned int StepsDone,
- unsigned int TotalSteps,
- std::string HumanReadableAction) APT_OVERRIDE;
- virtual void Error(std::string PackageName,
- unsigned int StepsDone,
- unsigned int TotalSteps,
- std::string ErrorMessage) APT_OVERRIDE;
- virtual void ConffilePrompt(std::string PackageName,
- unsigned int StepsDone,
- unsigned int TotalSteps,
- std::string ConfMessage) APT_OVERRIDE;
- };
- class PackageManagerProgressDeb822Fd : public PackageManager
- {
- void * const d;
- protected:
- int OutStatusFd;
- int StepsDone;
- int StepsTotal;
- void WriteToStatusFd(std::string msg);
- public:
- explicit PackageManagerProgressDeb822Fd(int progress_fd);
- virtual ~PackageManagerProgressDeb822Fd();
- virtual void StartDpkg() APT_OVERRIDE;
- virtual void Stop() APT_OVERRIDE;
- virtual bool StatusChanged(std::string PackageName,
- unsigned int StepsDone,
- unsigned int TotalSteps,
- std::string HumanReadableAction) APT_OVERRIDE;
- virtual void Error(std::string PackageName,
- unsigned int StepsDone,
- unsigned int TotalSteps,
- std::string ErrorMessage) APT_OVERRIDE;
- virtual void ConffilePrompt(std::string PackageName,
- unsigned int StepsDone,
- unsigned int TotalSteps,
- std::string ConfMessage) APT_OVERRIDE;
- };
- class PackageManagerFancy : public PackageManager
- {
- void * const d;
- private:
- APT_HIDDEN static void staticSIGWINCH(int);
- static std::vector<PackageManagerFancy*> instances;
- APT_HIDDEN bool DrawStatusLine();
- protected:
- 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();
- 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) 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,
- unsigned int StepsDone,
- unsigned int TotalSteps,
- std::string HumanReadableAction) APT_OVERRIDE;
- PackageManagerText();
- virtual ~PackageManagerText();
- };
- } // namespace Progress
- } // namespace APT
- #endif
|