mirror of
https://github.com/ciphervance/supercell-wx.git
synced 2025-11-01 03:50:06 +00:00
Add file request data
This commit is contained in:
parent
883626ebf5
commit
505b424de4
4 changed files with 94 additions and 5 deletions
|
|
@ -1,7 +1,9 @@
|
||||||
#include <scwx/qt/manager/radar_product_manager.hpp>
|
#include <scwx/qt/manager/radar_product_manager.hpp>
|
||||||
#include <scwx/common/constants.hpp>
|
#include <scwx/common/constants.hpp>
|
||||||
|
#include <scwx/common/sites.hpp>
|
||||||
#include <scwx/qt/config/radar_site.hpp>
|
#include <scwx/qt/config/radar_site.hpp>
|
||||||
#include <scwx/util/threads.hpp>
|
#include <scwx/util/threads.hpp>
|
||||||
|
#include <scwx/util/time.hpp>
|
||||||
#include <scwx/wsr88d/nexrad_file_factory.hpp>
|
#include <scwx/wsr88d/nexrad_file_factory.hpp>
|
||||||
|
|
||||||
#include <deque>
|
#include <deque>
|
||||||
|
|
@ -239,14 +241,56 @@ static void LoadNexradFile(CreateNexradFileFunction load,
|
||||||
std::unique_lock lock(fileLoadMutex_);
|
std::unique_lock lock(fileLoadMutex_);
|
||||||
std::shared_ptr<wsr88d::NexradFile> nexradFile = load();
|
std::shared_ptr<wsr88d::NexradFile> nexradFile = load();
|
||||||
|
|
||||||
|
std::shared_ptr<wsr88d::Ar2vFile> level2File =
|
||||||
|
std::dynamic_pointer_cast<wsr88d::Ar2vFile>(nexradFile);
|
||||||
|
std::shared_ptr<wsr88d::Level3File> level3File =
|
||||||
|
std::dynamic_pointer_cast<wsr88d::Level3File>(nexradFile);
|
||||||
|
|
||||||
|
bool fileValid = false;
|
||||||
|
std::string radarId = "????";
|
||||||
|
std::string siteId = "???";
|
||||||
|
uint16_t julianDate = 0;
|
||||||
|
uint32_t milliseconds = 0;
|
||||||
|
|
||||||
|
std::chrono::system_clock::time_point time;
|
||||||
|
|
||||||
|
if (level2File != nullptr)
|
||||||
|
{
|
||||||
|
fileValid = true;
|
||||||
|
radarId = level2File->icao();
|
||||||
|
siteId = common::GetSiteId(radarId);
|
||||||
|
julianDate = level2File->julian_date();
|
||||||
|
milliseconds = level2File->milliseconds();
|
||||||
|
}
|
||||||
|
else if (level3File != nullptr)
|
||||||
|
{
|
||||||
|
fileValid = true;
|
||||||
|
siteId = level3File->wmo_header()->product_designator();
|
||||||
|
radarId = config::GetRadarIdFromSiteId(siteId);
|
||||||
|
julianDate = level3File->message()->header().date_of_message();
|
||||||
|
milliseconds =
|
||||||
|
level3File->message()->header().time_of_message() * 1000u;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (fileValid)
|
||||||
|
{
|
||||||
|
time = util::TimePoint(julianDate, milliseconds);
|
||||||
|
|
||||||
|
std::shared_ptr<RadarProductManager> manager =
|
||||||
|
RadarProductManager::Instance(radarId);
|
||||||
|
|
||||||
// TODO: Store and index
|
// TODO: Store and index
|
||||||
// - Should this impact arguments sent back in onComplete?
|
// TODO: When to initialize?
|
||||||
|
}
|
||||||
|
|
||||||
lock.unlock();
|
lock.unlock();
|
||||||
|
|
||||||
if (request != nullptr)
|
if (request != nullptr)
|
||||||
{
|
{
|
||||||
request->set_nexrad_file(nexradFile);
|
request->set_nexrad_file(nexradFile);
|
||||||
|
request->set_radar_id(radarId);
|
||||||
|
request->set_site_id(siteId);
|
||||||
|
request->set_time(time);
|
||||||
emit request->RequestComplete(request);
|
emit request->RequestComplete(request);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
|
||||||
|
|
@ -15,11 +15,17 @@ static const std::string logPrefix_ =
|
||||||
class NexradFileRequestImpl
|
class NexradFileRequestImpl
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
explicit NexradFileRequestImpl() : nexradFile_ {nullptr} {}
|
explicit NexradFileRequestImpl() :
|
||||||
|
nexradFile_ {nullptr}, radarId_ {}, siteId_ {}, time_ {}
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
~NexradFileRequestImpl() {}
|
~NexradFileRequestImpl() {}
|
||||||
|
|
||||||
std::shared_ptr<wsr88d::NexradFile> nexradFile_;
|
std::shared_ptr<wsr88d::NexradFile> nexradFile_;
|
||||||
|
std::string radarId_;
|
||||||
|
std::string siteId_;
|
||||||
|
std::chrono::system_clock::time_point time_;
|
||||||
};
|
};
|
||||||
|
|
||||||
NexradFileRequest::NexradFileRequest() :
|
NexradFileRequest::NexradFileRequest() :
|
||||||
|
|
@ -33,12 +39,42 @@ std::shared_ptr<wsr88d::NexradFile> NexradFileRequest::nexrad_file() const
|
||||||
return p->nexradFile_;
|
return p->nexradFile_;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
std::string NexradFileRequest::radar_id() const
|
||||||
|
{
|
||||||
|
return p->radarId_;
|
||||||
|
}
|
||||||
|
|
||||||
|
std::string NexradFileRequest::site_id() const
|
||||||
|
{
|
||||||
|
return p->siteId_;
|
||||||
|
}
|
||||||
|
|
||||||
|
std::chrono::system_clock::time_point NexradFileRequest::time() const
|
||||||
|
{
|
||||||
|
return p->time_;
|
||||||
|
}
|
||||||
|
|
||||||
void NexradFileRequest::set_nexrad_file(
|
void NexradFileRequest::set_nexrad_file(
|
||||||
std::shared_ptr<wsr88d::NexradFile> nexradFile)
|
std::shared_ptr<wsr88d::NexradFile> nexradFile)
|
||||||
{
|
{
|
||||||
p->nexradFile_ = nexradFile;
|
p->nexradFile_ = nexradFile;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void NexradFileRequest::set_radar_id(const std::string& radarId)
|
||||||
|
{
|
||||||
|
p->radarId_ = radarId;
|
||||||
|
}
|
||||||
|
|
||||||
|
void NexradFileRequest::set_site_id(const std::string& siteId)
|
||||||
|
{
|
||||||
|
p->siteId_ = siteId;
|
||||||
|
}
|
||||||
|
|
||||||
|
void NexradFileRequest::set_time(std::chrono::system_clock::time_point time)
|
||||||
|
{
|
||||||
|
p->time_ = time;
|
||||||
|
}
|
||||||
|
|
||||||
} // namespace request
|
} // namespace request
|
||||||
} // namespace qt
|
} // namespace qt
|
||||||
} // namespace scwx
|
} // namespace scwx
|
||||||
|
|
|
||||||
|
|
@ -2,6 +2,7 @@
|
||||||
|
|
||||||
#include <scwx/wsr88d/nexrad_file.hpp>
|
#include <scwx/wsr88d/nexrad_file.hpp>
|
||||||
|
|
||||||
|
#include <chrono>
|
||||||
#include <memory>
|
#include <memory>
|
||||||
|
|
||||||
#include <QObject>
|
#include <QObject>
|
||||||
|
|
@ -24,8 +25,14 @@ public:
|
||||||
~NexradFileRequest();
|
~NexradFileRequest();
|
||||||
|
|
||||||
std::shared_ptr<wsr88d::NexradFile> nexrad_file() const;
|
std::shared_ptr<wsr88d::NexradFile> nexrad_file() const;
|
||||||
|
std::string radar_id() const;
|
||||||
|
std::string site_id() const;
|
||||||
|
std::chrono::system_clock::time_point time() const;
|
||||||
|
|
||||||
void set_nexrad_file(std::shared_ptr<wsr88d::NexradFile> nexradFile);
|
void set_nexrad_file(std::shared_ptr<wsr88d::NexradFile> nexradFile);
|
||||||
|
void set_radar_id(const std::string& radarId);
|
||||||
|
void set_site_id(const std::string& siteId);
|
||||||
|
void set_time(std::chrono::system_clock::time_point time);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
std::unique_ptr<NexradFileRequestImpl> p;
|
std::unique_ptr<NexradFileRequestImpl> p;
|
||||||
|
|
|
||||||
|
|
@ -87,6 +87,8 @@ bool Level3File::LoadData(std::istream& is)
|
||||||
<< logPrefix_ << "Date/Time: " << p->wmoHeader_->date_time();
|
<< logPrefix_ << "Date/Time: " << p->wmoHeader_->date_time();
|
||||||
BOOST_LOG_TRIVIAL(debug)
|
BOOST_LOG_TRIVIAL(debug)
|
||||||
<< logPrefix_ << "Category: " << p->wmoHeader_->product_category();
|
<< logPrefix_ << "Category: " << p->wmoHeader_->product_category();
|
||||||
|
BOOST_LOG_TRIVIAL(debug)
|
||||||
|
<< logPrefix_ << "Site ID: " << p->wmoHeader_->product_designator();
|
||||||
|
|
||||||
// If the header is compressed
|
// If the header is compressed
|
||||||
if (is.peek() == 0x78)
|
if (is.peek() == 0x78)
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue