mirror of
https://github.com/subsurface/subsurface.git
synced 2025-02-19 22:16:15 +00:00
GPS data: more fixes
- load the data from settings as we start - improve upload to server - keep settings and in memory model in sync Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
This commit is contained in:
parent
33142ed7f8
commit
88291f605c
2 changed files with 49 additions and 6 deletions
|
@ -35,6 +35,7 @@ GpsLocation::GpsLocation(void (*showMsgCB)(const char *), QObject *parent)
|
||||||
status("Found GPS");
|
status("Found GPS");
|
||||||
#endif
|
#endif
|
||||||
userAgent = getUserAgent();
|
userAgent = getUserAgent();
|
||||||
|
loadFromStorage();
|
||||||
}
|
}
|
||||||
|
|
||||||
GpsLocation *GpsLocation::instance()
|
GpsLocation *GpsLocation::instance()
|
||||||
|
@ -322,9 +323,44 @@ QMap<qint64, gpsTracker> GpsLocation::currentGPSInfo() const
|
||||||
return m_trackers;
|
return m_trackers;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void GpsLocation::loadFromStorage()
|
||||||
|
{
|
||||||
|
qDebug() << "loadFromStorage with # trackers" << m_trackers.count();
|
||||||
|
int nr = geoSettings->value(QString("count")).toInt();
|
||||||
|
qDebug() << "loading from settings:" << nr;
|
||||||
|
for (int i = 0; i < nr; i++) {
|
||||||
|
struct gpsTracker gt;
|
||||||
|
gt.when = geoSettings->value(QString("gpsFix%1_time").arg(i)).toLongLong();
|
||||||
|
gt.latitude.udeg = geoSettings->value(QString("gpsFix%1_lat").arg(i)).toInt();
|
||||||
|
gt.longitude.udeg = geoSettings->value(QString("gpsFix%1_lon").arg(i)).toInt();
|
||||||
|
gt.name = geoSettings->value(QString("gpsFix%1_name").arg(i)).toString();
|
||||||
|
gt.idx = i;
|
||||||
|
m_trackers.insert(gt.when, gt);
|
||||||
|
qDebug() << "inserted" << i << "timestamps are" << m_trackers.keys();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void GpsLocation::replaceFixToStorage(gpsTracker >)
|
||||||
|
{
|
||||||
|
if (!m_trackers.keys().contains(gt.when)) {
|
||||||
|
qDebug() << "shouldn't have called replace, call add instead";
|
||||||
|
addFixToStorage(gt);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
gpsTracker replacedTracker = m_trackers.value(gt.when);
|
||||||
|
geoSettings->setValue(QString("gpsFix%1_time").arg(replacedTracker.idx), gt.when);
|
||||||
|
geoSettings->setValue(QString("gpsFix%1_lat").arg(replacedTracker.idx), gt.latitude.udeg);
|
||||||
|
geoSettings->setValue(QString("gpsFix%1_lon").arg(replacedTracker.idx), gt.longitude.udeg);
|
||||||
|
geoSettings->setValue(QString("gpsFix%1_name").arg(replacedTracker.idx), gt.name);
|
||||||
|
replacedTracker.latitude = gt.latitude;
|
||||||
|
replacedTracker.longitude = gt.longitude;
|
||||||
|
replacedTracker.name = gt.name;
|
||||||
|
}
|
||||||
|
|
||||||
void GpsLocation::addFixToStorage(gpsTracker >)
|
void GpsLocation::addFixToStorage(gpsTracker >)
|
||||||
{
|
{
|
||||||
int nr = m_trackers.count();
|
int nr = m_trackers.count();
|
||||||
|
qDebug() << "addFixToStorage before there are" << nr << "fixes at" << m_trackers.keys();
|
||||||
geoSettings->setValue("count", nr + 1);
|
geoSettings->setValue("count", nr + 1);
|
||||||
geoSettings->setValue(QString("gpsFix%1_time").arg(nr), gt.when);
|
geoSettings->setValue(QString("gpsFix%1_time").arg(nr), gt.when);
|
||||||
geoSettings->setValue(QString("gpsFix%1_lat").arg(nr), gt.latitude.udeg);
|
geoSettings->setValue(QString("gpsFix%1_lat").arg(nr), gt.latitude.udeg);
|
||||||
|
@ -408,14 +444,15 @@ void GpsLocation::uploadToServer()
|
||||||
QUrl url(GPS_FIX_ADD_URL);
|
QUrl url(GPS_FIX_ADD_URL);
|
||||||
QList<qint64> keys = m_trackers.keys();
|
QList<qint64> keys = m_trackers.keys();
|
||||||
qint64 key;
|
qint64 key;
|
||||||
|
qDebug() << "uploading:" << keys;
|
||||||
Q_FOREACH(key, keys) {
|
Q_FOREACH(key, keys) {
|
||||||
struct gpsTracker gt = m_trackers.value(key);
|
struct gpsTracker gt = m_trackers.value(key);
|
||||||
int idx = gt.idx;
|
int idx = gt.idx;
|
||||||
QDateTime dt;
|
QDateTime dt;
|
||||||
QUrlQuery data;
|
QUrlQuery data;
|
||||||
if (geoSettings->contains(QString("gpsFix%1_uploaded").arg(idx)))
|
//if (geoSettings->contains(QString("gpsFix%1_uploaded").arg(idx)))
|
||||||
continue;
|
// continue;
|
||||||
dt.setTime_t(gt.when);
|
dt.setTime_t(gt.when - gettimezoneoffset(gt.when));
|
||||||
qDebug() << dt.toString() << get_dive_date_string(gt.when);
|
qDebug() << dt.toString() << get_dive_date_string(gt.when);
|
||||||
data.addQueryItem("login", prefs.userid);
|
data.addQueryItem("login", prefs.userid);
|
||||||
data.addQueryItem("dive_date", dt.toString("yyyy-MM-dd"));
|
data.addQueryItem("dive_date", dt.toString("yyyy-MM-dd"));
|
||||||
|
@ -506,10 +543,14 @@ void GpsLocation::downloadFromServer()
|
||||||
gt.latitude.udeg = latitude.toDouble() * 1000000;
|
gt.latitude.udeg = latitude.toDouble() * 1000000;
|
||||||
gt.longitude.udeg = longitude.toDouble() * 1000000;
|
gt.longitude.udeg = longitude.toDouble() * 1000000;
|
||||||
gt.name = name;
|
gt.name = name;
|
||||||
|
qDebug() << "download new fix at" << gt.when;
|
||||||
// add this GPS fix to the QMap and the settings (remove existing fix at the same timestamp first)
|
// add this GPS fix to the QMap and the settings (remove existing fix at the same timestamp first)
|
||||||
if (m_trackers.keys().contains(gt.when))
|
if (m_trackers.keys().contains(gt.when)) {
|
||||||
deleteGpsFix(gt.when);
|
qDebug() << "already have a fix at time stamp" << gt.when;
|
||||||
addFixToStorage(gt);
|
replaceFixToStorage(gt);
|
||||||
|
} else {
|
||||||
|
addFixToStorage(gt);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
qDebug() << "network error" << reply->error() << reply->errorString() << reply->readAll();
|
qDebug() << "network error" << reply->error() << reply->errorString() << reply->readAll();
|
||||||
|
|
|
@ -47,6 +47,8 @@ private:
|
||||||
QMap<qint64, gpsTracker> m_trackers;
|
QMap<qint64, gpsTracker> m_trackers;
|
||||||
void addFixToStorage(gpsTracker >);
|
void addFixToStorage(gpsTracker >);
|
||||||
void deleteFixFromStorage(gpsTracker >);
|
void deleteFixFromStorage(gpsTracker >);
|
||||||
|
void loadFromStorage();
|
||||||
|
void replaceFixToStorage(gpsTracker >);
|
||||||
|
|
||||||
public slots:
|
public slots:
|
||||||
void serviceEnable(bool toggle);
|
void serviceEnable(bool toggle);
|
||||||
|
|
Loading…
Add table
Reference in a new issue