Add-ons: move all code to the flightgear::addons namespace
This commit is contained in:
parent
c3b1442546
commit
f5ab26bd71
16 changed files with 90 additions and 34 deletions
|
@ -48,6 +48,9 @@ using std::vector;
|
||||||
namespace flightgear
|
namespace flightgear
|
||||||
{
|
{
|
||||||
|
|
||||||
|
namespace addons
|
||||||
|
{
|
||||||
|
|
||||||
Addon::Addon(std::string id, AddonVersion version, SGPath basePath,
|
Addon::Addon(std::string id, AddonVersion version, SGPath basePath,
|
||||||
std::string minFGVersionRequired, std::string maxFGVersionRequired,
|
std::string minFGVersionRequired, std::string maxFGVersionRequired,
|
||||||
SGPropertyNode* addonNode)
|
SGPropertyNode* addonNode)
|
||||||
|
@ -239,14 +242,14 @@ Addon Addon::fromAddonDir(const SGPath& addonPath)
|
||||||
SGPropertyNode addonRoot;
|
SGPropertyNode addonRoot;
|
||||||
|
|
||||||
if (!metadataFile.exists()) {
|
if (!metadataFile.exists()) {
|
||||||
throw addon_errors::no_metadata_file_found(
|
throw errors::no_metadata_file_found(
|
||||||
"unable to find add-on metadata file '" + metadataFile.utf8Str() + "'");
|
"unable to find add-on metadata file '" + metadataFile.utf8Str() + "'");
|
||||||
}
|
}
|
||||||
|
|
||||||
try {
|
try {
|
||||||
readProperties(metadataFile, &addonRoot);
|
readProperties(metadataFile, &addonRoot);
|
||||||
} catch (const sg_exception &e) {
|
} catch (const sg_exception &e) {
|
||||||
throw addon_errors::error_loading_metadata_file(
|
throw errors::error_loading_metadata_file(
|
||||||
"unable to load add-on metadata file '" + metadataFile.utf8Str() + "': " +
|
"unable to load add-on metadata file '" + metadataFile.utf8Str() + "': " +
|
||||||
e.getFormattedMessage());
|
e.getFormattedMessage());
|
||||||
}
|
}
|
||||||
|
@ -254,7 +257,7 @@ Addon Addon::fromAddonDir(const SGPath& addonPath)
|
||||||
// Check the 'meta' section
|
// Check the 'meta' section
|
||||||
SGPropertyNode *metaNode = addonRoot.getChild("meta");
|
SGPropertyNode *metaNode = addonRoot.getChild("meta");
|
||||||
if (metaNode == nullptr) {
|
if (metaNode == nullptr) {
|
||||||
throw addon_errors::error_loading_metadata_file(
|
throw errors::error_loading_metadata_file(
|
||||||
"no /meta node found in add-on metadata file '" +
|
"no /meta node found in add-on metadata file '" +
|
||||||
metadataFile.utf8Str() + "'");
|
metadataFile.utf8Str() + "'");
|
||||||
}
|
}
|
||||||
|
@ -262,14 +265,14 @@ Addon Addon::fromAddonDir(const SGPath& addonPath)
|
||||||
// Check the file type
|
// Check the file type
|
||||||
SGPropertyNode *fileTypeNode = metaNode->getChild("file-type");
|
SGPropertyNode *fileTypeNode = metaNode->getChild("file-type");
|
||||||
if (fileTypeNode == nullptr) {
|
if (fileTypeNode == nullptr) {
|
||||||
throw addon_errors::error_loading_metadata_file(
|
throw errors::error_loading_metadata_file(
|
||||||
"no /meta/file-type node found in add-on metadata file '" +
|
"no /meta/file-type node found in add-on metadata file '" +
|
||||||
metadataFile.utf8Str() + "'");
|
metadataFile.utf8Str() + "'");
|
||||||
}
|
}
|
||||||
|
|
||||||
string fileType = fileTypeNode->getStringValue();
|
string fileType = fileTypeNode->getStringValue();
|
||||||
if (fileType != "FlightGear add-on metadata") {
|
if (fileType != "FlightGear add-on metadata") {
|
||||||
throw addon_errors::error_loading_metadata_file(
|
throw errors::error_loading_metadata_file(
|
||||||
"Invalid /meta/file-type value for add-on metadata file '" +
|
"Invalid /meta/file-type value for add-on metadata file '" +
|
||||||
metadataFile.utf8Str() + "': '" + fileType + "' "
|
metadataFile.utf8Str() + "': '" + fileType + "' "
|
||||||
"(expected 'FlightGear add-on metadata')");
|
"(expected 'FlightGear add-on metadata')");
|
||||||
|
@ -278,14 +281,14 @@ Addon Addon::fromAddonDir(const SGPath& addonPath)
|
||||||
// Check the format version
|
// Check the format version
|
||||||
SGPropertyNode *fmtVersionNode = metaNode->getChild("format-version");
|
SGPropertyNode *fmtVersionNode = metaNode->getChild("format-version");
|
||||||
if (fmtVersionNode == nullptr) {
|
if (fmtVersionNode == nullptr) {
|
||||||
throw addon_errors::error_loading_metadata_file(
|
throw errors::error_loading_metadata_file(
|
||||||
"no /meta/format-version node found in add-on metadata file '" +
|
"no /meta/format-version node found in add-on metadata file '" +
|
||||||
metadataFile.utf8Str() + "'");
|
metadataFile.utf8Str() + "'");
|
||||||
}
|
}
|
||||||
|
|
||||||
int formatVersion = fmtVersionNode->getIntValue();
|
int formatVersion = fmtVersionNode->getIntValue();
|
||||||
if (formatVersion != 1) {
|
if (formatVersion != 1) {
|
||||||
throw addon_errors::error_loading_metadata_file(
|
throw errors::error_loading_metadata_file(
|
||||||
"unknown format version in add-on metadata file '" +
|
"unknown format version in add-on metadata file '" +
|
||||||
metadataFile.utf8Str() + "': " + std::to_string(formatVersion));
|
metadataFile.utf8Str() + "': " + std::to_string(formatVersion));
|
||||||
}
|
}
|
||||||
|
@ -293,14 +296,14 @@ Addon Addon::fromAddonDir(const SGPath& addonPath)
|
||||||
// Now the data we are really interested in
|
// Now the data we are really interested in
|
||||||
SGPropertyNode *addonNode = addonRoot.getChild("addon");
|
SGPropertyNode *addonNode = addonRoot.getChild("addon");
|
||||||
if (addonNode == nullptr) {
|
if (addonNode == nullptr) {
|
||||||
throw addon_errors::error_loading_metadata_file(
|
throw errors::error_loading_metadata_file(
|
||||||
"no /addon node found in add-on metadata file '" +
|
"no /addon node found in add-on metadata file '" +
|
||||||
metadataFile.utf8Str() + "'");
|
metadataFile.utf8Str() + "'");
|
||||||
}
|
}
|
||||||
|
|
||||||
SGPropertyNode *idNode = addonNode->getChild("identifier");
|
SGPropertyNode *idNode = addonNode->getChild("identifier");
|
||||||
if (idNode == nullptr) {
|
if (idNode == nullptr) {
|
||||||
throw addon_errors::error_loading_metadata_file(
|
throw errors::error_loading_metadata_file(
|
||||||
"no /addon/identifier node found in add-on metadata file '" +
|
"no /addon/identifier node found in add-on metadata file '" +
|
||||||
metadataFile.utf8Str() + "'");
|
metadataFile.utf8Str() + "'");
|
||||||
}
|
}
|
||||||
|
@ -308,7 +311,7 @@ Addon Addon::fromAddonDir(const SGPath& addonPath)
|
||||||
|
|
||||||
// Require a non-empty identifier for the add-on
|
// Require a non-empty identifier for the add-on
|
||||||
if (addonId.empty()) {
|
if (addonId.empty()) {
|
||||||
throw addon_errors::error_loading_metadata_file(
|
throw errors::error_loading_metadata_file(
|
||||||
"empty or whitespace-only value for the /addon/identifier node in "
|
"empty or whitespace-only value for the /addon/identifier node in "
|
||||||
"add-on metadata file '" + metadataFile.utf8Str() + "'");
|
"add-on metadata file '" + metadataFile.utf8Str() + "'");
|
||||||
} else if (addonId.find('.') == string::npos) {
|
} else if (addonId.find('.') == string::npos) {
|
||||||
|
@ -320,7 +323,7 @@ Addon Addon::fromAddonDir(const SGPath& addonPath)
|
||||||
|
|
||||||
SGPropertyNode *nameNode = addonNode->getChild("name");
|
SGPropertyNode *nameNode = addonNode->getChild("name");
|
||||||
if (nameNode == nullptr) {
|
if (nameNode == nullptr) {
|
||||||
throw addon_errors::error_loading_metadata_file(
|
throw errors::error_loading_metadata_file(
|
||||||
"no /addon/name node found in add-on metadata file '" +
|
"no /addon/name node found in add-on metadata file '" +
|
||||||
metadataFile.utf8Str() + "'");
|
metadataFile.utf8Str() + "'");
|
||||||
}
|
}
|
||||||
|
@ -328,14 +331,14 @@ Addon Addon::fromAddonDir(const SGPath& addonPath)
|
||||||
|
|
||||||
// Require a non-empty name for the add-on
|
// Require a non-empty name for the add-on
|
||||||
if (addonName.empty()) {
|
if (addonName.empty()) {
|
||||||
throw addon_errors::error_loading_metadata_file(
|
throw errors::error_loading_metadata_file(
|
||||||
"empty or whitespace-only value for the /addon/name node in add-on "
|
"empty or whitespace-only value for the /addon/name node in add-on "
|
||||||
"metadata file '" + metadataFile.utf8Str() + "'");
|
"metadata file '" + metadataFile.utf8Str() + "'");
|
||||||
}
|
}
|
||||||
|
|
||||||
SGPropertyNode *versionNode = addonNode->getChild("version");
|
SGPropertyNode *versionNode = addonNode->getChild("version");
|
||||||
if (versionNode == nullptr) {
|
if (versionNode == nullptr) {
|
||||||
throw addon_errors::error_loading_metadata_file(
|
throw errors::error_loading_metadata_file(
|
||||||
"no /addon/version node found in add-on metadata file '" +
|
"no /addon/version node found in add-on metadata file '" +
|
||||||
metadataFile.utf8Str() + "'");
|
metadataFile.utf8Str() + "'");
|
||||||
}
|
}
|
||||||
|
@ -535,4 +538,6 @@ std::ostream& operator<<(std::ostream& os, const Addon& addon)
|
||||||
return os << addon.str();
|
return os << addon.str();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
} // of namespace addons
|
||||||
|
|
||||||
} // of namespace flightgear
|
} // of namespace flightgear
|
||||||
|
|
|
@ -37,6 +37,9 @@
|
||||||
namespace flightgear
|
namespace flightgear
|
||||||
{
|
{
|
||||||
|
|
||||||
|
namespace addons
|
||||||
|
{
|
||||||
|
|
||||||
class Addon : public SGReferenced {
|
class Addon : public SGReferenced {
|
||||||
public:
|
public:
|
||||||
// Default constructor. 'minFGVersionRequired' is initialized to "2017.4.0"
|
// Default constructor. 'minFGVersionRequired' is initialized to "2017.4.0"
|
||||||
|
@ -178,6 +181,8 @@ private:
|
||||||
|
|
||||||
std::ostream& operator<<(std::ostream& os, const Addon& addonMetaData);
|
std::ostream& operator<<(std::ostream& os, const Addon& addonMetaData);
|
||||||
|
|
||||||
|
} // of namespace addons
|
||||||
|
|
||||||
} // of namespace flightgear
|
} // of namespace flightgear
|
||||||
|
|
||||||
#endif // of FG_ADDON_HXX
|
#endif // of FG_ADDON_HXX
|
||||||
|
|
|
@ -53,6 +53,9 @@ using std::unique_ptr;
|
||||||
namespace flightgear
|
namespace flightgear
|
||||||
{
|
{
|
||||||
|
|
||||||
|
namespace addons
|
||||||
|
{
|
||||||
|
|
||||||
static unique_ptr<AddonManager> staticInstance;
|
static unique_ptr<AddonManager> staticInstance;
|
||||||
|
|
||||||
// ***************************************************************************
|
// ***************************************************************************
|
||||||
|
@ -95,7 +98,7 @@ AddonManager::loadConfigFileIfExists(const SGPath& configFile)
|
||||||
try {
|
try {
|
||||||
readProperties(configFile, globals->get_props());
|
readProperties(configFile, globals->get_props());
|
||||||
} catch (const sg_exception &e) {
|
} catch (const sg_exception &e) {
|
||||||
throw addon_errors::error_loading_config_file(
|
throw errors::error_loading_config_file(
|
||||||
"unable to load add-on config file '" + configFile.utf8Str() + "': " +
|
"unable to load add-on config file '" + configFile.utf8Str() + "': " +
|
||||||
e.getFormattedMessage());
|
e.getFormattedMessage());
|
||||||
}
|
}
|
||||||
|
@ -120,7 +123,7 @@ AddonManager::registerAddonMetadata(const SGPath& addonPath)
|
||||||
// Check that the FlightGear version satisfies the add-on requirements
|
// Check that the FlightGear version satisfies the add-on requirements
|
||||||
std::string minFGversion = addon->getMinFGVersionRequired();
|
std::string minFGversion = addon->getMinFGVersionRequired();
|
||||||
if (strutils::compare_versions(FLIGHTGEAR_VERSION, minFGversion) < 0) {
|
if (strutils::compare_versions(FLIGHTGEAR_VERSION, minFGversion) < 0) {
|
||||||
throw addon_errors::fg_version_too_old(
|
throw errors::fg_version_too_old(
|
||||||
"add-on '" + addonId + "' requires FlightGear " + minFGversion +
|
"add-on '" + addonId + "' requires FlightGear " + minFGversion +
|
||||||
" or later, however this is FlightGear " + FLIGHTGEAR_VERSION);
|
" or later, however this is FlightGear " + FLIGHTGEAR_VERSION);
|
||||||
}
|
}
|
||||||
|
@ -128,7 +131,7 @@ AddonManager::registerAddonMetadata(const SGPath& addonPath)
|
||||||
std::string maxFGversion = addon->getMaxFGVersionRequired();
|
std::string maxFGversion = addon->getMaxFGVersionRequired();
|
||||||
if (maxFGversion != "none" &&
|
if (maxFGversion != "none" &&
|
||||||
strutils::compare_versions(FLIGHTGEAR_VERSION, maxFGversion) > 0) {
|
strutils::compare_versions(FLIGHTGEAR_VERSION, maxFGversion) > 0) {
|
||||||
throw addon_errors::fg_version_too_recent(
|
throw errors::fg_version_too_recent(
|
||||||
"add-on '" + addonId + "' requires FlightGear " + maxFGversion +
|
"add-on '" + addonId + "' requires FlightGear " + maxFGversion +
|
||||||
" or earlier, however this is FlightGear " + FLIGHTGEAR_VERSION);
|
" or earlier, however this is FlightGear " + FLIGHTGEAR_VERSION);
|
||||||
}
|
}
|
||||||
|
@ -140,7 +143,7 @@ AddonManager::registerAddonMetadata(const SGPath& addonPath)
|
||||||
if (!emplaceRetval.second) {
|
if (!emplaceRetval.second) {
|
||||||
auto existingElt = _idToAddonMap.find(addonId);
|
auto existingElt = _idToAddonMap.find(addonId);
|
||||||
assert(existingElt != _idToAddonMap.end());
|
assert(existingElt != _idToAddonMap.end());
|
||||||
throw addon_errors::duplicate_registration_attempt(
|
throw errors::duplicate_registration_attempt(
|
||||||
"attempt to register add-on '" + addonId + "' with base path '"
|
"attempt to register add-on '" + addonId + "' with base path '"
|
||||||
+ addonPath.utf8Str() + "', however it is already registered with base "
|
+ addonPath.utf8Str() + "', however it is already registered with base "
|
||||||
"path '" + existingElt->second->getBasePath().utf8Str() + "'");
|
"path '" + existingElt->second->getBasePath().utf8Str() + "'");
|
||||||
|
@ -254,4 +257,6 @@ SGPropertyNode_ptr AddonManager::addonNode(const string& addonId) const
|
||||||
return getAddon(addonId)->getAddonNode();
|
return getAddon(addonId)->getAddonNode();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
} // of namespace addons
|
||||||
|
|
||||||
} // of namespace flightgear
|
} // of namespace flightgear
|
||||||
|
|
|
@ -35,6 +35,9 @@
|
||||||
namespace flightgear
|
namespace flightgear
|
||||||
{
|
{
|
||||||
|
|
||||||
|
namespace addons
|
||||||
|
{
|
||||||
|
|
||||||
class AddonManager
|
class AddonManager
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
@ -100,6 +103,8 @@ private:
|
||||||
int _loadSequenceNumber = 0;
|
int _loadSequenceNumber = 0;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
} // of namespace addons
|
||||||
|
|
||||||
} // of namespace flightgear
|
} // of namespace flightgear
|
||||||
|
|
||||||
#endif // of FG_ADDONMANAGER_HXX
|
#endif // of FG_ADDONMANAGER_HXX
|
||||||
|
|
|
@ -47,6 +47,9 @@ namespace strutils = simgear::strutils;
|
||||||
namespace flightgear
|
namespace flightgear
|
||||||
{
|
{
|
||||||
|
|
||||||
|
namespace addons
|
||||||
|
{
|
||||||
|
|
||||||
// ***************************************************************************
|
// ***************************************************************************
|
||||||
// * AddonVersionSuffix *
|
// * AddonVersionSuffix *
|
||||||
// ***************************************************************************
|
// ***************************************************************************
|
||||||
|
@ -399,4 +402,6 @@ void AddonVersion::setupGhost(nasal::Hash& addonsModule)
|
||||||
.method("greaterThanOrEqual", &AddonVersion::greaterThanOrEqual);
|
.method("greaterThanOrEqual", &AddonVersion::greaterThanOrEqual);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
} // of namespace addons
|
||||||
|
|
||||||
} // of namespace flightgear
|
} // of namespace flightgear
|
||||||
|
|
|
@ -34,6 +34,9 @@
|
||||||
namespace flightgear
|
namespace flightgear
|
||||||
{
|
{
|
||||||
|
|
||||||
|
namespace addons
|
||||||
|
{
|
||||||
|
|
||||||
// Order matters for the sorting/comparison functions
|
// Order matters for the sorting/comparison functions
|
||||||
enum class AddonVersionSuffixPrereleaseType {
|
enum class AddonVersionSuffixPrereleaseType {
|
||||||
alpha = 0,
|
alpha = 0,
|
||||||
|
@ -170,6 +173,8 @@ bool operator>=(const AddonVersion& lhs, const AddonVersion& rhs);
|
||||||
|
|
||||||
std::ostream& operator<<(std::ostream&, const AddonVersion&);
|
std::ostream& operator<<(std::ostream&, const AddonVersion&);
|
||||||
|
|
||||||
|
} // of namespace addons
|
||||||
|
|
||||||
} // of namespace flightgear
|
} // of namespace flightgear
|
||||||
|
|
||||||
#endif // of FG_ADDONVERSION_HXX
|
#endif // of FG_ADDONVERSION_HXX
|
||||||
|
|
|
@ -26,6 +26,9 @@
|
||||||
namespace flightgear
|
namespace flightgear
|
||||||
{
|
{
|
||||||
|
|
||||||
|
namespace addons
|
||||||
|
{
|
||||||
|
|
||||||
class Addon;
|
class Addon;
|
||||||
class AddonManager;
|
class AddonManager;
|
||||||
class AddonVersion;
|
class AddonVersion;
|
||||||
|
@ -34,7 +37,7 @@ class AddonVersionSuffix;
|
||||||
using AddonRef = SGSharedPtr<Addon>;
|
using AddonRef = SGSharedPtr<Addon>;
|
||||||
using AddonVersionRef = SGSharedPtr<AddonVersion>;
|
using AddonVersionRef = SGSharedPtr<AddonVersion>;
|
||||||
|
|
||||||
namespace addon_errors
|
namespace errors
|
||||||
{
|
{
|
||||||
|
|
||||||
class error;
|
class error;
|
||||||
|
@ -45,7 +48,9 @@ class duplicate_registration_attempt;
|
||||||
class fg_version_too_old;
|
class fg_version_too_old;
|
||||||
class fg_version_too_recent;
|
class fg_version_too_recent;
|
||||||
|
|
||||||
} // of namespace addon_errors
|
} // of namespace errors
|
||||||
|
|
||||||
|
} // of namespace addons
|
||||||
|
|
||||||
} // of namespace flightgear
|
} // of namespace flightgear
|
||||||
|
|
||||||
|
|
|
@ -28,10 +28,14 @@ using std::string;
|
||||||
namespace flightgear
|
namespace flightgear
|
||||||
{
|
{
|
||||||
|
|
||||||
namespace addon_errors
|
namespace addons
|
||||||
{
|
{
|
||||||
|
|
||||||
|
namespace errors
|
||||||
|
{
|
||||||
|
|
||||||
// ***************************************************************************
|
// ***************************************************************************
|
||||||
// * Base class for custom exceptions *
|
// * Base class for add-on exceptions *
|
||||||
// ***************************************************************************
|
// ***************************************************************************
|
||||||
|
|
||||||
// Prepending a prefix such as "Add-on error: " would be redundant given the
|
// Prepending a prefix such as "Add-on error: " would be redundant given the
|
||||||
|
@ -44,6 +48,8 @@ error::error(const char* message, const char* origin)
|
||||||
: error(string(message), string(origin))
|
: error(string(message), string(origin))
|
||||||
{ }
|
{ }
|
||||||
|
|
||||||
} // of namespace addon_errors
|
} // of namespace errors
|
||||||
|
|
||||||
|
} // of namespace addons
|
||||||
|
|
||||||
} // of namespace flightgear
|
} // of namespace flightgear
|
||||||
|
|
|
@ -27,7 +27,10 @@
|
||||||
namespace flightgear
|
namespace flightgear
|
||||||
{
|
{
|
||||||
|
|
||||||
namespace addon_errors
|
namespace addons
|
||||||
|
{
|
||||||
|
|
||||||
|
namespace errors
|
||||||
{
|
{
|
||||||
|
|
||||||
class error : public sg_exception
|
class error : public sg_exception
|
||||||
|
@ -56,7 +59,9 @@ class fg_version_too_old : public error
|
||||||
class fg_version_too_recent : public error
|
class fg_version_too_recent : public error
|
||||||
{ using error::error; };
|
{ using error::error; };
|
||||||
|
|
||||||
} // of namespace addon_errors
|
} // of namespace errors
|
||||||
|
|
||||||
|
} // of namespace addons
|
||||||
|
|
||||||
} // of namespace flightgear
|
} // of namespace flightgear
|
||||||
|
|
||||||
|
|
|
@ -38,12 +38,14 @@
|
||||||
using std::string;
|
using std::string;
|
||||||
using std::vector;
|
using std::vector;
|
||||||
|
|
||||||
using namespace flightgear;
|
using flightgear::addons::Addon;
|
||||||
|
using flightgear::addons::AddonVersion;
|
||||||
|
using flightgear::addons::AddonVersionSuffix;
|
||||||
|
|
||||||
|
|
||||||
void testAddonVersionSuffix()
|
void testAddonVersionSuffix()
|
||||||
{
|
{
|
||||||
using AddonRelType = AddonVersionSuffixPrereleaseType;
|
using AddonRelType = flightgear::addons::AddonVersionSuffixPrereleaseType;
|
||||||
|
|
||||||
fgtest::initTestGlobals("AddonVersion");
|
fgtest::initTestGlobals("AddonVersion");
|
||||||
|
|
||||||
|
@ -140,7 +142,7 @@ void testAddonVersionSuffix()
|
||||||
|
|
||||||
void testAddonVersion()
|
void testAddonVersion()
|
||||||
{
|
{
|
||||||
using AddonRelType = AddonVersionSuffixPrereleaseType;
|
using AddonRelType = flightgear::addons::AddonVersionSuffixPrereleaseType;
|
||||||
|
|
||||||
fgtest::initTestGlobals("AddonVersion");
|
fgtest::initTestGlobals("AddonVersion");
|
||||||
|
|
||||||
|
|
|
@ -1138,8 +1138,8 @@ void fgStartNewReset()
|
||||||
// otherwise channels are duplicated
|
// otherwise channels are duplicated
|
||||||
globals->get_channel_options_list()->clear();
|
globals->get_channel_options_list()->clear();
|
||||||
|
|
||||||
flightgear::AddonManager::reset();
|
flightgear::addons::AddonManager::reset();
|
||||||
flightgear::AddonManager::createInstance();
|
flightgear::addons::AddonManager::createInstance();
|
||||||
|
|
||||||
fgInitConfig(0, NULL, true);
|
fgInitConfig(0, NULL, true);
|
||||||
fgInitGeneral(); // all of this?
|
fgInitGeneral(); // all of this?
|
||||||
|
|
|
@ -535,7 +535,7 @@ int fgMainInit( int argc, char **argv )
|
||||||
return EXIT_SUCCESS;
|
return EXIT_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
AddonManager::createInstance();
|
addons::AddonManager::createInstance();
|
||||||
|
|
||||||
configResult = flightgear::Options::sharedInstance()->processOptions();
|
configResult = flightgear::Options::sharedInstance()->processOptions();
|
||||||
if (configResult == flightgear::FG_OPTIONS_ERROR) {
|
if (configResult == flightgear::FG_OPTIONS_ERROR) {
|
||||||
|
|
|
@ -707,7 +707,7 @@ static int
|
||||||
fgOptAddon(const char *arg)
|
fgOptAddon(const char *arg)
|
||||||
{
|
{
|
||||||
const SGPath addonPath = SGPath::fromLocal8Bit(arg);
|
const SGPath addonPath = SGPath::fromLocal8Bit(arg);
|
||||||
const auto& addonManager = AddonManager::instance();
|
const auto& addonManager = addons::AddonManager::instance();
|
||||||
|
|
||||||
try {
|
try {
|
||||||
addonManager->registerAddon(addonPath);
|
addonManager->registerAddon(addonPath);
|
||||||
|
|
|
@ -36,6 +36,9 @@
|
||||||
namespace flightgear
|
namespace flightgear
|
||||||
{
|
{
|
||||||
|
|
||||||
|
namespace addons
|
||||||
|
{
|
||||||
|
|
||||||
// ***************************************************************************
|
// ***************************************************************************
|
||||||
// * AddonManager *
|
// * AddonManager *
|
||||||
// ***************************************************************************
|
// ***************************************************************************
|
||||||
|
@ -194,4 +197,6 @@ void initAddonClassesForNasal(naRef globals, naContext c)
|
||||||
addonsModule.createHash("AddonVersion").set("new", &f_createAddonVersion);
|
addonsModule.createHash("AddonVersion").set("new", &f_createAddonVersion);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
} // of namespace addons
|
||||||
|
|
||||||
} // of namespace flightgear
|
} // of namespace flightgear
|
||||||
|
|
|
@ -25,8 +25,13 @@
|
||||||
namespace flightgear
|
namespace flightgear
|
||||||
{
|
{
|
||||||
|
|
||||||
|
namespace addons
|
||||||
|
{
|
||||||
|
|
||||||
void initAddonClassesForNasal(naRef globals, naContext c);
|
void initAddonClassesForNasal(naRef globals, naContext c);
|
||||||
|
|
||||||
|
} // of namespace addons
|
||||||
|
|
||||||
} // of namespace flightgear
|
} // of namespace flightgear
|
||||||
|
|
||||||
#endif // of FG_ADDON_NASAL_INTERFACE_HXX
|
#endif // of FG_ADDON_NASAL_INTERFACE_HXX
|
||||||
|
|
|
@ -857,8 +857,6 @@ void FGNasalSys::setCmdArg(SGPropertyNode* aNode)
|
||||||
|
|
||||||
void FGNasalSys::init()
|
void FGNasalSys::init()
|
||||||
{
|
{
|
||||||
using namespace flightgear;
|
|
||||||
|
|
||||||
if (_inited) {
|
if (_inited) {
|
||||||
SG_LOG(SG_GENERAL, SG_ALERT, "duplicate init of Nasal");
|
SG_LOG(SG_GENERAL, SG_ALERT, "duplicate init of Nasal");
|
||||||
}
|
}
|
||||||
|
@ -914,7 +912,7 @@ void FGNasalSys::init()
|
||||||
.member("simulatedTime", &TimerObj::isSimTime, &f_timerObj_setSimTime)
|
.member("simulatedTime", &TimerObj::isSimTime, &f_timerObj_setSimTime)
|
||||||
.member("isRunning", &TimerObj::isRunning);
|
.member("isRunning", &TimerObj::isRunning);
|
||||||
|
|
||||||
initAddonClassesForNasal(_globals, _context);
|
flightgear::addons::initAddonClassesForNasal(_globals, _context);
|
||||||
|
|
||||||
// Now load the various source files in the Nasal directory
|
// Now load the various source files in the Nasal directory
|
||||||
simgear::Dir nasalDir(SGPath(globals->get_fg_root(), "Nasal"));
|
simgear::Dir nasalDir(SGPath(globals->get_fg_root(), "Nasal"));
|
||||||
|
|
Loading…
Add table
Reference in a new issue