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