mirror of
https://github.com/ciphervance/supercell-wx.git
synced 2025-10-30 20:50:06 +00:00
Handle empty message lists for text event keys
Partial fix for #44, application should no longer crash, but erroneous behavior may remain
This commit is contained in:
parent
7f624e1263
commit
fceb5c33f7
1 changed files with 66 additions and 26 deletions
|
|
@ -367,39 +367,69 @@ AlertModelImpl::AlertModelImpl() :
|
||||||
|
|
||||||
std::string AlertModelImpl::GetCounties(const types::TextEventKey& key)
|
std::string AlertModelImpl::GetCounties(const types::TextEventKey& key)
|
||||||
{
|
{
|
||||||
auto messageList = manager::TextEventManager::Instance()->message_list(key);
|
auto messageList = manager::TextEventManager::Instance()->message_list(key);
|
||||||
auto& lastMessage = messageList.back();
|
|
||||||
size_t segmentCount = lastMessage->segment_count();
|
|
||||||
auto lastSegment = lastMessage->segment(segmentCount - 1);
|
|
||||||
auto fipsIds = lastSegment->header_->ugc_.fips_ids();
|
|
||||||
|
|
||||||
std::vector<std::string> counties;
|
if (messageList.size() > 0)
|
||||||
counties.reserve(fipsIds.size());
|
|
||||||
for (auto& id : fipsIds)
|
|
||||||
{
|
{
|
||||||
counties.push_back(config::CountyDatabase::GetCountyName(id));
|
auto& lastMessage = messageList.back();
|
||||||
}
|
size_t segmentCount = lastMessage->segment_count();
|
||||||
std::sort(counties.begin(), counties.end());
|
auto lastSegment = lastMessage->segment(segmentCount - 1);
|
||||||
|
auto fipsIds = lastSegment->header_->ugc_.fips_ids();
|
||||||
|
|
||||||
return scwx::util::ToString(counties);
|
std::vector<std::string> counties;
|
||||||
|
counties.reserve(fipsIds.size());
|
||||||
|
for (auto& id : fipsIds)
|
||||||
|
{
|
||||||
|
counties.push_back(config::CountyDatabase::GetCountyName(id));
|
||||||
|
}
|
||||||
|
std::sort(counties.begin(), counties.end());
|
||||||
|
|
||||||
|
return scwx::util::ToString(counties);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
logger_->warn("GetCounties(): No message associated with key: {}",
|
||||||
|
key.ToString());
|
||||||
|
return {};
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
std::string AlertModelImpl::GetState(const types::TextEventKey& key)
|
std::string AlertModelImpl::GetState(const types::TextEventKey& key)
|
||||||
{
|
{
|
||||||
auto messageList = manager::TextEventManager::Instance()->message_list(key);
|
auto messageList = manager::TextEventManager::Instance()->message_list(key);
|
||||||
auto& lastMessage = messageList.back();
|
|
||||||
size_t segmentCount = lastMessage->segment_count();
|
if (messageList.size() > 0)
|
||||||
auto lastSegment = lastMessage->segment(segmentCount - 1);
|
{
|
||||||
return scwx::util::ToString(lastSegment->header_->ugc_.states());
|
auto& lastMessage = messageList.back();
|
||||||
|
size_t segmentCount = lastMessage->segment_count();
|
||||||
|
auto lastSegment = lastMessage->segment(segmentCount - 1);
|
||||||
|
return scwx::util::ToString(lastSegment->header_->ugc_.states());
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
logger_->warn("GetState(): No message associated with key: {}",
|
||||||
|
key.ToString());
|
||||||
|
return {};
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
std::chrono::system_clock::time_point
|
std::chrono::system_clock::time_point
|
||||||
AlertModelImpl::GetStartTime(const types::TextEventKey& key)
|
AlertModelImpl::GetStartTime(const types::TextEventKey& key)
|
||||||
{
|
{
|
||||||
auto messageList = manager::TextEventManager::Instance()->message_list(key);
|
auto messageList = manager::TextEventManager::Instance()->message_list(key);
|
||||||
auto& firstMessage = messageList.front();
|
|
||||||
auto firstSegment = firstMessage->segment(0);
|
if (messageList.size() > 0)
|
||||||
return firstSegment->header_->vtecString_[0].pVtec_.event_begin();
|
{
|
||||||
|
auto& firstMessage = messageList.front();
|
||||||
|
auto firstSegment = firstMessage->segment(0);
|
||||||
|
return firstSegment->header_->vtecString_[0].pVtec_.event_begin();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
logger_->warn("GetStartTime(): No message associated with key: {}",
|
||||||
|
key.ToString());
|
||||||
|
return {};
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
std::string AlertModelImpl::GetStartTimeString(const types::TextEventKey& key)
|
std::string AlertModelImpl::GetStartTimeString(const types::TextEventKey& key)
|
||||||
|
|
@ -410,11 +440,21 @@ std::string AlertModelImpl::GetStartTimeString(const types::TextEventKey& key)
|
||||||
std::chrono::system_clock::time_point
|
std::chrono::system_clock::time_point
|
||||||
AlertModelImpl::GetEndTime(const types::TextEventKey& key)
|
AlertModelImpl::GetEndTime(const types::TextEventKey& key)
|
||||||
{
|
{
|
||||||
auto messageList = manager::TextEventManager::Instance()->message_list(key);
|
auto messageList = manager::TextEventManager::Instance()->message_list(key);
|
||||||
auto& lastMessage = messageList.back();
|
|
||||||
size_t segmentCount = lastMessage->segment_count();
|
if (messageList.size() > 0)
|
||||||
auto lastSegment = lastMessage->segment(segmentCount - 1);
|
{
|
||||||
return lastSegment->header_->vtecString_[0].pVtec_.event_end();
|
auto& lastMessage = messageList.back();
|
||||||
|
size_t segmentCount = lastMessage->segment_count();
|
||||||
|
auto lastSegment = lastMessage->segment(segmentCount - 1);
|
||||||
|
return lastSegment->header_->vtecString_[0].pVtec_.event_end();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
logger_->warn("GetEndTime(): No message associated with key: {}",
|
||||||
|
key.ToString());
|
||||||
|
return {};
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
std::string AlertModelImpl::GetEndTimeString(const types::TextEventKey& key)
|
std::string AlertModelImpl::GetEndTimeString(const types::TextEventKey& key)
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue