From c4aa3434abbdcd1b47c32961db46081ae226e033 Mon Sep 17 00:00:00 2001 From: James Turner <zakalawe@mac.com> Date: Thu, 21 Sep 2017 17:48:30 +0100 Subject: [PATCH] Fix WS 2.0 paths to live inside a Terrain/ prefix --- src/GUI/InstallSceneryDialog.cxx | 21 ++++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/src/GUI/InstallSceneryDialog.cxx b/src/GUI/InstallSceneryDialog.cxx index 64520c2cf..ee24fc2d7 100644 --- a/src/GUI/InstallSceneryDialog.cxx +++ b/src/GUI/InstallSceneryDialog.cxx @@ -37,6 +37,25 @@ #include <simgear/io/untar.hxx> +class SceneryExtractor : public simgear::TarExtractor +{ +public: + SceneryExtractor(const SGPath& root) : + TarExtractor(root) + {} +protected: + + auto filterPath(std::string& path) -> PathResult override + { + if ((path.find("Objects/") == 0) || (path.find("Terrain/") == 0)) { + return Accepted; + } + + path = "Terrain/" + path; + return Modified; + } +}; + class InstallSceneryThread : public QThread { Q_OBJECT @@ -93,7 +112,7 @@ private: void extractNextArchive() { SGPath root(m_extractDir.toStdString()); - m_untar.reset(new simgear::TarExtractor(root)); + m_untar.reset(new SceneryExtractor(root)); QString path = m_remainingPaths.front(); m_remainingPaths.pop_front();