#pragma once #include #include #include #include namespace hex::plugin::builtin { class FileProvider : public hex::prv::Provider { public: FileProvider() = default; ~FileProvider() override = default; [[nodiscard]] bool isAvailable() const override; [[nodiscard]] bool isReadable() const override; [[nodiscard]] bool isWritable() const override; [[nodiscard]] bool isResizable() const override; [[nodiscard]] bool isSavable() const override; void resizeRaw(u64 newSize) override; void insertRaw(u64 offset, u64 size) override; void removeRaw(u64 offset, u64 size) override; void readRaw(u64 offset, void *buffer, size_t size) override; void writeRaw(u64 offset, const void *buffer, size_t size) override; [[nodiscard]] u64 getActualSize() const override; void save() override; void saveAs(const std::fs::path &path) override; [[nodiscard]] std::string getName() const override; [[nodiscard]] std::vector getDataDescription() const override; std::variant queryInformation(const std::string &category, const std::string &argument) override; [[nodiscard]] bool hasFilePicker() const override { return true; } [[nodiscard]] bool handleFilePicker() override; std::vector getMenuEntries() override; void setPath(const std::fs::path &path); [[nodiscard]] bool open() override; void close() override; void loadSettings(const nlohmann::json &settings) override; [[nodiscard]] nlohmann::json storeSettings(nlohmann::json settings) const override; [[nodiscard]] std::string getTypeName() const override { return "hex.builtin.provider.file"; } [[nodiscard]] std::pair getRegionValidity(u64 address) const override; private: void convertToMemoryFile(); protected: std::fs::path m_path; wolv::io::File m_file; size_t m_fileSize = 0; std::optional m_fileStats; bool m_readable = false, m_writable = false; static std::set s_openedFiles; }; }