1
0
Fork 0
mirror of https://github.com/subsurface/subsurface.git synced 2025-02-19 22:16:15 +00:00

Location service: make persistant storage work correctly

Ouch that's an embarrassing bug. Oh well. Shift happens.

Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
This commit is contained in:
Dirk Hohndel 2015-11-13 11:55:39 -08:00
parent 6a70793ba8
commit fb06d27593
2 changed files with 17 additions and 17 deletions

View file

@ -10,8 +10,8 @@
GpsLocation::GpsLocation(QObject *parent)
{
// create a QSettings object that's separate from the main application settings
QSettings *geoSettings = new QSettings(QSettings::NativeFormat, QSettings::UserScope,
QString("org.subsurfacedivelog"), QString("subsurfacelocation"), this);
geoSettings = new QSettings(QSettings::NativeFormat, QSettings::UserScope,
QString("org.subsurfacedivelog"), QString("subsurfacelocation"), this);
gpsSource = QGeoPositionInfoSource::createDefaultSource(parent);
if (gpsSource != 0) {
QString msg = QString("have position source %1").arg(gpsSource->sourceName());
@ -47,19 +47,19 @@ void GpsLocation::newPosition(QGeoPositionInfo pos)
QGeoCoordinate lastCoord;
QString msg("received new position %1");
status(qPrintable(msg.arg(pos.coordinate().toString())));
int nr = geoSettings.value("count", 0).toInt();
int nr = geoSettings->value("count", 0).toInt();
if (nr) {
lastCoord.setLatitude(geoSettings.value(QString("gpsFix%1_lat").arg(nr)).toInt() / 1000000.0);
lastCoord.setLongitude(geoSettings.value(QString("gpsFix%1_lon").arg(nr)).toInt() / 1000000.0);
time_t lastTime = geoSettings.value(QString("gpsFix%1_time").arg(nr)).toULongLong();
lastCoord.setLatitude(geoSettings->value(QString("gpsFix%1_lat").arg(nr)).toInt() / 1000000.0);
lastCoord.setLongitude(geoSettings->value(QString("gpsFix%1_lon").arg(nr)).toInt() / 1000000.0);
time_t lastTime = geoSettings->value(QString("gpsFix%1_time").arg(nr)).toULongLong();
}
// if we have no record stored or if at least 10 minutes have passed or we moved at least 200m
if (!nr || pos.timestamp().toTime_t() > lastTime + MINTIME || lastCoord.distanceTo(pos.coordinate()) > MINDIST) {
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();
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();
}
}
@ -76,7 +76,7 @@ void GpsLocation::status(QString msg)
int GpsLocation::getGpsNum() const
{
return geoSettings.value("count", 0).toInt();
return geoSettings->value("count", 0).toInt();
}
struct gpsTracker {
@ -98,16 +98,16 @@ bool GpsLocation::applyLocations()
int i;
bool changed = false;
int last = 0;
int cnt = geoSettings.value("count", 0).toInt();
int cnt = geoSettings->value("count", 0).toInt();
if (cnt == 0)
return false;
// create a table with the GPS information
struct gpsTracker *gpsTable = (struct gpsTracker *)calloc(cnt, sizeof(struct gpsTracker));
for (int i = 0; i < cnt; i++) {
gpsTable[i].latitude.udeg = geoSettings.value(QString("gpsFix%1_lat").arg(i)).toInt();
gpsTable[i].longitude.udeg = geoSettings.value(QString("gpsFix%1_lon").arg(i)).toInt();
gpsTable[i].when = geoSettings.value(QString("gpsFix%1_time").arg(i)).toULongLong();
gpsTable[i].latitude.udeg = geoSettings->value(QString("gpsFix%1_lat").arg(i)).toInt();
gpsTable[i].longitude.udeg = geoSettings->value(QString("gpsFix%1_lon").arg(i)).toInt();
gpsTable[i].when = geoSettings->value(QString("gpsFix%1_time").arg(i)).toULongLong();
}
// now walk the dive table and see if we can fill in missing gps data

View file

@ -20,7 +20,7 @@ private:
QGeoPositionInfo lastPos;
QGeoPositionInfoSource *gpsSource;
void status(QString msg);
QSettings geoSettings;
QSettings *geoSettings;
signals: