1
0
Fork 0

Pkg: initial support for Variants

- aircraft init code can deal with a variant ID
- Nasal API can return a hash with variant IDs and names
This commit is contained in:
James Turner 2014-06-15 20:10:24 +02:00
parent 26a4948642
commit 7e8d713b28
2 changed files with 21 additions and 3 deletions

View file

@ -523,7 +523,8 @@ int fgInitAircraft(bool reinit)
flightgear::Options::sharedInstance()->initAircraft(); flightgear::Options::sharedInstance()->initAircraft();
} }
PackageRef acftPackage = pkgRoot->getPackageById(aircraftProp->getStringValue()); string aircraftId(aircraftProp->getStringValue());
PackageRef acftPackage = pkgRoot->getPackageById(aircraftId);
if (acftPackage) { if (acftPackage) {
if (acftPackage->isInstalled()) { if (acftPackage->isInstalled()) {
SG_LOG(SG_GENERAL, SG_INFO, "Loading aircraft from package:" << acftPackage->qualifiedId()); SG_LOG(SG_GENERAL, SG_INFO, "Loading aircraft from package:" << acftPackage->qualifiedId());
@ -538,15 +539,20 @@ int fgInitAircraft(bool reinit)
// overwrite the fully qualified ID with the aircraft one, so the // overwrite the fully qualified ID with the aircraft one, so the
// code in FindAndCacheAircraft works as normal // code in FindAndCacheAircraft works as normal
// note since we may be using a variant, we can't use the package ID
size_t lastDot = aircraftId.rfind('.');
if (lastDot != std::string::npos) {
aircraftId = aircraftId.substr(lastDot + 1);
aircraftProp->setStringValue(aircraftId);
aircraftProp->setStringValue(acftPackage->id()); }
// run the traditional-code path below // run the traditional-code path below
} else { } else {
#if 0 #if 0
// naturally the better option would be to on-demand install it! // naturally the better option would be to on-demand install it!
flightgear::fatalMessageBox("Aircraft not installed", flightgear::fatalMessageBox("Aircraft not installed",
"Requested aircraft is not currently installed.", "Requested aircraft is not currently installed.",
aircraftProp->getStringValue()); aircraftId);
return flightgear::FG_OPTIONS_ERROR; return flightgear::FG_OPTIONS_ERROR;
#endif #endif

View file

@ -207,6 +207,17 @@ static naRef f_catalog_search(pkg::Catalog& cat, const nasal::CallContext& ctx)
return ctx.to_nasal(result); return ctx.to_nasal(result);
} }
static naRef f_package_variants(pkg::Package& pack, naContext c)
{
nasal::Hash h(c);
string_list vars(pack.variants());
for (string_list_iterator it = vars.begin(); it != vars.end(); ++it) {
h.set(*it, pack.nameForVariant(*it));
}
return h.get_naRef();
}
void FGHTTPClient::postinit() void FGHTTPClient::postinit()
{ {
#ifdef ENABLE_PACKAGE_SYSTEM #ifdef ENABLE_PACKAGE_SYSTEM
@ -237,6 +248,7 @@ void FGHTTPClient::postinit()
.member("description", &pkg::Package::description) .member("description", &pkg::Package::description)
.member("installed", &pkg::Package::isInstalled) .member("installed", &pkg::Package::isInstalled)
.member("thumbnails", &pkg::Package::thumbnailUrls) .member("thumbnails", &pkg::Package::thumbnailUrls)
.member("variants", &f_package_variants)
.member("revision", &pkg::Package::revision) .member("revision", &pkg::Package::revision)
.member("catalog", &pkg::Package::catalog) .member("catalog", &pkg::Package::catalog)
.method("install", &pkg::Package::install) .method("install", &pkg::Package::install)