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();