mirror of
https://github.com/vcmi/vcmi.git
synced 2025-07-17 01:32:21 +02:00
Fix issue #2068 - maps list update
This commit is contained in:
@ -1103,6 +1103,10 @@ void SelectionTab::filter( int size, bool selectFirst )
|
|||||||
std::unordered_set<ResourceID> SelectionTab::getFiles(std::string dirURI, int resType)
|
std::unordered_set<ResourceID> SelectionTab::getFiles(std::string dirURI, int resType)
|
||||||
{
|
{
|
||||||
boost::to_upper(dirURI);
|
boost::to_upper(dirURI);
|
||||||
|
CResourceHandler::get()->updateFilteredFiles([&](const std::string & mount)
|
||||||
|
{
|
||||||
|
return boost::algorithm::starts_with(mount, dirURI);
|
||||||
|
});
|
||||||
|
|
||||||
std::unordered_set<ResourceID> ret = CResourceHandler::get()->getFilteredFiles([&](const ResourceID & ident)
|
std::unordered_set<ResourceID> ret = CResourceHandler::get()->getFilteredFiles([&](const ResourceID & ident)
|
||||||
{
|
{
|
||||||
@ -1115,6 +1119,7 @@ std::unordered_set<ResourceID> SelectionTab::getFiles(std::string dirURI, int re
|
|||||||
|
|
||||||
void SelectionTab::parseMaps(const std::unordered_set<ResourceID> &files)
|
void SelectionTab::parseMaps(const std::unordered_set<ResourceID> &files)
|
||||||
{
|
{
|
||||||
|
logGlobal->debug("Parsing %d maps", files.size());
|
||||||
allItems.clear();
|
allItems.clear();
|
||||||
for(auto & file : files)
|
for(auto & file : files)
|
||||||
{
|
{
|
||||||
|
@ -102,6 +102,12 @@ std::set<boost::filesystem::path> CFilesystemList::getResourceNames(const Resour
|
|||||||
return std::move(paths);
|
return std::move(paths);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void CFilesystemList::updateFilteredFiles(std::function<bool(const std::string &)> filter) const
|
||||||
|
{
|
||||||
|
for (auto & loader : loaders)
|
||||||
|
loader->updateFilteredFiles(filter);
|
||||||
|
}
|
||||||
|
|
||||||
std::unordered_set<ResourceID> CFilesystemList::getFilteredFiles(std::function<bool(const ResourceID &)> filter) const
|
std::unordered_set<ResourceID> CFilesystemList::getFilteredFiles(std::function<bool(const ResourceID &)> filter) const
|
||||||
{
|
{
|
||||||
std::unordered_set<ResourceID> ret;
|
std::unordered_set<ResourceID> ret;
|
||||||
|
@ -41,6 +41,7 @@ public:
|
|||||||
bool existsResource(const ResourceID & resourceName) const override;
|
bool existsResource(const ResourceID & resourceName) const override;
|
||||||
std::string getMountPoint() const override;
|
std::string getMountPoint() const override;
|
||||||
boost::optional<boost::filesystem::path> getResourceName(const ResourceID & resourceName) const override;
|
boost::optional<boost::filesystem::path> getResourceName(const ResourceID & resourceName) const override;
|
||||||
|
void updateFilteredFiles(std::function<bool(const std::string &)> filter) const override {}
|
||||||
std::unordered_set<ResourceID> getFilteredFiles(std::function<bool(const ResourceID &)> filter) const override;
|
std::unordered_set<ResourceID> getFilteredFiles(std::function<bool(const ResourceID &)> filter) const override;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
@ -71,6 +72,7 @@ public:
|
|||||||
std::string getMountPoint() const override;
|
std::string getMountPoint() const override;
|
||||||
boost::optional<boost::filesystem::path> getResourceName(const ResourceID & resourceName) const override;
|
boost::optional<boost::filesystem::path> getResourceName(const ResourceID & resourceName) const override;
|
||||||
std::set<boost::filesystem::path> getResourceNames(const ResourceID & resourceName) const override;
|
std::set<boost::filesystem::path> getResourceNames(const ResourceID & resourceName) const override;
|
||||||
|
void updateFilteredFiles(std::function<bool(const std::string &)> filter) const override;
|
||||||
std::unordered_set<ResourceID> getFilteredFiles(std::function<bool(const ResourceID &)> filter) const override;
|
std::unordered_set<ResourceID> getFilteredFiles(std::function<bool(const ResourceID &)> filter) const override;
|
||||||
bool createResource(std::string filename, bool update = false) override;
|
bool createResource(std::string filename, bool update = false) override;
|
||||||
std::vector<const ISimpleResourceLoader *> getResourcesWithName(const ResourceID & resourceName) const override;
|
std::vector<const ISimpleResourceLoader *> getResourcesWithName(const ResourceID & resourceName) const override;
|
||||||
|
@ -61,6 +61,7 @@ public:
|
|||||||
std::unique_ptr<CInputStream> load(const ResourceID & resourceName) const override;
|
std::unique_ptr<CInputStream> load(const ResourceID & resourceName) const override;
|
||||||
bool existsResource(const ResourceID & resourceName) const override;
|
bool existsResource(const ResourceID & resourceName) const override;
|
||||||
std::string getMountPoint() const override;
|
std::string getMountPoint() const override;
|
||||||
|
void updateFilteredFiles(std::function<bool(const std::string &)> filter) const override {}
|
||||||
std::unordered_set<ResourceID> getFilteredFiles(std::function<bool(const ResourceID &)> filter) const override;
|
std::unordered_set<ResourceID> getFilteredFiles(std::function<bool(const ResourceID &)> filter) const override;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
@ -38,6 +38,14 @@ boost::optional<boost::filesystem::path> CFilesystemLoader::getResourceName(cons
|
|||||||
return baseDirectory / fileList.at(resourceName);
|
return baseDirectory / fileList.at(resourceName);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void CFilesystemLoader::updateFilteredFiles(std::function<bool(const std::string &)> filter) const
|
||||||
|
{
|
||||||
|
if (filter(mountPoint))
|
||||||
|
{
|
||||||
|
fileList = listFiles(mountPoint, 1, false);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
std::unordered_set<ResourceID> CFilesystemLoader::getFilteredFiles(std::function<bool(const ResourceID &)> filter) const
|
std::unordered_set<ResourceID> CFilesystemLoader::getFilteredFiles(std::function<bool(const ResourceID &)> filter) const
|
||||||
{
|
{
|
||||||
std::unordered_set<ResourceID> foundID;
|
std::unordered_set<ResourceID> foundID;
|
||||||
|
@ -38,6 +38,7 @@ public:
|
|||||||
std::string getMountPoint() const override;
|
std::string getMountPoint() const override;
|
||||||
bool createResource(std::string filename, bool update = false) override;
|
bool createResource(std::string filename, bool update = false) override;
|
||||||
boost::optional<boost::filesystem::path> getResourceName(const ResourceID & resourceName) const override;
|
boost::optional<boost::filesystem::path> getResourceName(const ResourceID & resourceName) const override;
|
||||||
|
void updateFilteredFiles(std::function<bool(const std::string &)> filter) const override;
|
||||||
std::unordered_set<ResourceID> getFilteredFiles(std::function<bool(const ResourceID &)> filter) const override;
|
std::unordered_set<ResourceID> getFilteredFiles(std::function<bool(const ResourceID &)> filter) const override;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
@ -50,7 +51,7 @@ private:
|
|||||||
* key = ResourceID for resource loader
|
* key = ResourceID for resource loader
|
||||||
* value = name that can be used to access file
|
* value = name that can be used to access file
|
||||||
*/
|
*/
|
||||||
std::unordered_map<ResourceID, boost::filesystem::path> fileList;
|
mutable std::unordered_map<ResourceID, boost::filesystem::path> fileList;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns a list of pathnames denoting the files in the directory denoted by this pathname.
|
* Returns a list of pathnames denoting the files in the directory denoted by this pathname.
|
||||||
|
@ -56,6 +56,7 @@ public:
|
|||||||
std::unique_ptr<CInputStream> load(const ResourceID & resourceName) const override;
|
std::unique_ptr<CInputStream> load(const ResourceID & resourceName) const override;
|
||||||
bool existsResource(const ResourceID & resourceName) const override;
|
bool existsResource(const ResourceID & resourceName) const override;
|
||||||
std::string getMountPoint() const override;
|
std::string getMountPoint() const override;
|
||||||
|
void updateFilteredFiles(std::function<bool(const std::string &)> filter) const override {}
|
||||||
std::unordered_set<ResourceID> getFilteredFiles(std::function<bool(const ResourceID &)> filter) const override;
|
std::unordered_set<ResourceID> getFilteredFiles(std::function<bool(const ResourceID &)> filter) const override;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -70,7 +70,14 @@ public:
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get list of files that matches filter function
|
* Update lists of files that match filter function
|
||||||
|
*
|
||||||
|
* @param filter Filter that returns true if specified mount point matches filter
|
||||||
|
*/
|
||||||
|
virtual void updateFilteredFiles(std::function<bool(const std::string &)> filter) const = 0;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get list of files that match filter function
|
||||||
*
|
*
|
||||||
* @param filter Filter that returns true if specified ID matches filter
|
* @param filter Filter that returns true if specified ID matches filter
|
||||||
* @return Returns list of flies
|
* @return Returns list of flies
|
||||||
|
Reference in New Issue
Block a user