summaryrefslogtreecommitdiff
path: root/apt-pkg/iprogress.h
blob: 42fa89be48251336b4800b4b729a335ad57e145a (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
#ifndef PKGLIB_IPROGRESS_H
#define PKGLIB_IPROGRESS_H

#include <string>
#include <unistd.h>


namespace APT {
namespace Progress {

 class PackageManager
 {
 private:
    /** \brief dpointer placeholder */
    void *d;

 protected:
    std::string progress_str;
    float percentage;
    int last_reported_progress;

 public:
    PackageManager() 
       : percentage(0.0), last_reported_progress(-1) {};
    virtual ~PackageManager() {};

    virtual void Start() {};
    virtual void Stop() {};

    virtual pid_t fork() {return fork(); };

    virtual void Pulse() {};
    virtual long GetPulseInterval() {
         return 500000;
    };

    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
 {
 protected:
    int OutStatusFd;
    int StepsDone;
    int StepsTotal;
    void WriteToStatusFd(std::string msg);

 public:
    PackageManagerProgressFd(int progress_fd);

    virtual void Start();
    virtual void Stop();

    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 PackageManagerFancy : public PackageManager
 {
 protected:
    int nr_terminal_rows;
    void SetupTerminalScrollArea(int nr_rows);

 public:
    PackageManagerFancy();
    virtual void Start();
    virtual void Stop();
    virtual bool StatusChanged(std::string PackageName, 
                               unsigned int StepsDone,
                               unsigned int TotalSteps,
                               std::string HumanReadableAction);
 };

 class PackageManagerText : public PackageManager
 {
 public:
    virtual bool StatusChanged(std::string PackageName, 
                               unsigned int StepsDone,
                               unsigned int TotalSteps,
                               std::string HumanReadableAction);
 };


}; // namespace Progress
}; // namespace APT

#endif