Position manager updates for tracking

This commit is contained in:
Dan Paulat 2023-11-23 08:06:34 -06:00
parent 400db66f09
commit 18f500fe5f
3 changed files with 29 additions and 17 deletions

View file

@ -35,7 +35,6 @@
#include <boost/asio/post.hpp> #include <boost/asio/post.hpp>
#include <boost/asio/thread_pool.hpp> #include <boost/asio/thread_pool.hpp>
#include <boost/uuid/random_generator.hpp>
#include <QDesktopServices> #include <QDesktopServices>
#include <QFileDialog> #include <QFileDialog>
#include <QMessageBox> #include <QMessageBox>
@ -63,7 +62,6 @@ class MainWindowImpl : public QObject
public: public:
explicit MainWindowImpl(MainWindow* mainWindow) : explicit MainWindowImpl(MainWindow* mainWindow) :
uuid_ {boost::uuids::random_generator()()},
mainWindow_ {mainWindow}, mainWindow_ {mainWindow},
settings_ {}, settings_ {},
activeMap_ {nullptr}, activeMap_ {nullptr},
@ -124,7 +122,7 @@ public:
if (settings::GeneralSettings::Instance().track_location().GetValue()) if (settings::GeneralSettings::Instance().track_location().GetValue())
{ {
positionManager_->TrackLocation(uuid_, true); positionManager_->TrackLocation(true);
} }
} }
~MainWindowImpl() { threadPool_.join(); } ~MainWindowImpl() { threadPool_.join(); }
@ -155,8 +153,6 @@ public:
boost::asio::thread_pool threadPool_ {1u}; boost::asio::thread_pool threadPool_ {1u};
boost::uuids::uuid uuid_;
MainWindow* mainWindow_; MainWindow* mainWindow_;
QMapLibreGL::Settings settings_; QMapLibreGL::Settings settings_;
map::MapProvider mapProvider_; map::MapProvider mapProvider_;
@ -872,13 +868,8 @@ void MainWindowImpl::ConnectOtherSignals()
settings::GeneralSettings::Instance().track_location().StageValue( settings::GeneralSettings::Instance().track_location().StageValue(
trackingEnabled); trackingEnabled);
for (std::size_t i = 0; i < maps_.size(); ++i) // Turn on location tracking
{ positionManager_->TrackLocation(trackingEnabled);
// maps_[i]->SetTrackLocation(trackingEnabled);
}
// Turn on location tracking (location manager)
positionManager_->TrackLocation(uuid_, trackingEnabled);
}); });
connect(level2ProductsWidget_, connect(level2ProductsWidget_,
&ui::Level2ProductsWidget::RadarProductSelected, &ui::Level2ProductsWidget::RadarProductSelected,

View file

@ -4,6 +4,7 @@
#include <set> #include <set>
#include <boost/uuid/random_generator.hpp>
#include <QGeoPositionInfoSource> #include <QGeoPositionInfoSource>
namespace scwx namespace scwx
@ -19,7 +20,8 @@ static const auto logger_ = scwx::util::Logger::Create(logPrefix_);
class PositionManager::Impl class PositionManager::Impl
{ {
public: public:
explicit Impl(PositionManager* self) : self_ {self} explicit Impl(PositionManager* self) :
self_ {self}, trackingUuid_ {boost::uuids::random_generator()()}
{ {
// TODO: macOS requires permission // TODO: macOS requires permission
geoPositionInfoSource_ = geoPositionInfoSource_ =
@ -55,6 +57,9 @@ public:
PositionManager* self_; PositionManager* self_;
boost::uuids::uuid trackingUuid_;
bool trackingEnabled_ {false};
std::set<boost::uuids::uuid> uuids_ {}; std::set<boost::uuids::uuid> uuids_ {};
QGeoPositionInfoSource* geoPositionInfoSource_ {}; QGeoPositionInfoSource* geoPositionInfoSource_ {};
@ -69,15 +74,20 @@ QGeoPositionInfo PositionManager::position() const
return p->position_; return p->position_;
} }
void PositionManager::TrackLocation(boost::uuids::uuid uuid, bool PositionManager::IsLocationTracked()
bool trackingEnabled) {
return p->trackingEnabled_;
}
void PositionManager::EnablePositionUpdates(boost::uuids::uuid uuid,
bool enabled)
{ {
if (p->geoPositionInfoSource_ == nullptr) if (p->geoPositionInfoSource_ == nullptr)
{ {
return; return;
} }
if (trackingEnabled) if (enabled)
{ {
if (p->uuids_.empty()) if (p->uuids_.empty())
{ {
@ -97,6 +107,13 @@ void PositionManager::TrackLocation(boost::uuids::uuid uuid,
} }
} }
void PositionManager::TrackLocation(bool trackingEnabled)
{
p->trackingEnabled_ = trackingEnabled;
EnablePositionUpdates(p->trackingUuid_, trackingEnabled);
Q_EMIT LocationTrackingChanged(trackingEnabled);
}
std::shared_ptr<PositionManager> PositionManager::Instance() std::shared_ptr<PositionManager> PositionManager::Instance()
{ {
static std::weak_ptr<PositionManager> positionManagerReference_ {}; static std::weak_ptr<PositionManager> positionManagerReference_ {};

View file

@ -25,11 +25,15 @@ public:
QGeoPositionInfo position() const; QGeoPositionInfo position() const;
void TrackLocation(boost::uuids::uuid uuid, bool trackingEnabled); bool IsLocationTracked();
void EnablePositionUpdates(boost::uuids::uuid uuid, bool enabled);
void TrackLocation(bool trackingEnabled);
static std::shared_ptr<PositionManager> Instance(); static std::shared_ptr<PositionManager> Instance();
signals: signals:
void LocationTrackingChanged(bool trackingEnabled);
void PositionUpdated(const QGeoPositionInfo& info); void PositionUpdated(const QGeoPositionInfo& info);
private: private: