install-progress.h 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141
  1. #ifndef PKGLIB_IPROGRESS_H
  2. #define PKGLIB_IPROGRESS_H
  3. #include <string>
  4. #include <unistd.h>
  5. namespace APT {
  6. namespace Progress {
  7. class PackageManager;
  8. PackageManager* PackageManagerProgressFactory();
  9. class PackageManager
  10. {
  11. private:
  12. /** \brief dpointer placeholder */
  13. void *d;
  14. protected:
  15. std::string progress_str;
  16. float percentage;
  17. int last_reported_progress;
  18. public:
  19. PackageManager()
  20. : percentage(0.0), last_reported_progress(-1) {};
  21. virtual ~PackageManager() {};
  22. virtual void Start() {};
  23. virtual void Stop() {};
  24. virtual pid_t fork() {return fork(); };
  25. virtual void Pulse() {};
  26. virtual long GetPulseInterval() {
  27. return 500000;
  28. };
  29. virtual bool StatusChanged(std::string PackageName,
  30. unsigned int StepsDone,
  31. unsigned int TotalSteps,
  32. std::string HumanReadableAction) ;
  33. virtual void Error(std::string PackageName,
  34. unsigned int StepsDone,
  35. unsigned int TotalSteps,
  36. std::string ErrorMessage) {};
  37. virtual void ConffilePrompt(std::string PackageName,
  38. unsigned int StepsDone,
  39. unsigned int TotalSteps,
  40. std::string ConfMessage) {};
  41. };
  42. class PackageManagerProgressFd : public PackageManager
  43. {
  44. protected:
  45. int OutStatusFd;
  46. int StepsDone;
  47. int StepsTotal;
  48. void WriteToStatusFd(std::string msg);
  49. public:
  50. PackageManagerProgressFd(int progress_fd);
  51. virtual void Start();
  52. virtual void Stop();
  53. virtual bool StatusChanged(std::string PackageName,
  54. unsigned int StepsDone,
  55. unsigned int TotalSteps,
  56. std::string HumanReadableAction);
  57. virtual void Error(std::string PackageName,
  58. unsigned int StepsDone,
  59. unsigned int TotalSteps,
  60. std::string ErrorMessage);
  61. virtual void ConffilePrompt(std::string PackageName,
  62. unsigned int StepsDone,
  63. unsigned int TotalSteps,
  64. std::string ConfMessage);
  65. };
  66. class PackageManagerProgressDeb822Fd : public PackageManager
  67. {
  68. protected:
  69. int OutStatusFd;
  70. int StepsDone;
  71. int StepsTotal;
  72. void WriteToStatusFd(std::string msg);
  73. public:
  74. PackageManagerProgressDeb822Fd(int progress_fd);
  75. virtual void Start();
  76. virtual void Stop();
  77. virtual bool StatusChanged(std::string PackageName,
  78. unsigned int StepsDone,
  79. unsigned int TotalSteps,
  80. std::string HumanReadableAction);
  81. virtual void Error(std::string PackageName,
  82. unsigned int StepsDone,
  83. unsigned int TotalSteps,
  84. std::string ErrorMessage);
  85. virtual void ConffilePrompt(std::string PackageName,
  86. unsigned int StepsDone,
  87. unsigned int TotalSteps,
  88. std::string ConfMessage);
  89. };
  90. class PackageManagerFancy : public PackageManager
  91. {
  92. protected:
  93. int nr_terminal_rows;
  94. void SetupTerminalScrollArea(int nr_rows);
  95. public:
  96. PackageManagerFancy();
  97. virtual void Start();
  98. virtual void Stop();
  99. virtual bool StatusChanged(std::string PackageName,
  100. unsigned int StepsDone,
  101. unsigned int TotalSteps,
  102. std::string HumanReadableAction);
  103. };
  104. class PackageManagerText : public PackageManager
  105. {
  106. public:
  107. virtual bool StatusChanged(std::string PackageName,
  108. unsigned int StepsDone,
  109. unsigned int TotalSteps,
  110. std::string HumanReadableAction);
  111. };
  112. }; // namespace Progress
  113. }; // namespace APT
  114. #endif