cdrom.h 3.7 KB

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