apt @VERSION@
|
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 // total steps 00021 virtual void SetTotal(int total) { totalSteps = total; }; 00022 // update steps, will be called regularly as a "pulse" 00023 virtual void Update(string text="", int current=0) = 0; 00024 00025 // ask for cdrom insert 00026 virtual bool ChangeCdrom() = 0; 00027 // ask for cdrom name 00028 virtual bool AskCdromName(string &Name) = 0; 00029 // Progress indicator for the Index rewriter 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 // class that uses libudev to find cdrom/removable devices dynamically 00072 struct CdromDevice /*{{{*/ 00073 { 00074 string DeviceName; 00075 bool Mounted; 00076 string MountPath; 00077 }; 00078 /*}}}*/ 00079 class pkgUdevCdromDevices /*{{{*/ 00080 { 00081 protected: 00082 // libudev dlopen stucture 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 #if 0 // FIXME: uncomment on next ABI break 00096 int (*udev_enumerate_add_match_sysattr)(struct udev_enumerate *udev_enumerate, const char *property, const char *value); 00097 #endif 00098 // end libudev dlopen 00099 00100 public: 00101 pkgUdevCdromDevices(); 00102 virtual ~pkgUdevCdromDevices(); 00103 00104 // try to open 00105 bool Dlopen(); 00106 00107 // this is the new interface 00108 vector<CdromDevice> ScanForRemovable(bool CdromOnly); 00109 // FIXME: compat with the old interface/API/ABI only 00110 vector<CdromDevice> Scan(); 00111 00112 }; 00113 /*}}}*/ 00114 00115 #endif