apt  1.5
cdrom.h
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