]> git.saurik.com Git - apt.git/blob - apt-pkg/cdrom.h
4fcf5abcd6965a490ccf064fde578073f4c35162
[apt.git] / apt-pkg / cdrom.h
1 #ifndef PKGLIB_CDROM_H
2 #define PKGLIB_CDROM_H
3
4 #include<string>
5 #include<vector>
6
7 #ifndef APT_8_CLEANER_HEADERS
8 using namespace std;
9 #endif
10
11 class Configuration;
12 class OpProgress;
13
14 class pkgCdromStatus /*{{{*/
15 {
16 protected:
17 int totalSteps;
18
19 public:
20 pkgCdromStatus() {};
21 virtual ~pkgCdromStatus() {};
22
23 // total steps
24 virtual void SetTotal(int total) { totalSteps = total; };
25 // update steps, will be called regularly as a "pulse"
26 virtual void Update(std::string text="", int current=0) = 0;
27
28 // ask for cdrom insert
29 virtual bool ChangeCdrom() = 0;
30 // ask for cdrom name
31 virtual bool AskCdromName(std::string &Name) = 0;
32 // Progress indicator for the Index rewriter
33 virtual OpProgress* GetOpProgress() {return NULL; };
34 };
35 /*}}}*/
36 class pkgCdrom /*{{{*/
37 {
38 protected:
39 enum {
40 STEP_PREPARE = 1,
41 STEP_UNMOUNT,
42 STEP_WAIT,
43 STEP_MOUNT,
44 STEP_IDENT,
45 STEP_SCAN,
46 STEP_COPY,
47 STEP_WRITE,
48 STEP_UNMOUNT3,
49 STEP_LAST
50 };
51
52
53 bool FindPackages(std::string CD,
54 std::vector<std::string> &List,
55 std::vector<std::string> &SList,
56 std::vector<std::string> &SigList,
57 std::vector<std::string> &TransList,
58 std::string &InfoDir, pkgCdromStatus *log,
59 unsigned int Depth = 0);
60 bool DropBinaryArch(std::vector<std::string> &List);
61 bool DropRepeats(std::vector<std::string> &List,const char *Name);
62 void ReduceSourcelist(std::string CD,std::vector<std::string> &List);
63 bool WriteDatabase(Configuration &Cnf);
64 bool WriteSourceList(std::string Name,std::vector<std::string> &List,bool Source);
65 int Score(std::string Path);
66
67 public:
68 bool Ident(std::string &ident, pkgCdromStatus *log);
69 bool Add(pkgCdromStatus *log);
70 };
71 /*}}}*/
72
73
74 // class that uses libudev to find cdrom/removable devices dynamically
75 struct CdromDevice /*{{{*/
76 {
77 std::string DeviceName;
78 bool Mounted;
79 std::string MountPath;
80 };
81 /*}}}*/
82 class pkgUdevCdromDevices /*{{{*/
83 {
84 protected:
85 // libudev dlopen stucture
86 void *libudev_handle;
87 struct udev* (*udev_new)(void);
88 int (*udev_enumerate_add_match_property)(struct udev_enumerate *udev_enumerate, const char *property, const char *value);
89 int (*udev_enumerate_scan_devices)(struct udev_enumerate *udev_enumerate);
90 struct udev_list_entry* (*udev_enumerate_get_list_entry)(struct udev_enumerate *udev_enumerate);
91 struct udev_device* (*udev_device_new_from_syspath)(struct udev *udev, const char *syspath);
92 struct udev* (*udev_enumerate_get_udev)(struct udev_enumerate *udev_enumerate);
93 const char* (*udev_list_entry_get_name)(struct udev_list_entry *list_entry);
94 const char* (*udev_device_get_devnode)(struct udev_device *udev_device);
95 struct udev_enumerate *(*udev_enumerate_new) (struct udev *udev);
96 struct udev_list_entry *(*udev_list_entry_get_next)(struct udev_list_entry *list_entry);
97 const char* (*udev_device_get_property_value)(struct udev_device *udev_device, const char *key);
98 int (*udev_enumerate_add_match_sysattr)(struct udev_enumerate *udev_enumerate, const char *property, const char *value);
99 // end libudev dlopen
100
101 public:
102 pkgUdevCdromDevices();
103 virtual ~pkgUdevCdromDevices();
104
105 // try to open
106 bool Dlopen();
107
108 // convenience interface, this will just call ScanForRemovable
109 // with "APT::cdrom::CdromOnly"
110 std::vector<CdromDevice> Scan();
111
112 std::vector<CdromDevice> ScanForRemovable(bool CdromOnly);
113 };
114 /*}}}*/
115
116 #endif