|
apt @VERSION@
|
00001 #ifndef PKGLIB_CDROM_H 00002 #define PKGLIB_CDROM_H 00003 00004 #include<string> 00005 #include<vector> 00006 00007 class Configuration; 00008 class OpProgress; 00009 00010 class pkgCdromStatus /*{{{*/ 00011 { 00012 protected: 00013 int totalSteps; 00014 00015 public: 00016 pkgCdromStatus() {}; 00017 virtual ~pkgCdromStatus() {}; 00018 00019 // total steps 00020 virtual void SetTotal(int total) { totalSteps = total; }; 00021 // update steps, will be called regularly as a "pulse" 00022 virtual void Update(std::string text="", int current=0) = 0; 00023 00024 // ask for cdrom insert 00025 virtual bool ChangeCdrom() = 0; 00026 // ask for cdrom name 00027 virtual bool AskCdromName(std::string &Name) = 0; 00028 // Progress indicator for the Index rewriter 00029 virtual OpProgress* GetOpProgress() {return NULL; }; 00030 }; 00031 /*}}}*/ 00032 class pkgCdrom /*{{{*/ 00033 { 00034 protected: 00035 enum { 00036 STEP_PREPARE = 1, 00037 STEP_UNMOUNT, 00038 STEP_WAIT, 00039 STEP_MOUNT, 00040 STEP_IDENT, 00041 STEP_SCAN, 00042 STEP_COPY, 00043 STEP_WRITE, 00044 STEP_UNMOUNT3, 00045 STEP_LAST 00046 }; 00047 00048 00049 bool FindPackages(std::string CD, 00050 std::vector<std::string> &List, 00051 std::vector<std::string> &SList, 00052 std::vector<std::string> &SigList, 00053 std::vector<std::string> &TransList, 00054 std::string &InfoDir, pkgCdromStatus *log, 00055 unsigned int Depth = 0); 00056 bool DropBinaryArch(std::vector<std::string> &List); 00057 bool DropRepeats(std::vector<std::string> &List,const char *Name); 00058 void ReduceSourcelist(std::string CD,std::vector<std::string> &List); 00059 bool WriteDatabase(Configuration &Cnf); 00060 bool WriteSourceList(std::string Name,std::vector<std::string> &List,bool Source); 00061 int Score(std::string Path); 00062 00063 public: 00064 bool Ident(std::string &ident, pkgCdromStatus *log); 00065 bool Add(pkgCdromStatus *log); 00066 }; 00067 /*}}}*/ 00068 00069 00070 // class that uses libudev to find cdrom/removable devices dynamically 00071 struct CdromDevice /*{{{*/ 00072 { 00073 std::string DeviceName; 00074 bool Mounted; 00075 std::string MountPath; 00076 }; 00077 /*}}}*/ 00078 class pkgUdevCdromDevices /*{{{*/ 00079 { 00080 protected: 00081 // libudev dlopen stucture 00082 void *libudev_handle; 00083 struct udev* (*udev_new)(void); 00084 int (*udev_enumerate_add_match_property)(struct udev_enumerate *udev_enumerate, const char *property, const char *value); 00085 int (*udev_enumerate_scan_devices)(struct udev_enumerate *udev_enumerate); 00086 struct udev_list_entry* (*udev_enumerate_get_list_entry)(struct udev_enumerate *udev_enumerate); 00087 struct udev_device* (*udev_device_new_from_syspath)(struct udev *udev, const char *syspath); 00088 struct udev* (*udev_enumerate_get_udev)(struct udev_enumerate *udev_enumerate); 00089 const char* (*udev_list_entry_get_name)(struct udev_list_entry *list_entry); 00090 const char* (*udev_device_get_devnode)(struct udev_device *udev_device); 00091 struct udev_enumerate *(*udev_enumerate_new) (struct udev *udev); 00092 struct udev_list_entry *(*udev_list_entry_get_next)(struct udev_list_entry *list_entry); 00093 const char* (*udev_device_get_property_value)(struct udev_device *udev_device, const char *key); 00094 int (*udev_enumerate_add_match_sysattr)(struct udev_enumerate *udev_enumerate, const char *property, const char *value); 00095 // end libudev dlopen 00096 00097 public: 00098 pkgUdevCdromDevices(); 00099 virtual ~pkgUdevCdromDevices(); 00100 00101 // try to open 00102 bool Dlopen(); 00103 00104 // convenience interface, this will just call ScanForRemovable 00105 // with "APT::cdrom::CdromOnly" 00106 std::vector<CdromDevice> Scan(); 00107 00108 std::vector<CdromDevice> ScanForRemovable(bool CdromOnly); 00109 }; 00110 /*}}}*/ 00111 00112 #endif
1.7.4