apt @VERSION@

cdrom.h

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