Glob path extract fix

This commit is contained in:
Jack Andersen 2016-09-24 18:03:34 -10:00
parent 7f987ab10e
commit ae4f770ca2
2 changed files with 21 additions and 2 deletions

View File

@ -523,7 +523,7 @@ bool PAKRouter<BRIDGETYPE>::extractResources(const BRIDGETYPE& pakBridge, bool f
if (extractor.func_a) /* Doesn't need PAKRouter access */ if (extractor.func_a) /* Doesn't need PAKRouter access */
{ {
if (force || working.isNone()) if (force || !extractor.IsFullyExtracted(working))
{ {
PAKEntryReadStream s = item->beginReadStream(*node); PAKEntryReadStream s = item->beginReadStream(*node);
extractor.func_a(s, working); extractor.func_a(s, working);
@ -531,7 +531,7 @@ bool PAKRouter<BRIDGETYPE>::extractResources(const BRIDGETYPE& pakBridge, bool f
} }
else if (extractor.func_b) /* Needs PAKRouter access */ else if (extractor.func_b) /* Needs PAKRouter access */
{ {
if (force || working.isNone()) if (force || !extractor.IsFullyExtracted(working))
{ {
PAKEntryReadStream s = item->beginReadStream(*node); PAKEntryReadStream s = item->beginReadStream(*node);
extractor.func_b(m_dataSpec, s, working, *this, *item, force, btok, extractor.func_b(m_dataSpec, s, working, *this, *item, force, btok,

View File

@ -105,6 +105,25 @@ struct ResExtractor
std::function<void(const SpecBase&, PAKEntryReadStream&, PAKRouter<PAKBRIDGE>&, std::function<void(const SpecBase&, PAKEntryReadStream&, PAKRouter<PAKBRIDGE>&,
typename PAKBRIDGE::PAKType::Entry&)> nfunc={}) typename PAKBRIDGE::PAKType::Entry&)> nfunc={})
: func_b(std::move(func)), fileExts(std::move(fileExtsIn)), weight(weightin), func_name(std::move(nfunc)) {} : func_b(std::move(func)), fileExts(std::move(fileExtsIn)), weight(weightin), func_name(std::move(nfunc)) {}
bool IsFullyExtracted(const hecl::ProjectPath& path) const
{
hecl::ProjectPath::Type tp = path.getPathType();
if (tp == hecl::ProjectPath::Type::None)
return false;
else if (tp == hecl::ProjectPath::Type::Glob)
{
for (int i=0 ; i<6 ; ++i)
{
if (!fileExts[i])
break;
hecl::ProjectPath withExt = path.getWithExtension(fileExts[i], true);
if (withExt.isNone())
return false;
}
}
return true;
}
}; };
/** Level hierarchy representation */ /** Level hierarchy representation */