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