diff --git a/DataSpec/DNACommon/PAK.hpp b/DataSpec/DNACommon/PAK.hpp index cad367002..e1271d490 100644 --- a/DataSpec/DNACommon/PAK.hpp +++ b/DataSpec/DNACommon/PAK.hpp @@ -323,7 +323,8 @@ public: return m_pak->bestEntryName(*e); } - bool extractResources(const BRIDGETYPE& pakBridge, bool force, std::function progress) + bool extractResources(const BRIDGETYPE& pakBridge, bool force, + std::function progress) { enterPAKBridge(pakBridge); size_t count = 0; @@ -336,6 +337,9 @@ public: ResExtractor extractor = BRIDGETYPE::LookupExtractor(*item.second); if (extractor.weight != w) continue; + + HECL::SystemStringView bestName(getBestEntryName(*item.second)); + progress(bestName.sys_str().c_str(), ++count / fsz); HECL::ProjectPath cooked = getCooked(item.second); if (force || cooked.getPathType() == HECL::ProjectPath::PT_NONE) @@ -363,8 +367,6 @@ public: extractor.func_b(m_dataSpec, s, working, *this, *item.second, force); } } - - progress(++count / fsz); } } diff --git a/DataSpec/SpecBase.cpp b/DataSpec/SpecBase.cpp index 905080e3e..230a39139 100644 --- a/DataSpec/SpecBase.cpp +++ b/DataSpec/SpecBase.cpp @@ -56,20 +56,20 @@ void SpecBase::doExtract(const ExtractPassInfo& info, FExtractProgress progress) NOD::DiscBase::IPartition* update = m_disc->getUpdatePartition(); if (update) { - progress(_S("Update Partition"), 0, 0.0); + progress(_S("Update Partition"), _S(""), 0, 0.0); update->getFSTRoot().extractToDirectory(target, info.force); - progress(_S("Update Partition"), 0, 1.0); + progress(_S("Update Partition"), _S(""), 0, 1.0); } if (!m_standalone) { - progress(_S("Trilogy Files"), 1, 0.0); + progress(_S("Trilogy Files"), _S(""), 1, 0.0); NOD::DiscBase::IPartition* data = m_disc->getDataPartition(); const NOD::DiscBase::IPartition::Node& root = data->getFSTRoot(); for (const NOD::DiscBase::IPartition::Node& child : root) if (child.getKind() == NOD::DiscBase::IPartition::Node::NODE_FILE) child.extractToDirectory(target, info.force); - progress(_S("Trilogy Files"), 1, 1.0); + progress(_S("Trilogy Files"), _S(""), 1, 1.0); } } extractFromDisc(*m_disc, info.force, progress); diff --git a/DataSpec/SpecMP1.cpp b/DataSpec/SpecMP1.cpp index bdddad753..1bdb679ab 100644 --- a/DataSpec/SpecMP1.cpp +++ b/DataSpec/SpecMP1.cpp @@ -206,22 +206,23 @@ struct SpecMP1 : SpecBase bool extractFromDisc(NOD::DiscBase&, bool force, FExtractProgress progress) { - progress(_S("Indexing PAKs"), 2, 0.0); + progress(_S("Indexing PAKs"), _S(""), 2, 0.0); m_pakRouter.build(m_paks, [&progress](float factor) { - progress(_S("Indexing PAKs"), 2, factor); + progress(_S("Indexing PAKs"), _S(""), 2, factor); }); - progress(_S("Indexing PAKs"), 2, 1.0); + progress(_S("Indexing PAKs"), _S(""), 2, 1.0); m_workPath.makeDir(); - progress(_S("MP1 Root"), 3, 0.0); + progress(_S("MP1 Root"), _S(""), 3, 0.0); int prog = 0; for (const NOD::DiscBase::IPartition::Node* node : m_nonPaks) { node->extractToDirectory(m_workPath.getAbsolutePath(), force); - progress(_S("MP1 Root"), 3, prog++ / (float)m_nonPaks.size()); + HECL::SystemStringView nameView(node->getName()); + progress(_S("MP1 Root"), nameView.sys_str().c_str(), 3, prog++ / (float)m_nonPaks.size()); } - progress(_S("MP1 Root"), 3, 1.0); + progress(_S("MP1 Root"), _S(""), 3, 1.0); const HECL::ProjectPath& cookPath = m_project.getProjectCookedPath(SpecEntMP1); cookPath.makeDir(); @@ -235,13 +236,13 @@ struct SpecMP1 : SpecBase const std::string& name = pak.getName(); HECL::SystemStringView sysName(name); - progress(sysName.sys_str().c_str(), compIdx, 0.0); + progress(sysName.sys_str().c_str(), _S(""), compIdx, 0.0); m_pakRouter.extractResources(pak, force, - [&progress, &sysName, &compIdx](float factor) + [&progress, &sysName, &compIdx](const HECL::SystemChar* substr, float factor) { - progress(sysName.sys_str().c_str(), compIdx, factor); + progress(sysName.sys_str().c_str(), substr, compIdx, factor); }); - progress(sysName.sys_str().c_str(), compIdx++, 1.0); + progress(sysName.sys_str().c_str(), _S(""), compIdx++, 1.0); } return true; diff --git a/DataSpec/SpecMP2.cpp b/DataSpec/SpecMP2.cpp index 68600fbf9..043c14e24 100644 --- a/DataSpec/SpecMP2.cpp +++ b/DataSpec/SpecMP2.cpp @@ -203,22 +203,23 @@ struct SpecMP2 : SpecBase bool extractFromDisc(NOD::DiscBase&, bool force, FExtractProgress progress) { - progress(_S("Indexing PAKs"), 2, 0.0); + progress(_S("Indexing PAKs"), _S(""), 2, 0.0); m_pakRouter.build(m_paks, [&progress](float factor) { - progress(_S("Indexing PAKs"), 2, factor); + progress(_S("Indexing PAKs"), _S(""), 2, factor); }); - progress(_S("Indexing PAKs"), 2, 1.0); + progress(_S("Indexing PAKs"), _S(""), 2, 1.0); m_workPath.makeDir(); - progress(_S("MP2 Root"), 3, 0.0); + progress(_S("MP2 Root"), _S(""), 3, 0.0); int prog = 0; for (const NOD::DiscBase::IPartition::Node* node : m_nonPaks) { node->extractToDirectory(m_workPath.getAbsolutePath(), force); - progress(_S("MP2 Root"), 3, prog++ / (float)m_nonPaks.size()); + HECL::SystemStringView nameView(node->getName()); + progress(_S("MP2 Root"), nameView.sys_str().c_str(), 3, prog++ / (float)m_nonPaks.size()); } - progress(_S("MP2 Root"), 3, 1.0); + progress(_S("MP2 Root"), _S(""), 3, 1.0); const HECL::ProjectPath& cookPath = m_project.getProjectCookedPath(SpecEntMP2); cookPath.makeDir(); @@ -232,13 +233,13 @@ struct SpecMP2 : SpecBase const std::string& name = pak.getName(); HECL::SystemStringView sysName(name); - progress(sysName.sys_str().c_str(), compIdx, 0.0); + progress(sysName.sys_str().c_str(), _S(""), compIdx, 0.0); m_pakRouter.extractResources(pak, force, - [&progress, &sysName, &compIdx](float factor) + [&progress, &sysName, &compIdx](const HECL::SystemChar* substr, float factor) { - progress(sysName.sys_str().c_str(), compIdx, factor); + progress(sysName.sys_str().c_str(), substr, compIdx, factor); }); - progress(sysName.sys_str().c_str(), compIdx++, 1.0); + progress(sysName.sys_str().c_str(), _S(""), compIdx++, 1.0); } return true; diff --git a/DataSpec/SpecMP3.cpp b/DataSpec/SpecMP3.cpp index 90e24ffbf..1d3cb7f2b 100644 --- a/DataSpec/SpecMP3.cpp +++ b/DataSpec/SpecMP3.cpp @@ -311,23 +311,24 @@ struct SpecMP3 : SpecBase int prog; if (doMP3) { - progress(_S("Indexing PAKs"), compIdx, 0.0); + progress(_S("Indexing PAKs"), _S(""), compIdx, 0.0); m_pakRouter.build(m_paks, [&progress, &compIdx](float factor) { - progress(_S("Indexing PAKs"), compIdx, factor); + progress(_S("Indexing PAKs"), _S(""), compIdx, factor); }); - progress(_S("Indexing PAKs"), compIdx++, 1.0); + progress(_S("Indexing PAKs"), _S(""), compIdx++, 1.0); HECL::ProjectPath mp3WorkPath(m_project.getProjectRootPath(), "MP3"); mp3WorkPath.makeDir(); - progress(_S("MP3 Root"), compIdx, 0.0); + progress(_S("MP3 Root"), _S(""), compIdx, 0.0); prog = 0; for (const NOD::DiscBase::IPartition::Node* node : m_nonPaks) { node->extractToDirectory(mp3WorkPath.getAbsolutePath(), force); - progress(_S("MP3 Root"), compIdx, prog++ / (float)m_nonPaks.size()); + HECL::SystemStringView nameView(node->getName()); + progress(_S("MP3 Root"), nameView.sys_str().c_str(), compIdx, prog++ / (float)m_nonPaks.size()); } - progress(_S("MP3 Root"), compIdx++, 1.0); + progress(_S("MP3 Root"), _S(""), compIdx++, 1.0); const HECL::ProjectPath& cookPath = m_project.getProjectCookedPath(SpecEntMP3); cookPath.makeDir(); @@ -343,34 +344,35 @@ struct SpecMP3 : SpecBase const std::string& name = pak.getName(); HECL::SystemStringView sysName(name); - progress(sysName.sys_str().c_str(), compIdx, 0.0); + progress(sysName.sys_str().c_str(), _S(""), compIdx, 0.0); m_pakRouter.extractResources(pak, force, - [&progress, &sysName, &compIdx](float factor) + [&progress, &sysName, &compIdx](const HECL::SystemChar* substr, float factor) { - progress(sysName.sys_str().c_str(), compIdx, factor); + progress(sysName.sys_str().c_str(), substr, compIdx, factor); }); - progress(sysName.sys_str().c_str(), compIdx++, 1.0); + progress(sysName.sys_str().c_str(), _S(""), compIdx++, 1.0); } } if (doMPTFE) { - progress(_S("Indexing PAKs"), compIdx, 0.0); + progress(_S("Indexing PAKs"), _S(""), compIdx, 0.0); m_fePakRouter.build(m_fePaks, [&progress, &compIdx](float factor) { - progress(_S("Indexing PAKs"), compIdx, factor); + progress(_S("Indexing PAKs"), _S(""), compIdx, factor); }); - progress(_S("Indexing PAKs"), compIdx++, 1.0); + progress(_S("Indexing PAKs"), _S(""), compIdx++, 1.0); m_feWorkPath.makeDir(); - progress(_S("fe Root"), compIdx, 0.0); + progress(_S("fe Root"), _S(""), compIdx, 0.0); int prog = 0; for (const NOD::DiscBase::IPartition::Node* node : m_feNonPaks) { node->extractToDirectory(m_feWorkPath.getAbsolutePath(), force); - progress(_S("fe Root"), compIdx, prog++ / (float)m_feNonPaks.size()); + HECL::SystemStringView nameView(node->getName()); + progress(_S("fe Root"), nameView.sys_str().c_str(), compIdx, prog++ / (float)m_feNonPaks.size()); } - progress(_S("fe Root"), compIdx++, 1.0); + progress(_S("fe Root"), _S(""), compIdx++, 1.0); const HECL::ProjectPath& cookPath = m_project.getProjectCookedPath(SpecEntMP3); cookPath.makeDir(); @@ -383,13 +385,13 @@ struct SpecMP3 : SpecBase const std::string& name = pak.getName(); HECL::SystemStringView sysName(name); - progress(sysName.sys_str().c_str(), compIdx, 0.0); + progress(sysName.sys_str().c_str(), _S(""), compIdx, 0.0); m_fePakRouter.extractResources(pak, force, - [&progress, &sysName, &compIdx](float factor) + [&progress, &sysName, &compIdx](const HECL::SystemChar* substr, float factor) { - progress(sysName.sys_str().c_str(), compIdx, factor); + progress(sysName.sys_str().c_str(), substr, compIdx, factor); }); - progress(sysName.sys_str().c_str(), compIdx++, 1.0); + progress(sysName.sys_str().c_str(), _S(""), compIdx++, 1.0); } } diff --git a/hecl b/hecl index c903c3cb4..c35b8b999 160000 --- a/hecl +++ b/hecl @@ -1 +1 @@ -Subproject commit c903c3cb44479c4189195057a5dc6dc5fe4037e5 +Subproject commit c35b8b9998c23778e43a4a386d05aed59097439a