mirror of
https://github.com/subsurface/subsurface.git
synced 2025-01-31 21:43:23 +00:00
Location service: store locations in settings
This is rather simplistic and will clutter the settings. I'm not convinced this is the BEST way to do this, but it's a rather straight forward way to get persistant storage of the location fixes. Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
This commit is contained in:
parent
cd7d6ae6e5
commit
62f7ec11d7
4 changed files with 22 additions and 14 deletions
|
@ -1,23 +1,19 @@
|
||||||
#include "qt-mobile/gpslocation.h"
|
#include "qt-mobile/gpslocation.h"
|
||||||
#include "qt-mobile/qmlmanager.h"
|
#include "qt-mobile/qmlmanager.h"
|
||||||
|
#include "pref.h"
|
||||||
|
#include "dive.h"
|
||||||
|
#include <time.h>
|
||||||
#include <QDebug>
|
#include <QDebug>
|
||||||
|
#include <QVariant>
|
||||||
|
|
||||||
GpsLocation::GpsLocation(QObject *parent)
|
GpsLocation::GpsLocation(QObject *parent)
|
||||||
{
|
{
|
||||||
|
QSettings *geoSettings = new QSettings();
|
||||||
gpsSource = QGeoPositionInfoSource::createDefaultSource(parent);
|
gpsSource = QGeoPositionInfoSource::createDefaultSource(parent);
|
||||||
if (gpsSource != 0) {
|
if (gpsSource != 0) {
|
||||||
QString msg = QString("have position source %1").arg(gpsSource->sourceName());
|
QString msg = QString("have position source %1").arg(gpsSource->sourceName());
|
||||||
connect(gpsSource, SIGNAL(positionUpdated(QGeoPositionInfo)), this, SLOT(newPosition(QGeoPositionInfo)));
|
connect(gpsSource, SIGNAL(positionUpdated(QGeoPositionInfo)), this, SLOT(newPosition(QGeoPositionInfo)));
|
||||||
connect(gpsSource, SIGNAL(updateTimeout()), this, SLOT(updateTimeout()));
|
connect(gpsSource, SIGNAL(updateTimeout()), this, SLOT(updateTimeout()));
|
||||||
lastPos = gpsSource->lastKnownPosition();
|
|
||||||
gpsSource->startUpdates();
|
|
||||||
QGeoCoordinate lastCoord = lastPos.coordinate();
|
|
||||||
if (lastCoord.isValid()) {
|
|
||||||
status(msg + lastCoord.toString());
|
|
||||||
} else {
|
|
||||||
status(msg + "invalid last position");
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
status("don't have GPS source");
|
status("don't have GPS source");
|
||||||
}
|
}
|
||||||
|
@ -25,9 +21,11 @@ GpsLocation::GpsLocation(QObject *parent)
|
||||||
|
|
||||||
void GpsLocation::serviceEnable(bool toggle)
|
void GpsLocation::serviceEnable(bool toggle)
|
||||||
{
|
{
|
||||||
if (!gpsSource)
|
if (!gpsSource) {
|
||||||
|
if (toggle)
|
||||||
|
status("Can't start location service, no location source available");
|
||||||
return;
|
return;
|
||||||
|
}
|
||||||
if (toggle) {
|
if (toggle) {
|
||||||
gpsSource->startUpdates();
|
gpsSource->startUpdates();
|
||||||
status("Starting Subsurface GPS service");
|
status("Starting Subsurface GPS service");
|
||||||
|
@ -41,6 +39,13 @@ void GpsLocation::newPosition(QGeoPositionInfo pos)
|
||||||
{
|
{
|
||||||
QString msg("received new position %1");
|
QString msg("received new position %1");
|
||||||
status(qPrintable(msg.arg(pos.coordinate().toString())));
|
status(qPrintable(msg.arg(pos.coordinate().toString())));
|
||||||
|
geoSettings.beginGroup("locations");
|
||||||
|
int nr = geoSettings.value("count", 0).toInt();
|
||||||
|
geoSettings.setValue("count", nr + 1);
|
||||||
|
geoSettings.setValue(QString("gpsFix%1_time").arg(nr), pos.timestamp().toTime_t());
|
||||||
|
geoSettings.setValue(QString("gpsFix%1_lat").arg(nr), rint(pos.coordinate().latitude() * 1000000));
|
||||||
|
geoSettings.setValue(QString("gpsFix%1_lon").arg(nr), rint(pos.coordinate().longitude() * 1000000));
|
||||||
|
geoSettings.sync();
|
||||||
}
|
}
|
||||||
|
|
||||||
void GpsLocation::updateTimeout()
|
void GpsLocation::updateTimeout()
|
||||||
|
|
|
@ -1,10 +1,12 @@
|
||||||
#ifndef GPSLOCATION_H
|
#ifndef GPSLOCATION_H
|
||||||
#define GPSLOCATION_H
|
#define GPSLOCATION_H
|
||||||
|
|
||||||
|
#include "units.h"
|
||||||
#include <QObject>
|
#include <QObject>
|
||||||
#include <QGeoCoordinate>
|
#include <QGeoCoordinate>
|
||||||
#include <QGeoPositionInfoSource>
|
#include <QGeoPositionInfoSource>
|
||||||
#include <QGeoPositionInfo>
|
#include <QGeoPositionInfo>
|
||||||
|
#include <QSettings>
|
||||||
|
|
||||||
class GpsLocation : QObject
|
class GpsLocation : QObject
|
||||||
{
|
{
|
||||||
|
@ -16,6 +18,7 @@ private:
|
||||||
QGeoPositionInfo lastPos;
|
QGeoPositionInfo lastPos;
|
||||||
QGeoPositionInfoSource *gpsSource;
|
QGeoPositionInfoSource *gpsSource;
|
||||||
void status(QString msg);
|
void status(QString msg);
|
||||||
|
QSettings geoSettings;
|
||||||
|
|
||||||
signals:
|
signals:
|
||||||
|
|
||||||
|
|
|
@ -74,7 +74,7 @@ ApplicationWindow {
|
||||||
checkable: true
|
checkable: true
|
||||||
checked: manager.locationServiceEnabled
|
checked: manager.locationServiceEnabled
|
||||||
onToggled: {
|
onToggled: {
|
||||||
manager.setLocationServiceEnabled(checked);
|
manager.locationServiceEnabled = checked;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -15,11 +15,11 @@ void qmlUiShowMessage(const char *errorString)
|
||||||
qDebug() << "couldn't set property messageText to" << errorString;
|
qDebug() << "couldn't set property messageText to" << errorString;
|
||||||
}
|
}
|
||||||
|
|
||||||
QMLManager::QMLManager()
|
QMLManager::QMLManager() :
|
||||||
|
m_locationServiceEnabled(false)
|
||||||
{
|
{
|
||||||
// create location manager service
|
// create location manager service
|
||||||
locationProvider = new GpsLocation(this);
|
locationProvider = new GpsLocation(this);
|
||||||
setLocationServiceEnabled(false);
|
|
||||||
|
|
||||||
// Initialize cloud credentials.
|
// Initialize cloud credentials.
|
||||||
setCloudUserName(prefs.cloud_storage_email);
|
setCloudUserName(prefs.cloud_storage_email);
|
||||||
|
|
Loading…
Add table
Reference in a new issue