cdrom.h 3.5 KB

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