diff --git a/scwx-qt/source/scwx/qt/config/radar_site.cpp b/scwx-qt/source/scwx/qt/config/radar_site.cpp index 6a0c28a8..dcc82384 100644 --- a/scwx-qt/source/scwx/qt/config/radar_site.cpp +++ b/scwx-qt/source/scwx/qt/config/radar_site.cpp @@ -1,5 +1,6 @@ #include #include +#include #include @@ -18,7 +19,8 @@ static const std::string defaultRadarSiteFile_ = ":/res/config/radar_sites.json"; static std::unordered_map> - radarSiteMap_; + radarSiteMap_; +static std::unordered_map siteIdMap_; static bool ValidateJsonEntry(const boost::json::object& o); @@ -100,6 +102,18 @@ std::shared_ptr RadarSite::Get(const std::string& id) return radarSite; } +std::string GetRadarIdFromSiteId(const std::string& siteId) +{ + std::string id = "???"; + + if (siteIdMap_.contains(siteId)) + { + id = siteIdMap_.at(siteId); + } + + return id; +} + void RadarSite::Initialize() { ReadConfig(defaultRadarSiteFile_); @@ -145,6 +159,19 @@ size_t RadarSite::ReadConfig(const std::string& path) radarSiteMap_[site->p->id_] = site; ++sitesAdded; } + + std::string siteId = common::GetSiteId(site->p->id_); + + if (!siteIdMap_.contains(siteId)) + { + siteIdMap_[siteId] = site->p->id_; + } + else + { + BOOST_LOG_TRIVIAL(warning) + << logPrefix_ << "Site ID conflict: " << siteIdMap_.at(siteId) + << " and " << site->p->id_; + } } } } diff --git a/scwx-qt/source/scwx/qt/config/radar_site.hpp b/scwx-qt/source/scwx/qt/config/radar_site.hpp index c67594c4..43654fd1 100644 --- a/scwx-qt/source/scwx/qt/config/radar_site.hpp +++ b/scwx-qt/source/scwx/qt/config/radar_site.hpp @@ -41,6 +41,8 @@ private: std::unique_ptr p; }; +std::string GetRadarIdFromSiteId(const std::string& siteId); + } // namespace config } // namespace qt } // namespace scwx diff --git a/wxdata/include/scwx/common/sites.hpp b/wxdata/include/scwx/common/sites.hpp new file mode 100644 index 00000000..79ecd230 --- /dev/null +++ b/wxdata/include/scwx/common/sites.hpp @@ -0,0 +1,13 @@ +#pragma once + +#include + +namespace scwx +{ +namespace common +{ + +std::string GetSiteId(const std::string& radarId); + +} // namespace common +} // namespace scwx diff --git a/wxdata/source/scwx/common/sites.cpp b/wxdata/source/scwx/common/sites.cpp new file mode 100644 index 00000000..85bc2ef0 --- /dev/null +++ b/wxdata/source/scwx/common/sites.cpp @@ -0,0 +1,18 @@ +#include + +#include + +namespace scwx +{ +namespace common +{ + +std::string GetSiteId(const std::string& radarId) +{ + size_t siteIdIndex = std::max(radarId.length(), 3u) - 3u; + std::string siteId = radarId.substr(siteIdIndex); + return siteId; +} + +} // namespace common +} // namespace scwx diff --git a/wxdata/wxdata.cmake b/wxdata/wxdata.cmake index 55bb4d81..6bae5576 100644 --- a/wxdata/wxdata.cmake +++ b/wxdata/wxdata.cmake @@ -25,10 +25,12 @@ set(HDR_COMMON include/scwx/common/characters.hpp include/scwx/common/constants.hpp include/scwx/common/geographic.hpp include/scwx/common/products.hpp + include/scwx/common/sites.hpp include/scwx/common/types.hpp include/scwx/common/vcp.hpp) set(SRC_COMMON source/scwx/common/color_table.cpp source/scwx/common/products.cpp + source/scwx/common/sites.cpp source/scwx/common/vcp.cpp) set(HDR_UTIL include/scwx/util/iterator.hpp include/scwx/util/rangebuf.hpp