mobile/GPS: fix two errors in the GPS handling

First, the time zone adjustment was wrong - this as written could only
ever have worked in UTC or by pure chance.

Second, the order of alerting the UI of the availability of a GPS fix
was also incorrect creating a race between the UI and our data
structures.

Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
This commit is contained in:
Dirk Hohndel 2021-01-13 11:35:51 -08:00
parent 4454cf0381
commit 702d09df9f
3 changed files with 5 additions and 4 deletions

View file

@ -2,6 +2,7 @@
- undo: reset dive-mode on undo of set-point addition
- desktop: complete rewrite of the statistics code, significantly expanding capabilities
- desktop: add preferences option to disable default cylinder types
- mobile: fix broken 'use current location' in dive edit
- mobile: add ability to show fundamentally the same statistics as on the desktop
- mobile: add settings for DC and calculated ceilings and show calculated ceilings
- mobile: switch to newer version of Kirigami

View file

@ -126,7 +126,7 @@ QString GpsLocation::currentPosition()
if (!hasLocationsSource())
return tr("Unknown GPS location (no GPS source)");
if (m_trackers.count()) {
QDateTime lastFixTime = timestampToDateTime(m_trackers.lastKey() + gettimezoneoffset());
QDateTime lastFixTime = timestampToDateTime(m_trackers.lastKey() - gettimezoneoffset());
QDateTime now = QDateTime::currentDateTime();
int delta = lastFixTime.secsTo(now);
qDebug() << "lastFixTime" << lastFixTime.toString() << "now" << now.toString() << "delta" << delta;
@ -168,14 +168,13 @@ void GpsLocation::newPosition(QGeoPositionInfo pos)
lastCoord.distanceTo(pos.coordinate()) > prefs.distance_threshold) {
QString msg = QStringLiteral("received new position %1 after delta %2 threshold %3 (now %4 last %5)");
status(qPrintable(msg.arg(pos.coordinate().toString()).arg(delta).arg(prefs.time_threshold).arg(pos.timestamp().toString()).arg(timestampToDateTime(lastTime).toString())));
waitingForPosition = false;
acquiredPosition();
gpsTracker gt;
gt.when = thisTime;
gt.location = create_location(pos.coordinate().latitude(), pos.coordinate().longitude());
addFixToStorage(gt);
gpsTracker gtNew = m_trackers.last();
qDebug() << "newest fix is now at" << timestampToDateTime(gtNew.when - gettimezoneoffset()).toString();
waitingForPosition = false;
acquiredPosition();
}
}

View file

@ -204,6 +204,7 @@ Item {
target: manager
onWaitingForPositionChanged: {
gpsText = manager.getCurrentPosition()
manager.appendTextToLog("received updated position info " + gpsText)
}
}