From ecc38fede723b3018171ab71d6f8f99295400f5b Mon Sep 17 00:00:00 2001 From: Mat Sutcliffe Date: Tue, 25 Feb 2020 19:43:40 +0000 Subject: [PATCH] [XP driver] Fixed failure to find CSL package in certain directory layouts MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Issue reported by Richard Åsberg on Discord. If one package is located two subdirectories below the parent directory of another, the first one might not be loaded. --- src/plugins/simulator/xplane/simulatorxplane.cpp | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/src/plugins/simulator/xplane/simulatorxplane.cpp b/src/plugins/simulator/xplane/simulatorxplane.cpp index 73a0350ba..fab9d2f24 100644 --- a/src/plugins/simulator/xplane/simulatorxplane.cpp +++ b/src/plugins/simulator/xplane/simulatorxplane.cpp @@ -597,7 +597,7 @@ namespace BlackSimPlugin struct Prefix { Prefix(const QString &p) : s(p + '/') {} - operator QString() const { return s.chopped(1); } + QString parent() const { return s.section('/', 0, -2, QString::SectionSkipEmpty | QString::SectionIncludeLeadingSep); } bool isPrefixOf(const QString &o) const { return o.startsWith(s); } QString s; }; @@ -634,8 +634,14 @@ namespace BlackSimPlugin // comment KB 2019-06 // a package is one xsb_aircraft.txt file BB has 9, X-CSL has 76 + QSet superpackages; + for (const Prefix& package : as_const(packages)) + { + superpackages.insert(package.parent()); + } + const QDir simDir = getSimulatorSettings().getSimulatorDirectoryOrDefault(); - for (const Prefix &package : as_const(packages)) + for (const QString &package : as_const(superpackages)) { if (CDirectoryUtils::isSameOrSubDirectoryOf(package, simDir)) { @@ -661,7 +667,7 @@ namespace BlackSimPlugin { if (dir.exists(QStringLiteral("xsb_aircraft.txt"))) { - if (dir.cdUp()) { return dir.path(); } + return dir.path(); } } while (dir.cdUp());