#ifndef slic3r_GUI_RemovableDriveManager_hpp_ #define slic3r_GUI_RemovableDriveManager_hpp_ #include #include namespace Slic3r { namespace GUI { struct DriveData { std::string name; std::string path; DriveData(std::string n, std::string p):name(n),path(p){} }; class RemovableDriveManager { public: static RemovableDriveManager& get_instance() { static RemovableDriveManager instance; return instance; } RemovableDriveManager(RemovableDriveManager const&) = delete; void operator=(RemovableDriveManager const&) = delete; //update() searches for removable devices, returns false if empty. bool update(long time = 0); //time = 0 is forced update bool is_drive_mounted(const std::string &path); void eject_drive(const std::string &path); std::string get_last_drive_path(); std::vector get_all_drives(); bool is_path_on_removable_drive(const std::string &path); void add_callback(std::function callback); void print(); private: RemovableDriveManager():m_drives_count(0){} void search_for_drives(); void check_and_notify(); std::vector m_current_drives; std::vector> m_callbacks; size_t m_drives_count; #if _WIN32 void register_window(); #else void search_path(const std::string &path, const std::string &parent_path); bool compare_filesystem_id(const std::string &path_a, const std::string &path_b); #endif }; }} #endif