Commit 512301be authored by Jonas Vautherin's avatar Jonas Vautherin

Remove boost dependency from airmap public interface

parent a15b46b8
...@@ -153,28 +153,23 @@ contains (DEFINES, DISABLE_AIRMAP) { ...@@ -153,28 +153,23 @@ contains (DEFINES, DISABLE_AIRMAP) {
message("Skipping support for AirMap (manual override from user_config.pri)") message("Skipping support for AirMap (manual override from user_config.pri)")
} else { } else {
AIRMAPD_PATH = $$PWD/libs/airmapd AIRMAPD_PATH = $$PWD/libs/airmapd
# Temporary until we get rid of boost MacBuild|iOSBuild {
exists($${AIRMAPD_PATH}/include/boost) { exists($${AIRMAPD_PATH}/macOS/Qt.5.9) {
MacBuild|iOSBuild { message("Including support for AirMap for macOS")
exists($${AIRMAPD_PATH}/macOS/Qt.5.9) { LIBS += -L$${AIRMAPD_PATH}/macOS/Qt.5.9 -lairmap-qt
message("Including support for AirMap for macOS") DEFINES += QGC_AIRMAP_ENABLED
LIBS += -L$${AIRMAPD_PATH}/macOS/Qt.5.9 -lairmap-qt
DEFINES += QGC_AIRMAP_ENABLED
}
} else:LinuxBuild {
exists($${AIRMAPD_PATH}/linux/Qt.5.9) {
message("Including support for AirMap for Linux")
LIBS += -L$${AIRMAPD_PATH}/linux/Qt.5.9 -lairmap-qt
DEFINES += QGC_AIRMAP_ENABLED
}
} else {
message("Skipping support for Airmap (unsupported platform)")
} }
contains (DEFINES, QGC_AIRMAP_ENABLED) { } else:LinuxBuild {
INCLUDEPATH += \ exists($${AIRMAPD_PATH}/linux/Qt.5.9) {
$${AIRMAPD_PATH}/include message("Including support for AirMap for Linux")
LIBS += -L$${AIRMAPD_PATH}/linux/Qt.5.9 -lairmap-qt
DEFINES += QGC_AIRMAP_ENABLED
} }
} else { } else {
message("Missing boost for AirMap. Excluding AirMap support") message("Skipping support for Airmap (unsupported platform)")
}
contains (DEFINES, QGC_AIRMAP_ENABLED) {
INCLUDEPATH += \
$${AIRMAPD_PATH}/include
} }
} }
#ifndef AIRMAP_DATE_TIME_H_ #ifndef AIRMAP_DATE_TIME_H_
#define AIRMAP_DATE_TIME_H_ #define AIRMAP_DATE_TIME_H_
#include <boost/date_time.hpp>
#include <boost/date_time/posix_time/posix_time.hpp>
#include <cstdint>
#include <memory> #include <memory>
#include <string> #include <string>
namespace airmap { namespace airmap {
class DateTime;
template <typename Tag>
class Duration;
namespace detail {
class Duration;
} // namespace detail
namespace tag {
struct Hours {};
struct Minutes {};
struct Seconds {};
struct Milliseconds {};
struct Microseconds {};
} // namespace tag
using Hours = Duration<tag::Hours>;
using Minutes = Duration<tag::Minutes>;
using Seconds = Duration<tag::Seconds>;
using Milliseconds = Duration<tag::Milliseconds>;
using Microseconds = Duration<tag::Microseconds>;
/// Clock marks the reference for time measurements. /// Clock marks the reference for time measurements.
using Clock = boost::posix_time::microsec_clock; class Clock {
public:
static DateTime universal_time();
static DateTime local_time();
};
namespace boost_iso {
DateTime datetime(const std::string &iso_time);
std::string to_iso_string(const DateTime &);
} // namespace boost_iso
/// DateTime marks a specific point in time, in reference to Clock. /// DateTime marks a specific point in time, in reference to Clock.
using DateTime = boost::posix_time::ptime; class DateTime {
using Hours = boost::posix_time::hours; public:
using Minutes = boost::posix_time::minutes; DateTime();
using Seconds = boost::posix_time::seconds; ~DateTime();
using Milliseconds = boost::posix_time::milliseconds; DateTime(DateTime const &);
using Microseconds = boost::posix_time::microseconds; DateTime(DateTime &&);
DateTime &operator=(const DateTime &);
DateTime &operator=(DateTime &&);
DateTime operator+(const detail::Duration &) const;
Microseconds operator-(const DateTime &) const;
bool operator==(const DateTime &) const;
bool operator!=(const DateTime &) const;
friend std::istream &operator>>(std::istream &, DateTime &);
friend std::ostream &operator<<(std::ostream &, const DateTime &);
DateTime date() const;
Microseconds time_of_day() const;
private:
struct Impl;
std::unique_ptr<Impl> impl;
explicit DateTime(std::unique_ptr<Impl> &&);
friend DateTime Clock::universal_time();
friend DateTime Clock::local_time();
friend DateTime boost_iso::datetime(const std::string &iso_time);
friend std::string boost_iso::to_iso_string(const DateTime &datetime);
};
Hours hours(int64_t raw);
Minutes minutes(int64_t raw);
Seconds seconds(int64_t raw);
Milliseconds milliseconds(int64_t raw);
Microseconds microseconds(int64_t raw);
namespace detail {
class Duration {
public:
Duration();
~Duration();
Duration(Duration const &old);
Duration &operator=(const Duration &);
uint64_t total_seconds() const;
uint64_t total_milliseconds() const;
uint64_t total_microseconds() const;
uint64_t hours() const;
private:
struct Impl;
std::unique_ptr<Impl> impl;
friend DateTime DateTime::operator+(const detail::Duration &) const;
friend Microseconds DateTime::operator-(const DateTime &) const;
friend Microseconds DateTime::time_of_day() const;
friend Hours airmap::hours(int64_t raw);
friend Minutes airmap::minutes(int64_t raw);
friend Seconds airmap::seconds(int64_t raw);
friend Milliseconds airmap::milliseconds(int64_t raw);
friend Microseconds airmap::microseconds(int64_t raw);
};
} // namespace detail
template <typename Tag>
class Duration : public detail::Duration {};
/// milliseconds_since_epoch returns the milliseconds that elapsed since the UNIX epoch. /// milliseconds_since_epoch returns the milliseconds that elapsed since the UNIX epoch.
std::uint64_t milliseconds_since_epoch(const DateTime& dt); uint64_t milliseconds_since_epoch(const DateTime &dt);
/// microseconds_since_epoch returns the microseconds that elapsed since the UNIX epoch. /// microseconds_since_epoch returns the microseconds that elapsed since the UNIX epoch.
std::uint64_t microseconds_since_epoch(const DateTime& dt); uint64_t microseconds_since_epoch(const DateTime &dt);
/// from_seconds_since_epoch returns a DateTime. /// from_seconds_since_epoch returns a DateTime.
DateTime from_seconds_since_epoch(const Seconds& s); DateTime from_seconds_since_epoch(const Seconds &s);
/// from_milliseconds_since_epoch returns a DateTime. /// from_milliseconds_since_epoch returns a DateTime.
DateTime from_milliseconds_since_epoch(const Milliseconds& ms); DateTime from_milliseconds_since_epoch(const Milliseconds &ms);
/// from_microseconds_since_epoch returns a DateTime. /// from_microseconds_since_epoch returns a DateTime.
DateTime from_microseconds_since_epoch(const Microseconds& us); DateTime from_microseconds_since_epoch(const Microseconds &us);
// moves the datetime forward to the specified hour // moves the datetime forward to the specified hour
DateTime move_to_hour(const DateTime& dt, int hour); DateTime move_to_hour(const DateTime &dt, uint64_t hour);
namespace iso8601 { namespace iso8601 {
/// parse parses a DateTime instance from the string s in iso8601 format. /// parse parses a DateTime instance from the string s in iso8601 format.
DateTime parse(const std::string& s); DateTime parse(const std::string &s);
/// generate returns a string in iso8601 corresponding to 'dt'. /// generate returns a string in iso8601 corresponding to 'dt'.
std::string generate(const DateTime& dt); std::string generate(const DateTime &dt);
} // namespace iso8601 } // namespace iso8601
......
...@@ -11,6 +11,7 @@ ...@@ -11,6 +11,7 @@
#include "AirspaceRestriction.h" #include "AirspaceRestriction.h"
#include "AirMapManager.h" #include "AirMapManager.h"
#include <cmath>
#include <QTimer> #include <QTimer>
#include "airmap/airspaces.h" #include "airmap/airspaces.h"
...@@ -73,7 +74,7 @@ AirMapAdvisoryManager::_requestAdvisories() ...@@ -73,7 +74,7 @@ AirMapAdvisoryManager::_requestAdvisories()
params.types = Airspace::Type::all; params.types = Airspace::Type::all;
params.weather = false; params.weather = false;
double diagonal = _lastROI.pointNW.distanceTo(_lastROI.pointSE); double diagonal = _lastROI.pointNW.distanceTo(_lastROI.pointSE);
params.buffer = fmax(fmin(diagonal, 10000.0), 500.0); params.buffer = std::fmax(std::fmin(diagonal, 10000.0), 500.0);
params.flight_date_time = Clock::universal_time(); params.flight_date_time = Clock::universal_time();
std::weak_ptr<LifetimeChecker> isAlive(_instance); std::weak_ptr<LifetimeChecker> isAlive(_instance);
_shared.client()->status().get_status_by_point(params, [this, isAlive](const Status::GetStatus::Result& result) { _shared.client()->status().get_status_by_point(params, [this, isAlive](const Status::GetStatus::Result& result) {
......
...@@ -137,13 +137,13 @@ void ...@@ -137,13 +137,13 @@ void
AirMapFlightPlanManager::setFlightStartTime(QDateTime start) AirMapFlightPlanManager::setFlightStartTime(QDateTime start)
{ {
quint64 startt = start.toUTC().toMSecsSinceEpoch(); quint64 startt = start.toUTC().toMSecsSinceEpoch();
if(_flightPlan.start_time != airmap::from_milliseconds_since_epoch(airmap::Milliseconds{(long long)startt})) { if(_flightPlan.start_time != airmap::from_milliseconds_since_epoch(airmap::milliseconds((long long)startt))) {
//-- Can't start in the past //-- Can't start in the past
if(start < QDateTime::currentDateTime()) { if(start < QDateTime::currentDateTime()) {
start = QDateTime::currentDateTime().addSecs(5 * 60); start = QDateTime::currentDateTime().addSecs(5 * 60);
startt = start.toUTC().toMSecsSinceEpoch(); startt = start.toUTC().toMSecsSinceEpoch();
} }
_flightPlan.start_time = airmap::from_milliseconds_since_epoch(airmap::Milliseconds{(long long)startt}); _flightPlan.start_time = airmap::from_milliseconds_since_epoch(airmap::milliseconds((long long)startt));
emit flightStartTimeChanged(); emit flightStartTimeChanged();
} }
} }
...@@ -153,13 +153,13 @@ void ...@@ -153,13 +153,13 @@ void
AirMapFlightPlanManager::setFlightEndTime(QDateTime end) AirMapFlightPlanManager::setFlightEndTime(QDateTime end)
{ {
quint64 endt = end.toUTC().toMSecsSinceEpoch(); quint64 endt = end.toUTC().toMSecsSinceEpoch();
if(_flightPlan.end_time != airmap::from_milliseconds_since_epoch(airmap::Milliseconds{(long long)endt})) { if(_flightPlan.end_time != airmap::from_milliseconds_since_epoch(airmap::milliseconds((long long)endt))) {
//-- End has to be after start //-- End has to be after start
if(end < flightStartTime()) { if(end < flightStartTime()) {
end = flightStartTime().addSecs(30 * 60); end = flightStartTime().addSecs(30 * 60);
endt = end.toUTC().toMSecsSinceEpoch(); endt = end.toUTC().toMSecsSinceEpoch();
} }
_flightPlan.end_time = airmap::from_milliseconds_since_epoch(airmap::Milliseconds{(long long)endt}); _flightPlan.end_time = airmap::from_milliseconds_since_epoch(airmap::milliseconds((long long)endt));
emit flightEndTimeChanged(); emit flightEndTimeChanged();
} }
} }
...@@ -488,8 +488,8 @@ AirMapFlightPlanManager::_uploadFlightPlan() ...@@ -488,8 +488,8 @@ AirMapFlightPlanManager::_uploadFlightPlan()
params.pilot.id = _pilotID.toStdString(); params.pilot.id = _pilotID.toStdString();
quint64 start = QDateTime::currentDateTimeUtc().toMSecsSinceEpoch(); quint64 start = QDateTime::currentDateTimeUtc().toMSecsSinceEpoch();
quint64 end = start + 60 * 30 * 1000; quint64 end = start + 60 * 30 * 1000;
params.start_time = airmap::from_milliseconds_since_epoch(airmap::Milliseconds{(long long)start}); params.start_time = airmap::from_milliseconds_since_epoch(airmap::milliseconds((long long)start));
params.end_time = airmap::from_milliseconds_since_epoch(airmap::Milliseconds{(long long)end}); params.end_time = airmap::from_milliseconds_since_epoch(airmap::milliseconds((long long)end));
//-- Rules & Features //-- Rules & Features
_updateRulesAndFeatures(params.rulesets, params.features); _updateRulesAndFeatures(params.rulesets, params.features);
//-- Geometry: polygon //-- Geometry: polygon
...@@ -856,8 +856,8 @@ AirMapFlightPlanManager::_loadFlightList() ...@@ -856,8 +856,8 @@ AirMapFlightPlanManager::_loadFlightList()
params.authorization = login_token.toStdString(); params.authorization = login_token.toStdString();
quint64 start = _rangeStart.toUTC().toMSecsSinceEpoch(); quint64 start = _rangeStart.toUTC().toMSecsSinceEpoch();
quint64 end = _rangeEnd.toUTC().toMSecsSinceEpoch(); quint64 end = _rangeEnd.toUTC().toMSecsSinceEpoch();
params.start_after = airmap::from_milliseconds_since_epoch(airmap::Milliseconds{(long long)start}); params.start_after = airmap::from_milliseconds_since_epoch(airmap::milliseconds((long long)start));
params.start_before = airmap::from_milliseconds_since_epoch(airmap::Milliseconds{(long long)end}); params.start_before = airmap::from_milliseconds_since_epoch(airmap::milliseconds((long long)end));
params.limit = 250; params.limit = 250;
params.pilot_id = _pilotID.toStdString(); params.pilot_id = _pilotID.toStdString();
_shared.client()->flights().search(params, [this, isAlive](const Flights::Search::Result& result) { _shared.client()->flights().search(params, [this, isAlive](const Flights::Search::Result& result) {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment