cdrom.h 3.4 KB

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