#pragma once #include #include #include #include #include #include #include #include "Common/File/DirListing.h" #include "Common/File/Path.h" // Abstraction above path that lets you navigate easily. // "/" is a special path that means the root of the file system. On Windows, // listing this will yield drives. class PathBrowser { public: PathBrowser() {} PathBrowser(const Path &path) { SetPath(path); } ~PathBrowser(); void SetPath(const Path &path); bool IsListingReady(); bool GetListing(std::vector &fileInfo, const char *filter = nullptr, bool *cancel = nullptr); bool CanNavigateUp(); void NavigateUp(); void Navigate(const std::string &subdir); Path GetPath() const { return path_; } std::string GetFriendlyPath() const; private: void HandlePath(); void ResetPending(); Path path_; Path pendingPath_; std::vector pendingFiles_; std::condition_variable pendingCond_; std::mutex pendingLock_; std::thread pendingThread_; bool pendingActive_ = false; bool pendingCancel_ = false; bool pendingStop_ = false; bool ready_ = false; };