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

@@ -24,11 +24,12 @@ using namespace BlackCore::Context;
namespace BlackGui
{
int CCopyXSwiftBusDialog::displayDialogAndCopyBuildFiles(const QString &xplaneRootDir, QWidget *parent)
int CCopyXSwiftBusDialog::displayDialogAndCopyBuildFiles(const QString &xplaneRootDir, bool checkLatestFile, QWidget *parent)
{
if (!CBuildConfig::isLocalDeveloperDebugBuild()) { return -1; }
if (!CXPlaneUtil::hasNewerXSwiftBusBuild(xplaneRootDir)) { return 0; }
if (sGui && sGui->isShuttingDown()) { return 0; }
if (!CBuildConfig::isLocalDeveloperDebugBuild()) { return -1; }
if (checkLatestFile && !CXPlaneUtil::hasNewerXSwiftBusBuild(xplaneRootDir)) { return 0; }
if (!CXPlaneUtil::hasXSwiftBusBuildAndPluginDir(xplaneRootDir)) { return 0; }
if (sGui && sGui->getIContextSimulator())
{
if (sGui->getIContextSimulator()->isSimulatorAvailable())

View File

@@ -24,8 +24,8 @@ namespace BlackGui
{
public:
//! Display a dialog to copy the latest XSwiftBus files
//! \remark only displayed in a local environment
static int displayDialogAndCopyBuildFiles(const QString &xplaneRootDir, QWidget *parent = nullptr);
//! \remark normally only displayed in a local environment
static int displayDialogAndCopyBuildFiles(const QString &xplaneRootDir, bool checkLatestFile = true, QWidget *parent = nullptr);
};
} // ns
#endif

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 = {});

View File

@@ -18,7 +18,6 @@
#include "blackgui/components/logcomponent.h"
#include "blackgui/components/dbloaddatadialog.h"
#include "blackgui/components/settingscomponent.h"
#include "blackgui/copyxswiftbusdialog.h"
#include "blackgui/guiapplication.h"
#include "blackgui/guiutility.h"
#include "blackgui/overlaymessagesframe.h"
@@ -425,9 +424,7 @@ void SwiftGuiStd::verifyPrerequisites()
}
}
const QString xPlaneRootDir = ui->comp_MainInfoArea->getSettingsComponent()->getSimulatorSettings(CSimulatorInfo::XPLANE).getSimulatorDirectoryOrDefault();
const int c = CCopyXSwiftBusDialog::displayDialogAndCopyBuildFiles(xPlaneRootDir, this);
if (c > 0) { CLogMessage(this).info("Copied %1 files from build directory") << c; }
this->copyXSwiftBusDialog(true);
}
void SwiftGuiStd::checkDbDataLoaded()

View File

@@ -259,6 +259,9 @@ private:
//! Ckeck if the DB data have been loaded
void checkDbDataLoaded();
//! Copy the XSwiftBus files from build directory
void copyXSwiftBusDialog(bool checkFileTimestamp);
};
#pragma pop_macro("interface")

View File

@@ -12,11 +12,12 @@
#include "blackgui/guiactionbind.h"
#include "blackgui/guiapplication.h"
#include "blackgui/foreignwindows.h"
#include "blackgui/copyxswiftbusdialog.h"
#include "blackmisc/aviation/altitude.h"
#include "blackmisc/network/urllist.h"
#include "blackmisc/pq/units.h"
#include "blackmisc/logmessage.h"
#include "blackconfig/buildconfig.h"
#include "swiftguistd.h"
#include "ui_swiftguistd.h"
@@ -28,12 +29,14 @@
#include <QtGlobal>
#include <QDesktopServices>
using namespace BlackConfig;
using namespace BlackGui;
using namespace BlackCore;
using namespace BlackMisc;
using namespace BlackMisc::PhysicalQuantities;
using namespace BlackMisc::Aviation;
using namespace BlackMisc::Network;
using namespace BlackMisc::Simulation;
void SwiftGuiStd::onMenuClicked()
{
@@ -137,6 +140,17 @@ void SwiftGuiStd::initMenus()
ui->menu_InfoAreas->addActions(ui->comp_MainInfoArea->getInfoAreaSelectActions(true, ui->menu_InfoAreas));
ui->menu_MovingMap->setIcon(CIcons::swiftMap16());
if (CBuildConfig::isLocalDeveloperDebugBuild() && ui->menu_File)
{
QAction *a = new QAction(CIcons::swift16(), "Copy XSwiftBus dialog");
ui->menu_File->insertAction(ui->menu_File->actions().at(5), a);
c = connect(a, &QAction::triggered, this, [ = ]
{
this->copyXSwiftBusDialog(false);
});
Q_ASSERT_X(c, Q_FUNC_INFO, "connect failed");
}
// for hotkeys
const QString swift(CGuiActionBindHandler::pathSwiftPilotClient());
static const CActionBind swiftRoot(swift, CIcons::swift16()); // inserts action for root folder
@@ -145,3 +159,10 @@ void SwiftGuiStd::initMenus()
m_menuHotkeyHandlers.append(CGuiActionBindHandler::bindMenu(ui->menu_File, swift + "File"));
m_menuHotkeyHandlers.append(CGuiActionBindHandler::bindMenu(ui->menu_Window, swift + "Window"));
}
void SwiftGuiStd::copyXSwiftBusDialog(bool checkFileTimestamp)
{
const QString xPlaneRootDir = ui->comp_MainInfoArea->getSettingsComponent()->getSimulatorSettings(CSimulatorInfo::XPLANE).getSimulatorDirectoryOrDefault();
const int c = CCopyXSwiftBusDialog::displayDialogAndCopyBuildFiles(xPlaneRootDir, checkFileTimestamp, this);
if (c > 0) { CLogMessage(this).info("Copied %1 files from build directory") << c; }
}