Ref T131, verifyPrerequisites in simulator context (checking XP conflicts)

This commit is contained in:
Klaus Basan
2018-02-28 23:46:49 +01:00
parent a8f1bb96c7
commit 3e41a91455
6 changed files with 59 additions and 5 deletions

View File

@@ -161,6 +161,9 @@ namespace BlackCore
//! Simulators which have an initialized model set
virtual BlackMisc::Simulation::CSimulatorInfo simulatorsWithInitializedModelSet() const = 0;
//! Verify prerequisites for simulation like an existing model set
virtual BlackMisc::CStatusMessageList verifyPrerequisites() const = 0;
//! Number of installed models in simulator eco system
virtual int getModelSetCount() const = 0;

View File

@@ -87,6 +87,13 @@ namespace BlackCore
return BlackMisc::Simulation::CSimulatorInfo();
}
//! \copydoc IContextSimulator::verifyPrerequisites
virtual BlackMisc::CStatusMessageList verifyPrerequisites() const override
{
logEmptyContextWarning(Q_FUNC_INFO);
return BlackMisc::CStatusMessageList();
}
//! \copydoc IContextSimulator::getModelSetLoaderSimulator
virtual BlackMisc::Simulation::CSimulatorInfo getModelSetLoaderSimulator() const override
{

View File

@@ -17,6 +17,7 @@
#include "blackcore/application.h"
#include "blackcore/pluginmanagersimulator.h"
#include "blackcore/simulator.h"
#include "blackmisc/simulation/xplane/xplaneutil.h"
#include "blackmisc/simulation/matchingutils.h"
#include "blackmisc/aviation/callsign.h"
#include "blackmisc/compare.h"
@@ -44,6 +45,7 @@ using namespace BlackMisc::PhysicalQuantities;
using namespace BlackMisc::Aviation;
using namespace BlackMisc::Network;
using namespace BlackMisc::Simulation;
using namespace BlackMisc::Simulation::XPlane;
using namespace BlackMisc::Geo;
using namespace BlackMisc::Simulation;
using namespace BlackMisc::Simulation::Settings;
@@ -184,6 +186,37 @@ namespace BlackCore
return m_modelSetLoader.simulatorsWithInitializedModelSet();
}
CStatusMessageList CContextSimulator::verifyPrerequisites() const
{
if (m_debugEnabled) { CLogMessage(this, CLogCategory::contextSlot()).debug() << Q_FUNC_INFO; }
CStatusMessageList msgs;
if (!sApp || !sApp->isNetworkAccessible())
{
msgs.push_back(CStatusMessage(this).error("No network interface, simulation will not work properly"));
}
const CSimulatorInfo sims = this->simulatorsWithInitializedModelSet();
if (sims.isNoSimulator())
{
msgs.push_back(CStatusMessage(this).error("No model set so far, you need at least one model set. Hint: You can create a model set in the mapping tool, or copy an existing set in the launcher."));
}
else if (sims.xplane() || CSimulatorInfo(m_enabledSimulators.get()).xplane())
{
// ever used with XPlane
const QString pluginDir = CXPlaneUtil::pluginDirFromRootDir(m_simulatorSettings.getSimulatorDirectoryOrDefault(CSimulatorInfo::XPLANE));
const QDir dir(pluginDir);
if (dir.exists())
{
// only check if we are on a XP machine
const QStringList conflicts = CXPlaneUtil::findConflictingPlugins(pluginDir);
if (!conflicts.isEmpty())
{
msgs.push_back(CStatusMessage(this).warning("Possible conflict with other XPlane plugins: '%1'") << (conflicts.join(", ")));
}
}
}
return msgs;
}
QStringList CContextSimulator::getModelSetStrings() const
{
if (m_debugEnabled) { CLogMessage(this, CLogCategory::contextSlot()).debug() << Q_FUNC_INFO; }

View File

@@ -26,13 +26,14 @@
#include "blackmisc/pq/length.h"
#include "blackmisc/pq/time.h"
#include "blackmisc/settingscache.h"
#include "blackmisc/simulation/settings/simulatorsettings.h"
#include "blackmisc/simulation/aircraftmodellist.h"
#include "blackmisc/simulation/aircraftmodelsetloader.h"
#include "blackmisc/simulation/remoteaircraftprovider.h"
#include "blackmisc/simulation/simulatorplugininfo.h"
#include "blackmisc/simulation/simulatorplugininfolist.h"
#include "blackmisc/simulation/simulatorinternals.h"
#include "blackmisc/simulation/settings/simulatorsettings.h"
#include "blackmisc/worker.h"
#include <QObject>
@@ -87,6 +88,7 @@ namespace BlackCore
virtual BlackMisc::Simulation::CSimulatorInfo getModelSetLoaderSimulator() const override;
virtual void setModelSetLoaderSimulator(const BlackMisc::Simulation::CSimulatorInfo &simulator) override;
virtual BlackMisc::Simulation::CSimulatorInfo simulatorsWithInitializedModelSet() const override;
virtual BlackMisc::CStatusMessageList verifyPrerequisites() const override;
virtual QStringList getModelSetStrings() const override;
virtual QStringList getModelSetCompleterStrings(bool sorted) const override;
virtual int getModelSetCount() const override;
@@ -225,12 +227,15 @@ namespace BlackCore
CAircraftMatcher m_aircraftMatcher; //!< Model matcher
BlackMisc::Simulation::CAircraftModelSetLoader m_modelSetLoader { this }; //!< load model set from caches
QMap<BlackMisc::Aviation::CCallsign, BlackMisc::CStatusMessageList> m_matchingMessages;
BlackMisc::CSettingReadOnly<BlackMisc::Simulation::Settings::TSimulatorMessages> m_messageSettings { this }; //!< settings for messages
BlackMisc::CSettingReadOnly<Application::TEnabledSimulators> m_enabledSimulators { this, &CContextSimulator::changeEnabledSimulators };
QString m_networkSessionId; //! Network session of CServer::getServerSessionId, if not connected empty
bool m_initallyAddAircrafts = false;
bool m_enableMatchingMessages = true;
bool m_isWeatherActivated = false;
// settings
BlackMisc::Simulation::Settings::CMultiSimulatorSettings m_simulatorSettings { this }; //!< for directories of XPlane
BlackMisc::CSettingReadOnly<BlackMisc::Simulation::Settings::TSimulatorMessages> m_messageSettings { this }; //!< settings for messages
BlackMisc::CSettingReadOnly<Application::TEnabledSimulators> m_enabledSimulators { this, &CContextSimulator::changeEnabledSimulators };
QString m_networkSessionId; //! Network session of CServer::getServerSessionId, if not connected empty
};
} // namespace
} // namespace

View File

@@ -32,7 +32,7 @@ namespace BlackCore
CContextSimulatorProxy::CContextSimulatorProxy(const QString &serviceName, QDBusConnection &connection, CCoreFacadeConfig::ContextMode mode, CCoreFacade *runtime) : IContextSimulator(mode, runtime), m_dBusInterface(nullptr)
{
this->m_dBusInterface = new BlackMisc::CGenericDBusInterface(
serviceName , IContextSimulator::ObjectPath(), IContextSimulator::InterfaceName(),
serviceName, IContextSimulator::ObjectPath(), IContextSimulator::InterfaceName(),
connection, this);
this->relaySignals(serviceName, connection);
}
@@ -111,6 +111,11 @@ namespace BlackCore
return m_dBusInterface->callDBusRet<BlackMisc::Simulation::CSimulatorInfo>(QLatin1String("simulatorsWithInitializedModelSet"));
}
CStatusMessageList CContextSimulatorProxy::verifyPrerequisites() const
{
return m_dBusInterface->callDBusRet<BlackMisc::CStatusMessageList>(QLatin1String("verifyPrerequisites"));
}
CSimulatorInfo CContextSimulatorProxy::getModelSetLoaderSimulator() const
{
return m_dBusInterface->callDBusRet<BlackMisc::Simulation::CSimulatorInfo>(QLatin1String("getModelSetLoaderSimulator"));

View File

@@ -65,6 +65,7 @@ namespace BlackCore
virtual BlackMisc::Aviation::CAirportList getAirportsInRange() const override;
virtual BlackMisc::Simulation::CAircraftModelList getModelSet() const override;
virtual BlackMisc::Simulation::CSimulatorInfo simulatorsWithInitializedModelSet() const override;
virtual BlackMisc::CStatusMessageList verifyPrerequisites() const override;
virtual BlackMisc::Simulation::CSimulatorInfo getModelSetLoaderSimulator() const override;
virtual void setModelSetLoaderSimulator(const BlackMisc::Simulation::CSimulatorInfo &simulator) override;
virtual QStringList getModelSetStrings() const override;