mirror of
https://github.com/ciphervance/supercell-wx.git
synced 2025-10-30 19:10:06 +00:00
Handle query string in supplied placefile URL, and improve error messages
This commit is contained in:
parent
dcace24579
commit
6f44d9f4e0
1 changed files with 51 additions and 8 deletions
|
|
@ -7,9 +7,11 @@
|
|||
|
||||
#include <QDir>
|
||||
#include <QUrl>
|
||||
#include <boost/algorithm/string.hpp>
|
||||
#include <boost/asio/post.hpp>
|
||||
#include <boost/asio/steady_timer.hpp>
|
||||
#include <boost/asio/thread_pool.hpp>
|
||||
#include <boost/tokenizer.hpp>
|
||||
#include <cpr/cpr.h>
|
||||
|
||||
namespace scwx
|
||||
|
|
@ -314,21 +316,62 @@ void PlacefileRecord::Update()
|
|||
}
|
||||
else
|
||||
{
|
||||
// TODO: Update hard coded parameters
|
||||
auto response = cpr::Get(
|
||||
cpr::Url {name},
|
||||
cpr::Header {{"User-Agent", "Supercell Wx/0.2.2"}},
|
||||
cpr::Parameters {
|
||||
{"version", "1.2"}, {"lat", "38.699"}, {"lon", "-90.683"}});
|
||||
std::string decodedUrl {name};
|
||||
auto queryPos = decodedUrl.find('?');
|
||||
if (queryPos != std::string::npos)
|
||||
{
|
||||
decodedUrl.erase(queryPos);
|
||||
}
|
||||
|
||||
if (response.status_code == cpr::status::HTTP_OK)
|
||||
// TODO: Update hard coded parameters
|
||||
auto parameters = cpr::Parameters {
|
||||
{"version", "1.2"}, {"lat", "38.699"}, {"lon", "-90.683"}};
|
||||
|
||||
// Iterate through each query parameter in the URL
|
||||
if (url.hasQuery())
|
||||
{
|
||||
auto query = url.query(QUrl::ComponentFormattingOption::FullyEncoded)
|
||||
.toStdString();
|
||||
|
||||
boost::char_separator<char> delimiter("&");
|
||||
boost::tokenizer tokens(query, delimiter);
|
||||
|
||||
for (auto& token : tokens)
|
||||
{
|
||||
std::vector<std::string> split {};
|
||||
boost::split(split, token, boost::is_any_of("="));
|
||||
if (split.size() >= 2)
|
||||
{
|
||||
// Token is a key=value parameter
|
||||
parameters.Add({split[0], split[1]});
|
||||
}
|
||||
else
|
||||
{
|
||||
// Token is a single key with no value
|
||||
parameters.Add({token, {}});
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Send HTTP GET request
|
||||
// TODO: Update hard coded User-Agent
|
||||
auto response =
|
||||
cpr::Get(cpr::Url {decodedUrl},
|
||||
cpr::Header {{"User-Agent", "SupercellWx/0.2.2"}},
|
||||
parameters);
|
||||
|
||||
if (cpr::status::is_success(response.status_code))
|
||||
{
|
||||
std::istringstream responseBody {response.text};
|
||||
updatedPlacefile = gr::Placefile::Load(name, responseBody);
|
||||
}
|
||||
else if (response.status_code == 0)
|
||||
{
|
||||
logger_->error("Error loading placefile: {}", response.error.message);
|
||||
}
|
||||
else
|
||||
{
|
||||
logger_->warn("Error loading placefile: {}", response.error.message);
|
||||
logger_->error("Error loading placefile: {}", response.status_line);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue