1
0
Fork 0

Fix bug #187: check if path cache matches fg-aircraft dirs

Check if any fg-aircraft dir changed - sequence also matters.
This commit is contained in:
ThorstenB 2010-11-29 22:48:37 +01:00
parent 27a7b98284
commit 79094e8c36

View file

@ -589,7 +589,7 @@ public:
bool loadAircraft() bool loadAircraft()
{ {
std::string aircraft = fgGetString( "/sim/aircraft", ""); std::string aircraft = fgGetString( "/sim/aircraft", "");
if (aircraft.empty()) { if (aircraft.empty()) {
SG_LOG(SG_GENERAL, SG_ALERT, "no aircraft specified"); SG_LOG(SG_GENERAL, SG_ALERT, "no aircraft specified");
return false; return false;
@ -601,6 +601,9 @@ public:
SGPropertyNode *n = _cache->getNode("fg-root", true); SGPropertyNode *n = _cache->getNode("fg-root", true);
n->setStringValue(globals->get_fg_root().c_str()); n->setStringValue(globals->get_fg_root().c_str());
n->setAttribute(SGPropertyNode::USERARCHIVE, true); n->setAttribute(SGPropertyNode::USERARCHIVE, true);
n = _cache->getNode("fg-aircraft", true);
n->setStringValue(getAircraftPaths().c_str());
n->setAttribute(SGPropertyNode::USERARCHIVE, true);
_cache->removeChildren("aircraft"); _cache->removeChildren("aircraft");
fgFindAircraft(this, &FindAndCacheAircraft::checkAircraft); fgFindAircraft(this, &FindAndCacheAircraft::checkAircraft);
@ -629,11 +632,29 @@ public:
} }
private: private:
SGPath getAircraftPaths() {
string_list pathList = globals->get_aircraft_paths();
SGPath aircraftPaths;
string_list::const_iterator it = pathList.begin();
if (it != pathList.end()) {
aircraftPaths.set(*it);
it++;
}
for (; it != pathList.end(); ++it) {
aircraftPaths.add(*it);
}
return aircraftPaths;
}
bool checkCache() bool checkCache()
{ {
if (globals->get_fg_root() != _cache->getStringValue("fg-root", "")) { if (globals->get_fg_root() != _cache->getStringValue("fg-root", "")) {
return false; // cache mismatch return false; // cache mismatch
} }
if (getAircraftPaths().str() != _cache->getStringValue("fg-aircraft", "")) {
return false; // cache mismatch
}
vector<SGPropertyNode_ptr> cache = _cache->getChildren("aircraft"); vector<SGPropertyNode_ptr> cache = _cache->getChildren("aircraft");
for (unsigned int i = 0; i < cache.size(); i++) { for (unsigned int i = 0; i < cache.size(); i++) {