add new pid_t ExecFork(std::set<int> KeepFDs) to get rid of the super ugly APT::Keep...
[ntk/apt.git] / apt-pkg / install-progress.h
CommitLineData
31f97d7b 1#ifndef PKGLIB_IPROGRESS_H
e6ad8031 2#define PKGLIB_IPROGRESS_H
31f97d7b 3
e6ad8031
MV
4#include <string>
5#include <unistd.h>
31f97d7b 6
31f97d7b
MV
7
8namespace APT {
9namespace Progress {
10
bd5f39b3
MV
11 class PackageManager;
12 PackageManager* PackageManagerProgressFactory();
13
31f97d7b
MV
14 class PackageManager
15 {
16 private:
17 /** \brief dpointer placeholder */
18 void *d;
19
6c5ae8ed
MV
20 protected:
21 std::string progress_str;
22 float percentage;
23 int last_reported_progress;
24
31f97d7b 25 public:
e6ad8031 26 PackageManager()
65dbd5a1 27 : percentage(0.0), last_reported_progress(-1) {};
31f97d7b
MV
28 virtual ~PackageManager() {};
29
e45c4617 30 /* Global Start/Stop */
a22fdebf
MV
31 virtual void Start() {};
32 virtual void Stop() {};
e6ad8031 33
e45c4617
MV
34 /* When dpkg is invoked (may happen multiple times for each
35 * install/remove block
36 */
37 virtual void StartDpkg() {};
38
e6ad8031 39 virtual pid_t fork() {return fork(); };
ca5b2578
MV
40
41 virtual void Pulse() {};
42 virtual long GetPulseInterval() {
43 return 500000;
44 };
45
6c5ae8ed 46 virtual bool StatusChanged(std::string PackageName,
31f97d7b 47 unsigned int StepsDone,
e6ad8031
MV
48 unsigned int TotalSteps,
49 std::string HumanReadableAction) ;
50 virtual void Error(std::string PackageName,
51 unsigned int StepsDone,
52 unsigned int TotalSteps,
53 std::string ErrorMessage) {};
54 virtual void ConffilePrompt(std::string PackageName,
55 unsigned int StepsDone,
56 unsigned int TotalSteps,
57 std::string ConfMessage) {};
58 };
59
60 class PackageManagerProgressFd : public PackageManager
61 {
62 protected:
63 int OutStatusFd;
64 int StepsDone;
65 int StepsTotal;
f9935b1c 66 void WriteToStatusFd(std::string msg);
e6ad8031
MV
67
68 public:
69 PackageManagerProgressFd(int progress_fd);
f9935b1c 70
e45c4617 71 virtual void StartDpkg();
a22fdebf 72 virtual void Stop();
e6ad8031
MV
73
74 virtual bool StatusChanged(std::string PackageName,
75 unsigned int StepsDone,
76 unsigned int TotalSteps,
77 std::string HumanReadableAction);
78 virtual void Error(std::string PackageName,
79 unsigned int StepsDone,
80 unsigned int TotalSteps,
81 std::string ErrorMessage);
82 virtual void ConffilePrompt(std::string PackageName,
83 unsigned int StepsDone,
84 unsigned int TotalSteps,
85 std::string ConfMessage);
86
31f97d7b
MV
87 };
88
c7ea1eba
MV
89 class PackageManagerProgressDeb822Fd : public PackageManager
90 {
91 protected:
92 int OutStatusFd;
93 int StepsDone;
94 int StepsTotal;
95 void WriteToStatusFd(std::string msg);
96
97 public:
98 PackageManagerProgressDeb822Fd(int progress_fd);
99
100 virtual void Start();
101 virtual void Stop();
102
103 virtual bool StatusChanged(std::string PackageName,
104 unsigned int StepsDone,
105 unsigned int TotalSteps,
106 std::string HumanReadableAction);
107 virtual void Error(std::string PackageName,
108 unsigned int StepsDone,
109 unsigned int TotalSteps,
110 std::string ErrorMessage);
111 virtual void ConffilePrompt(std::string PackageName,
112 unsigned int StepsDone,
113 unsigned int TotalSteps,
114 std::string ConfMessage);
115 };
116
31f97d7b
MV
117 class PackageManagerFancy : public PackageManager
118 {
119 protected:
31f97d7b 120 int nr_terminal_rows;
db78c60c
MV
121 void SetupTerminalScrollArea(int nr_rows);
122
31f97d7b
MV
123 public:
124 PackageManagerFancy();
a22fdebf
MV
125 virtual void Start();
126 virtual void Stop();
6c5ae8ed 127 virtual bool StatusChanged(std::string PackageName,
31f97d7b 128 unsigned int StepsDone,
e6ad8031
MV
129 unsigned int TotalSteps,
130 std::string HumanReadableAction);
31f97d7b
MV
131 };
132
133 class PackageManagerText : public PackageManager
134 {
31f97d7b 135 public:
6c5ae8ed 136 virtual bool StatusChanged(std::string PackageName,
31f97d7b 137 unsigned int StepsDone,
e6ad8031
MV
138 unsigned int TotalSteps,
139 std::string HumanReadableAction);
31f97d7b
MV
140 };
141
142
143}; // namespace Progress
144}; // namespace APT
145
146#endif