mirror of
				https://github.com/ciphervance/supercell-wx.git
				synced 2025-10-31 01:30:05 +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
	
	 Dan Paulat
						Dan Paulat