XSwiftBus install dialog (for local environment)

* can also be called from menu
* improved file check
* renamed some functions
This commit is contained in:
Klaus Basan
2018-05-12 21:04:13 +02:00
parent 9c33c5d9fc
commit 8bd969105a
9 changed files with 63 additions and 15 deletions

View File

@@ -300,7 +300,7 @@ namespace BlackMisc
return result;
}
QFileInfo CFileUtils::findNewestFile(const QDir &dir, bool recursive, const QStringList &nameFilters, const QStringList &excludeDirectories)
QFileInfo CFileUtils::findLastModified(const QDir &dir, bool recursive, const QStringList &nameFilters, const QStringList &excludeDirectories)
{
if (isExcludedDirectory(dir, excludeDirectories)) { return QString(); }
const QFileInfoList files = enumerateFiles(dir, recursive, nameFilters, excludeDirectories);
@@ -313,6 +313,19 @@ namespace BlackMisc
return *it;
}
QFileInfo CFileUtils::findLastCreated(const QDir &dir, bool recursive, const QStringList &nameFilters, const QStringList &excludeDirectories)
{
if (isExcludedDirectory(dir, excludeDirectories)) { return QString(); }
const QFileInfoList files = enumerateFiles(dir, recursive, nameFilters, excludeDirectories);
if (files.isEmpty()) { return {}; }
auto it = std::max_element(files.cbegin(), files.cend(), [](const QFileInfo & a, const QFileInfo & b)
{
return a.created() < b.created();
});
return *it;
}
const QStringList &CFileUtils::getSwiftExecutables()
{
static const QStringList executables(

View File

@@ -125,8 +125,11 @@ namespace BlackMisc
//! Returns list of all files in dir, optionally matching a wildcard and predicate.
static QFileInfoList enumerateFiles(const QDir &dir, bool recursive, const QStringList &nameFilters = {}, const QStringList &excludeDirectories = {}, std::function<bool(const QFileInfo &)> predicate = {});
//! Returns path to the newest file in dir, optionally matching a wildcard, or empty string.
static QFileInfo findNewestFile(const QDir &dir, bool recursive, const QStringList &nameFilters = {}, const QStringList &excludeDirectories = {});
//! Returns path to the last modifed file in dir, optionally matching a wildcard, or empty string.
static QFileInfo findLastModified(const QDir &dir, bool recursive, const QStringList &nameFilters = {}, const QStringList &excludeDirectories = {});
//! Returns path to the last created file in dir, optionally matching a wildcard, or empty string.
static QFileInfo findLastCreated(const QDir &dir, bool recursive, const QStringList &nameFilters = {}, const QStringList &excludeDirectories = {});
//! Get all swift executables
static const QStringList &getSwiftExecutables();

View File

@@ -205,6 +205,13 @@ namespace BlackMisc
return {};
}
bool CXPlaneUtil::hasXSwiftBusBuildAndPluginDir(const QString &xplaneRootDir)
{
if (CDirectoryUtils::getXSwiftBusBuildDirectory().isEmpty()) { return false; }
const QString xswiftBusPluginDir = CXPlaneUtil::xswiftbusPluginDir(xplaneRootDir);
return (!xswiftBusPluginDir.isEmpty());
}
QStringList CXPlaneUtil::findConflictingPlugins(const QString &pluginDir)
{
const QStringList files = findAllXplFiles(pluginDir);
@@ -246,10 +253,10 @@ namespace BlackMisc
const QString xswiftBusPluginDir = CXPlaneUtil::xswiftbusPluginDir(xplaneRootDir);
if (xswiftBusPluginDir.isEmpty()) { return false; }
const QFileInfo fiLatestBuild = CFileUtils::findNewestFile(CDirectoryUtils::getXSwiftBusBuildDirectory(), true, xplFileFilter());
const QFileInfo fiLatestBuild = CFileUtils::findLastModified(CDirectoryUtils::getXSwiftBusBuildDirectory(), true, xplFileFilter());
if (!fiLatestBuild.lastModified().isValid()) { return false; }
const QFileInfo fiLatestDeployed = CFileUtils::findNewestFile(xswiftBusPluginDir, true, xplFileFilter());
const QFileInfo fiLatestDeployed = CFileUtils::findLastModified(xswiftBusPluginDir, true, xplFileFilter());
if (!fiLatestDeployed.lastModified().isValid()) { return true; } // not yet existing
// newer?

View File

@@ -74,6 +74,9 @@ namespace BlackMisc
//! XSwiftBus legacy directory
static QString xswiftbusLegacyDir(const QString &xplaneRootDir = CXPlaneUtil::xplaneRootDir());
//! Both directories, plugin and
static bool hasXSwiftBusBuildAndPluginDir(const QString &xplaneRootDir);
//! Finds conflicting plugins
//! \remark uses CXPlaneUtil::xplanePluginPath as default
static QStringList findConflictingPlugins(const QString &pluginDir = {});