mirror of
https://github.com/vcmi/vcmi.git
synced 2024-12-24 22:14:36 +02:00
Fix issue #2068 - maps list update
This commit is contained in:
parent
5506ae036a
commit
89f506658e
@ -1103,6 +1103,10 @@ void SelectionTab::filter( int size, bool selectFirst )
|
||||
std::unordered_set<ResourceID> SelectionTab::getFiles(std::string dirURI, int resType)
|
||||
{
|
||||
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)
|
||||
{
|
||||
@ -1115,6 +1119,7 @@ std::unordered_set<ResourceID> SelectionTab::getFiles(std::string dirURI, int re
|
||||
|
||||
void SelectionTab::parseMaps(const std::unordered_set<ResourceID> &files)
|
||||
{
|
||||
logGlobal->debug("Parsing %d maps", files.size());
|
||||
allItems.clear();
|
||||
for(auto & file : files)
|
||||
{
|
||||
|
@ -153,7 +153,7 @@ class SelectionTab : public CIntObject
|
||||
private:
|
||||
std::unique_ptr<CAnimation> formatIcons;
|
||||
|
||||
void parseMaps(const std::unordered_set<ResourceID> &files);
|
||||
void parseMaps(const std::unordered_set<ResourceID> &files);
|
||||
void parseGames(const std::unordered_set<ResourceID> &files, bool multi);
|
||||
void parseCampaigns(const std::unordered_set<ResourceID> & files );
|
||||
std::unordered_set<ResourceID> getFiles(std::string dirURI, int resType);
|
||||
|
@ -102,6 +102,12 @@ std::set<boost::filesystem::path> CFilesystemList::getResourceNames(const Resour
|
||||
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> ret;
|
||||
|
@ -41,6 +41,7 @@ public:
|
||||
bool existsResource(const ResourceID & resourceName) const override;
|
||||
std::string getMountPoint() 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;
|
||||
|
||||
private:
|
||||
@ -58,8 +59,8 @@ class DLL_LINKAGE CFilesystemList : public ISimpleResourceLoader
|
||||
std::set<ISimpleResourceLoader *> writeableLoaders;
|
||||
|
||||
//FIXME: this is only compile fix, should be removed in the end
|
||||
CFilesystemList(CFilesystemList &) = delete;
|
||||
CFilesystemList &operator=(CFilesystemList &) = delete;
|
||||
CFilesystemList(CFilesystemList &) = delete;
|
||||
CFilesystemList &operator=(CFilesystemList &) = delete;
|
||||
|
||||
public:
|
||||
CFilesystemList();
|
||||
@ -70,7 +71,8 @@ public:
|
||||
bool existsResource(const ResourceID & resourceName) const override;
|
||||
std::string getMountPoint() 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;
|
||||
bool createResource(std::string filename, bool update = false) 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;
|
||||
bool existsResource(const ResourceID & resourceName) 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;
|
||||
|
||||
private:
|
||||
|
@ -8,10 +8,10 @@ namespace bfs = boost::filesystem;
|
||||
|
||||
CFilesystemLoader::CFilesystemLoader(std::string _mountPoint, bfs::path baseDirectory, size_t depth, bool initial):
|
||||
baseDirectory(std::move(baseDirectory)),
|
||||
mountPoint(std::move(_mountPoint)),
|
||||
mountPoint(std::move(_mountPoint)),
|
||||
fileList(listFiles(mountPoint, depth, initial))
|
||||
{
|
||||
logGlobal->traceStream() << "Filesystem loaded, " << fileList.size() << " files found";
|
||||
logGlobal->traceStream() << "File system loaded, " << fileList.size() << " files found";
|
||||
}
|
||||
|
||||
std::unique_ptr<CInputStream> CFilesystemLoader::load(const ResourceID & resourceName) const
|
||||
@ -38,6 +38,14 @@ boost::optional<boost::filesystem::path> CFilesystemLoader::getResourceName(cons
|
||||
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> foundID;
|
||||
|
@ -38,6 +38,7 @@ public:
|
||||
std::string getMountPoint() const override;
|
||||
bool createResource(std::string filename, bool update = false) 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;
|
||||
|
||||
private:
|
||||
@ -50,7 +51,7 @@ private:
|
||||
* key = ResourceID for resource loader
|
||||
* 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.
|
||||
|
@ -56,6 +56,7 @@ public:
|
||||
std::unique_ptr<CInputStream> load(const ResourceID & resourceName) const override;
|
||||
bool existsResource(const ResourceID & resourceName) 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;
|
||||
};
|
||||
|
||||
|
@ -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
|
||||
* @return Returns list of flies
|
||||
|
Loading…
Reference in New Issue
Block a user