31 _loaderInfos.push_back({loader->getName(), loader->getSupportedStorage(), loader->getProperties()});
32 _loaders.push_back(std::move(loader));
42 if (fs::is_directory(filename))
46 if (_archiveSupported(filename, extension))
48 for (
const auto& loader : _loaders)
49 if (loader->isSupported(filename, extension))
56 if (_archiveSupported(
"", type))
58 for (
const auto& loader : _loaders)
59 if (loader->isSupported(
"", type))
65 const std::string& loaderName)
const
67 if (fs::is_directory(filename))
68 throw std::runtime_error(
"'" + filename +
"' is a directory");
70 const auto extension = filetype.empty() ?
extractExtension(filename) : filetype;
74 if (_archiveSupported(filename, extension))
75 return *_archiveLoader;
78 if (!loaderName.empty())
80 for (
const auto& loader : _loaders)
81 if (loader->getName() == loaderName)
84 throw std::runtime_error(
"No loader found with name '" + loaderName +
"'");
87 for (
const auto& loader : _loaders)
88 if (loader->isSupported(filename, extension))
91 throw std::runtime_error(
"No loader found for filename '" + filename +
"' and filetype '" + filetype +
"'");
97 _archiveLoader.reset();
103 _archiveLoader = std::move(loader);
106 bool LoaderRegistry::_archiveSupported(
const std::string& filename,
const std::string& filetype)
const
108 return _archiveLoader && _archiveLoader->isSupported(filename, filetype);
bool isSupportedType(const std::string &type) const
const std::vector< LoaderInfo > & getLoaderInfos() const
void registerLoader(std::unique_ptr< Loader > loader)
bool isSupportedFile(const std::string &filename) const
const Loader & getSuitableLoader(const std::string &filename, const std::string &filetype, const std::string &loaderName) const
void registerArchiveLoader(std::unique_ptr< Loader > loader)
std::string extractExtension(const std::string &filename)