#ifndef FILESYSTEM_H #define FILESYSTEM_H 1 #include <magic.h> #include <inja/inja.hpp> #include <string> #include <unordered_map> #include <vector> using FilesDict = std::unordered_map<std::string, struct file_data>; using Data = std::vector<unsigned char>; struct file_data { std::string mime; Data data; }; class Filesystem { public: Filesystem() { MagicInit(); } ~Filesystem() { MagicClose(); } bool Scan(std::string root = "./wwwroot"); bool Scan(std::string root, std::vector<std::string> extensions, bool exclude_extensions = false); FilesDict & GetFiles(); void GetFilenamesSorted(std::vector<std::string> & sortedFilenames); private: bool AddSingleFile(std::string path, std::string root); void MagicInit(); void MagicClose(); FilesDict m_Files; magic_t m_Magic; }; #endif