cdrom.h 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108
  1. #ifndef PKGLIB_CDROM_H
  2. #define PKGLIB_CDROM_H
  3. #include<apt-pkg/init.h>
  4. #include<string>
  5. #include<vector>
  6. using namespace std;
  7. class pkgCdromStatus /*{{{*/
  8. {
  9. protected:
  10. int totalSteps;
  11. public:
  12. pkgCdromStatus() {};
  13. virtual ~pkgCdromStatus() {};
  14. // total steps
  15. virtual void SetTotal(int total) { totalSteps = total; };
  16. // update steps, will be called regularly as a "pulse"
  17. virtual void Update(string text="", int current=0) = 0;
  18. // ask for cdrom insert
  19. virtual bool ChangeCdrom() = 0;
  20. // ask for cdrom name
  21. virtual bool AskCdromName(string &Name) = 0;
  22. // Progress indicator for the Index rewriter
  23. virtual OpProgress* GetOpProgress() {return NULL; };
  24. };
  25. /*}}}*/
  26. class pkgCdrom /*{{{*/
  27. {
  28. protected:
  29. enum {
  30. STEP_PREPARE = 1,
  31. STEP_UNMOUNT,
  32. STEP_WAIT,
  33. STEP_MOUNT,
  34. STEP_IDENT,
  35. STEP_SCAN,
  36. STEP_COPY,
  37. STEP_WRITE,
  38. STEP_UNMOUNT3,
  39. STEP_LAST
  40. };
  41. bool FindPackages(string CD,
  42. vector<string> &List,
  43. vector<string> &SList,
  44. vector<string> &SigList,
  45. vector<string> &TransList,
  46. string &InfoDir, pkgCdromStatus *log,
  47. unsigned int Depth = 0);
  48. bool DropBinaryArch(vector<string> &List);
  49. bool DropRepeats(vector<string> &List,const char *Name);
  50. void ReduceSourcelist(string CD,vector<string> &List);
  51. bool WriteDatabase(Configuration &Cnf);
  52. bool WriteSourceList(string Name,vector<string> &List,bool Source);
  53. int Score(string Path);
  54. public:
  55. bool Ident(string &ident, pkgCdromStatus *log);
  56. bool Add(pkgCdromStatus *log);
  57. };
  58. /*}}}*/
  59. // class that uses libudev to find cdrom devices dynamically
  60. struct CdromDevice /*{{{*/
  61. {
  62. string DeviceName;
  63. bool Mounted;
  64. string MountPath;
  65. };
  66. /*}}}*/
  67. class pkgUdevCdromDevices /*{{{*/
  68. {
  69. protected:
  70. // libudev dlopen stucture
  71. void *libudev_handle;
  72. struct udev* (*udev_new)(void);
  73. int (*udev_enumerate_add_match_property)(struct udev_enumerate *udev_enumerate, const char *property, const char *value);
  74. int (*udev_enumerate_scan_devices)(struct udev_enumerate *udev_enumerate);
  75. struct udev_list_entry* (*udev_enumerate_get_list_entry)(struct udev_enumerate *udev_enumerate);
  76. struct udev_device* (*udev_device_new_from_syspath)(struct udev *udev, const char *syspath);
  77. struct udev* (*udev_enumerate_get_udev)(struct udev_enumerate *udev_enumerate);
  78. const char* (*udev_list_entry_get_name)(struct udev_list_entry *list_entry);
  79. const char* (*udev_device_get_devnode)(struct udev_device *udev_device);
  80. struct udev_enumerate *(*udev_enumerate_new) (struct udev *udev);
  81. struct udev_list_entry *(*udev_list_entry_get_next)(struct udev_list_entry *list_entry);
  82. const char* (*udev_device_get_property_value)(struct udev_device *udev_device, const char *key);
  83. // end libudev dlopen
  84. public:
  85. pkgUdevCdromDevices();
  86. virtual ~pkgUdevCdromDevices();
  87. // try to open
  88. bool Dlopen();
  89. vector<CdromDevice> Scan();
  90. };
  91. /*}}}*/
  92. #endif