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