00001 #ifndef PKGLIB_CDROM_H
00002 #define PKGLIB_CDROM_H
00003
00004 #include<apt-pkg/init.h>
00005 #include<string>
00006 #include<vector>
00007
00008
00009 using namespace std;
00010
00011 class pkgCdromStatus
00012 {
00013 protected:
00014 int totalSteps;
00015
00016 public:
00017 pkgCdromStatus() {};
00018 virtual ~pkgCdromStatus() {};
00019
00020
00021 virtual void SetTotal(int total) { totalSteps = total; };
00022
00023 virtual void Update(string text="", int current=0) = 0;
00024
00025
00026 virtual bool ChangeCdrom() = 0;
00027
00028 virtual bool AskCdromName(string &Name) = 0;
00029
00030 virtual OpProgress* GetOpProgress() {return NULL; };
00031 };
00032
00033 class pkgCdrom
00034 {
00035 protected:
00036 enum {
00037 STEP_PREPARE = 1,
00038 STEP_UNMOUNT,
00039 STEP_WAIT,
00040 STEP_MOUNT,
00041 STEP_IDENT,
00042 STEP_SCAN,
00043 STEP_COPY,
00044 STEP_WRITE,
00045 STEP_UNMOUNT3,
00046 STEP_LAST
00047 };
00048
00049
00050 bool FindPackages(string CD,
00051 vector<string> &List,
00052 vector<string> &SList,
00053 vector<string> &SigList,
00054 vector<string> &TransList,
00055 string &InfoDir, pkgCdromStatus *log,
00056 unsigned int Depth = 0);
00057 bool DropBinaryArch(vector<string> &List);
00058 bool DropRepeats(vector<string> &List,const char *Name);
00059 void ReduceSourcelist(string CD,vector<string> &List);
00060 bool WriteDatabase(Configuration &Cnf);
00061 bool WriteSourceList(string Name,vector<string> &List,bool Source);
00062 int Score(string Path);
00063
00064 public:
00065 bool Ident(string &ident, pkgCdromStatus *log);
00066 bool Add(pkgCdromStatus *log);
00067 };
00068
00069
00070
00071
00072 struct CdromDevice
00073 {
00074 string DeviceName;
00075 bool Mounted;
00076 string MountPath;
00077 };
00078
00079 class pkgUdevCdromDevices
00080 {
00081 protected:
00082
00083 void *libudev_handle;
00084 struct udev* (*udev_new)(void);
00085 int (*udev_enumerate_add_match_property)(struct udev_enumerate *udev_enumerate, const char *property, const char *value);
00086 int (*udev_enumerate_scan_devices)(struct udev_enumerate *udev_enumerate);
00087 struct udev_list_entry* (*udev_enumerate_get_list_entry)(struct udev_enumerate *udev_enumerate);
00088 struct udev_device* (*udev_device_new_from_syspath)(struct udev *udev, const char *syspath);
00089 struct udev* (*udev_enumerate_get_udev)(struct udev_enumerate *udev_enumerate);
00090 const char* (*udev_list_entry_get_name)(struct udev_list_entry *list_entry);
00091 const char* (*udev_device_get_devnode)(struct udev_device *udev_device);
00092 struct udev_enumerate *(*udev_enumerate_new) (struct udev *udev);
00093 struct udev_list_entry *(*udev_list_entry_get_next)(struct udev_list_entry *list_entry);
00094 const char* (*udev_device_get_property_value)(struct udev_device *udev_device, const char *key);
00095
00096
00097 public:
00098 pkgUdevCdromDevices();
00099 virtual ~pkgUdevCdromDevices();
00100
00101
00102 bool Dlopen();
00103 vector<CdromDevice> Scan();
00104 };
00105
00106
00107 #endif