Don't attempt to load an object that hasn't been listed yet by the provider

- Fixes issue when switching to a new product, product does not display the first time
This commit is contained in:
Dan Paulat 2023-06-18 22:34:29 -05:00
parent 7d74a0e312
commit ea1569cb76
2 changed files with 18 additions and 9 deletions

View file

@ -792,7 +792,16 @@ void RadarProductManagerImpl::LoadProviderData(
if (existingRecord == nullptr) if (existingRecord == nullptr)
{ {
std::string key = providerManager->provider_->FindKey(time); std::string key = providerManager->provider_->FindKey(time);
nexradFile = providerManager->provider_->LoadObjectByKey(key);
if (!key.empty())
{
nexradFile = providerManager->provider_->LoadObjectByKey(key);
}
else
{
logger_->warn("Attempting to load object without key: {}",
scwx::util::TimeString(time));
}
} }
else else
{ {
@ -1042,7 +1051,7 @@ RadarProductManagerImpl::GetLevel2ProductRecord(
record = recordPtr->second.lock(); record = recordPtr->second.lock();
} }
if (record == nullptr && if (recordPtr != nullptr && record == nullptr &&
recordTime != std::chrono::system_clock::time_point {}) recordTime != std::chrono::system_clock::time_point {})
{ {
// Product is expired, reload it // Product is expired, reload it
@ -1107,7 +1116,7 @@ RadarProductManagerImpl::GetLevel3ProductRecord(
} }
} }
if (record == nullptr && if (recordPtr != nullptr && record == nullptr &&
recordTime != std::chrono::system_clock::time_point {}) recordTime != std::chrono::system_clock::time_point {})
{ {
// Product is expired, reload it // Product is expired, reload it

View file

@ -176,28 +176,28 @@ bool WmoHeader::Parse(std::istream& is)
if (wmoTokenList.size() < 3 || wmoTokenList.size() > 4) if (wmoTokenList.size() < 3 || wmoTokenList.size() > 4)
{ {
logger_->debug("Invalid number of WMO tokens"); logger_->warn("Invalid number of WMO tokens");
headerValid = false; headerValid = false;
} }
else if (wmoTokenList[0].size() != 6) else if (wmoTokenList[0].size() != 6)
{ {
logger_->debug("WMO identifier malformed"); logger_->warn("WMO identifier malformed");
headerValid = false; headerValid = false;
} }
else if (wmoTokenList[1].size() != 4) else if (wmoTokenList[1].size() != 4)
{ {
logger_->debug("ICAO malformed"); logger_->warn("ICAO malformed");
headerValid = false; headerValid = false;
} }
else if (wmoTokenList[2].size() != 6) else if (wmoTokenList[2].size() != 6)
{ {
logger_->debug("Date/time malformed"); logger_->warn("Date/time malformed");
headerValid = false; headerValid = false;
} }
else if (wmoTokenList.size() == 4 && wmoTokenList[3].size() != 3) else if (wmoTokenList.size() == 4 && wmoTokenList[3].size() != 3)
{ {
// BBB indicator is optional // BBB indicator is optional
logger_->debug("BBB indicator malformed"); logger_->warn("BBB indicator malformed");
headerValid = false; headerValid = false;
} }
else else
@ -226,7 +226,7 @@ bool WmoHeader::Parse(std::istream& is)
{ {
if (awipsLine.size() != 6) if (awipsLine.size() != 6)
{ {
logger_->debug("AWIPS Identifier Line bad size"); logger_->warn("AWIPS Identifier Line bad size");
headerValid = false; headerValid = false;
} }
else else