mirror of
https://github.com/subsurface/subsurface.git
synced 2025-02-19 22:16:15 +00:00
cleanup: move timestampToDateTime() to qthelper.cpp
Move this function from maintab.cpp to qthelper.cpp. Since the functionality was used in numerous places, use the helper function there as well. This removes a number of inconsistencies. For example, sometime setTimeSpec(Qt::UTC) was called, even though the QDateTime object was already created with that time spec. Signed-off-by: Berthold Stoeger <bstoeger@mail.tuwien.ac.at>
This commit is contained in:
parent
2ba2ea934a
commit
f63485b444
7 changed files with 22 additions and 28 deletions
core
desktop-widgets
qt-models
|
@ -133,7 +133,7 @@ QString GpsLocation::currentPosition()
|
||||||
if (!hasLocationsSource())
|
if (!hasLocationsSource())
|
||||||
return tr("Unknown GPS location (no GPS source)");
|
return tr("Unknown GPS location (no GPS source)");
|
||||||
if (m_trackers.count()) {
|
if (m_trackers.count()) {
|
||||||
QDateTime lastFixTime = QDateTime().fromMSecsSinceEpoch((m_trackers.lastKey() - gettimezoneoffset(m_trackers.lastKey())) * 1000);
|
QDateTime lastFixTime = timestampToDateTime(m_trackers.lastKey() - gettimezoneoffset(m_trackers.lastKey()));
|
||||||
QDateTime now = QDateTime::currentDateTime();
|
QDateTime now = QDateTime::currentDateTime();
|
||||||
int delta = lastFixTime.secsTo(now);
|
int delta = lastFixTime.secsTo(now);
|
||||||
qDebug() << "lastFixTime" << lastFixTime.toString() << "now" << now.toString() << "delta" << delta;
|
qDebug() << "lastFixTime" << lastFixTime.toString() << "now" << now.toString() << "delta" << delta;
|
||||||
|
@ -173,7 +173,7 @@ void GpsLocation::newPosition(QGeoPositionInfo pos)
|
||||||
if (!nr || waitingForPosition || delta > prefs.time_threshold ||
|
if (!nr || waitingForPosition || delta > prefs.time_threshold ||
|
||||||
lastCoord.distanceTo(pos.coordinate()) > prefs.distance_threshold) {
|
lastCoord.distanceTo(pos.coordinate()) > prefs.distance_threshold) {
|
||||||
QString msg = QStringLiteral("received new position %1 after delta %2 threshold %3 (now %4 last %5)");
|
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(QDateTime().fromMSecsSinceEpoch(lastTime * 1000).toString())));
|
status(qPrintable(msg.arg(pos.coordinate().toString()).arg(delta).arg(prefs.time_threshold).arg(pos.timestamp().toString()).arg(timestampToDateTime(lastTime).toString())));
|
||||||
waitingForPosition = false;
|
waitingForPosition = false;
|
||||||
acquiredPosition();
|
acquiredPosition();
|
||||||
gpsTracker gt;
|
gpsTracker gt;
|
||||||
|
@ -182,7 +182,7 @@ void GpsLocation::newPosition(QGeoPositionInfo pos)
|
||||||
gt.location = create_location(pos.coordinate().latitude(), pos.coordinate().longitude());
|
gt.location = create_location(pos.coordinate().latitude(), pos.coordinate().longitude());
|
||||||
addFixToStorage(gt);
|
addFixToStorage(gt);
|
||||||
gpsTracker gtNew = m_trackers.last();
|
gpsTracker gtNew = m_trackers.last();
|
||||||
qDebug() << "newest fix is now at" << QDateTime().fromMSecsSinceEpoch(gtNew.when - gettimezoneoffset(gtNew.when) * 1000).toString();
|
qDebug() << "newest fix is now at" << timestampToDateTime(gtNew.when - gettimezoneoffset(gtNew.when)).toString();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -696,12 +696,19 @@ int gettimezoneoffset(timestamp_t when)
|
||||||
if (when == 0)
|
if (when == 0)
|
||||||
dt1 = QDateTime::currentDateTime();
|
dt1 = QDateTime::currentDateTime();
|
||||||
else
|
else
|
||||||
dt1 = QDateTime::fromMSecsSinceEpoch(when * 1000);
|
dt1 = timestampToDateTime(when);
|
||||||
dt2 = dt1.toUTC();
|
dt2 = dt1.toUTC();
|
||||||
dt1.setTimeSpec(Qt::UTC);
|
dt1.setTimeSpec(Qt::UTC);
|
||||||
return dt2.secsTo(dt1);
|
return dt2.secsTo(dt1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
QDateTime timestampToDateTime(timestamp_t when)
|
||||||
|
{
|
||||||
|
// Subsurface always uses "local time" as in "whatever was the local time at the location"
|
||||||
|
// so all time stamps have no time zone information and are in UTC
|
||||||
|
return QDateTime::fromMSecsSinceEpoch(1000 * when, Qt::UTC);
|
||||||
|
}
|
||||||
|
|
||||||
QString render_seconds_to_string(int seconds)
|
QString render_seconds_to_string(int seconds)
|
||||||
{
|
{
|
||||||
if (seconds % 60 == 0)
|
if (seconds % 60 == 0)
|
||||||
|
@ -984,8 +991,7 @@ QString get_trip_date_string(timestamp_t when, int nr, bool getday)
|
||||||
{
|
{
|
||||||
struct tm tm;
|
struct tm tm;
|
||||||
utc_mkdate(when, &tm);
|
utc_mkdate(when, &tm);
|
||||||
QDateTime localTime = QDateTime::fromMSecsSinceEpoch(1000*when,Qt::UTC);
|
QDateTime localTime = timestampToDateTime(when);
|
||||||
localTime.setTimeSpec(Qt::UTC);
|
|
||||||
|
|
||||||
QString suffix = " " + gettextFromC::tr("(%n dive(s))", "", nr);
|
QString suffix = " " + gettextFromC::tr("(%n dive(s))", "", nr);
|
||||||
if (getday)
|
if (getday)
|
||||||
|
|
|
@ -62,6 +62,7 @@ QString getSubsurfaceDataPath(QString folderToFind);
|
||||||
QString getPrintingTemplatePathUser();
|
QString getPrintingTemplatePathUser();
|
||||||
QString getPrintingTemplatePathBundle();
|
QString getPrintingTemplatePathBundle();
|
||||||
int gettimezoneoffset(timestamp_t when = 0);
|
int gettimezoneoffset(timestamp_t when = 0);
|
||||||
|
QDateTime timestampToDateTime(timestamp_t when);
|
||||||
int parseDurationToSeconds(const QString &text);
|
int parseDurationToSeconds(const QString &text);
|
||||||
int parseLengthToMm(const QString &text);
|
int parseLengthToMm(const QString &text);
|
||||||
int parseTemperatureToMkelvin(const QString &text);
|
int parseTemperatureToMkelvin(const QString &text);
|
||||||
|
|
|
@ -328,15 +328,13 @@ DiveObjectHelperGrantlee::DiveObjectHelperGrantlee(const struct dive *d) :
|
||||||
|
|
||||||
QString DiveObjectHelper::date() const
|
QString DiveObjectHelper::date() const
|
||||||
{
|
{
|
||||||
QDateTime localTime = QDateTime::fromMSecsSinceEpoch(1000 * timestamp, Qt::UTC);
|
QDateTime localTime = timestampToDateTime(timestamp);
|
||||||
localTime.setTimeSpec(Qt::UTC);
|
|
||||||
return localTime.date().toString(prefs.date_format_short);
|
return localTime.date().toString(prefs.date_format_short);
|
||||||
}
|
}
|
||||||
|
|
||||||
QString DiveObjectHelper::time() const
|
QString DiveObjectHelper::time() const
|
||||||
{
|
{
|
||||||
QDateTime localTime = QDateTime::fromMSecsSinceEpoch(1000 * timestamp, Qt::UTC);
|
QDateTime localTime = timestampToDateTime(timestamp);
|
||||||
localTime.setTimeSpec(Qt::UTC);
|
|
||||||
return localTime.time().toString(prefs.time_format);
|
return localTime.time().toString(prefs.time_format);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -865,7 +865,7 @@ void MainWindow::on_actionReplanDive_triggered()
|
||||||
graphics->clearHandlers();
|
graphics->clearHandlers();
|
||||||
setApplicationState(ApplicationState::PlanDive);
|
setApplicationState(ApplicationState::PlanDive);
|
||||||
divePlannerWidget->setReplanButton(true);
|
divePlannerWidget->setReplanButton(true);
|
||||||
divePlannerWidget->setupStartTime(QDateTime::fromMSecsSinceEpoch(1000 * current_dive->when, Qt::UTC));
|
divePlannerWidget->setupStartTime(timestampToDateTime(current_dive->when));
|
||||||
if (current_dive->surface_pressure.mbar)
|
if (current_dive->surface_pressure.mbar)
|
||||||
divePlannerWidget->setSurfacePressure(current_dive->surface_pressure.mbar);
|
divePlannerWidget->setSurfacePressure(current_dive->surface_pressure.mbar);
|
||||||
if (current_dive->salinity)
|
if (current_dive->salinity)
|
||||||
|
|
|
@ -307,14 +307,6 @@ void MainTab::updateNotes(const struct dive *d)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static QDateTime timestampToDateTime(timestamp_t when)
|
|
||||||
{
|
|
||||||
// Subsurface always uses "local time" as in "whatever was the local time at the location"
|
|
||||||
// so all time stamps have no time zone information and are in UTC
|
|
||||||
QDateTime localTime = QDateTime::fromMSecsSinceEpoch(1000 * when, Qt::UTC);
|
|
||||||
localTime.setTimeSpec(Qt::UTC);
|
|
||||||
return localTime;
|
|
||||||
}
|
|
||||||
void MainTab::updateDateTime(const struct dive *d)
|
void MainTab::updateDateTime(const struct dive *d)
|
||||||
{
|
{
|
||||||
QDateTime localTime = timestampToDateTime(d->when);
|
QDateTime localTime = timestampToDateTime(d->when);
|
||||||
|
@ -617,8 +609,7 @@ void MainTab::on_dateEdit_editingFinished()
|
||||||
{
|
{
|
||||||
if (ignoreInput || !current_dive)
|
if (ignoreInput || !current_dive)
|
||||||
return;
|
return;
|
||||||
QDateTime dateTime = QDateTime::fromMSecsSinceEpoch(1000*current_dive->when, Qt::UTC);
|
QDateTime dateTime = timestampToDateTime(current_dive->when);
|
||||||
dateTime.setTimeSpec(Qt::UTC);
|
|
||||||
dateTime.setDate(ui.dateEdit->date());
|
dateTime.setDate(ui.dateEdit->date());
|
||||||
shiftTime(dateTime);
|
shiftTime(dateTime);
|
||||||
}
|
}
|
||||||
|
@ -627,8 +618,7 @@ void MainTab::on_timeEdit_editingFinished()
|
||||||
{
|
{
|
||||||
if (ignoreInput || !current_dive)
|
if (ignoreInput || !current_dive)
|
||||||
return;
|
return;
|
||||||
QDateTime dateTime = QDateTime::fromMSecsSinceEpoch(1000*current_dive->when, Qt::UTC);
|
QDateTime dateTime = timestampToDateTime(current_dive->when);
|
||||||
dateTime.setTimeSpec(Qt::UTC);
|
|
||||||
dateTime.setTime(ui.timeEdit->time());
|
dateTime.setTime(ui.timeEdit->time());
|
||||||
shiftTime(dateTime);
|
shiftTime(dateTime);
|
||||||
}
|
}
|
||||||
|
|
|
@ -63,7 +63,7 @@ QString DiveTripModelBase::tripShortDate(const dive_trip *trip)
|
||||||
{
|
{
|
||||||
if (!trip)
|
if (!trip)
|
||||||
return QString();
|
return QString();
|
||||||
QDateTime firstTime = QDateTime::fromMSecsSinceEpoch(1000*trip_date(trip), Qt::UTC);
|
QDateTime firstTime = timestampToDateTime(trip_date(trip));
|
||||||
QString firstMonth = firstTime.toString("MMM");
|
QString firstMonth = firstTime.toString("MMM");
|
||||||
return QStringLiteral("%1\n'%2").arg(firstMonth,firstTime.toString("yy"));
|
return QStringLiteral("%1\n'%2").arg(firstMonth,firstTime.toString("yy"));
|
||||||
}
|
}
|
||||||
|
@ -79,10 +79,10 @@ QString DiveTripModelBase::tripTitle(const dive_trip *trip)
|
||||||
|
|
||||||
if (title.isEmpty()) {
|
if (title.isEmpty()) {
|
||||||
// so use the date range
|
// so use the date range
|
||||||
QDateTime firstTime = QDateTime::fromMSecsSinceEpoch(1000*trip_date(trip), Qt::UTC);
|
QDateTime firstTime = timestampToDateTime(trip_date(trip));
|
||||||
QString firstMonth = firstTime.toString("MMM");
|
QString firstMonth = firstTime.toString("MMM");
|
||||||
QString firstYear = firstTime.toString("yyyy");
|
QString firstYear = firstTime.toString("yyyy");
|
||||||
QDateTime lastTime = QDateTime::fromMSecsSinceEpoch(1000*trip->dives.dives[0]->when, Qt::UTC);
|
QDateTime lastTime = timestampToDateTime(trip->dives.dives[0]->when);
|
||||||
QString lastMonth = lastTime.toString("MMM");
|
QString lastMonth = lastTime.toString("MMM");
|
||||||
QString lastYear = lastTime.toString("yyyy");
|
QString lastYear = lastTime.toString("yyyy");
|
||||||
if (lastMonth == firstMonth && lastYear == firstYear)
|
if (lastMonth == firstMonth && lastYear == firstYear)
|
||||||
|
@ -201,8 +201,7 @@ QVariant DiveTripModelBase::diveData(const struct dive *d, int column, int role)
|
||||||
// variable in the QtQuick list view. That has to be a string because it will try
|
// variable in the QtQuick list view. That has to be a string because it will try
|
||||||
// to do locale-aware sorting. And amazingly this can't be changed.
|
// to do locale-aware sorting. And amazingly this can't be changed.
|
||||||
case MobileListModel::DateTimeRole: {
|
case MobileListModel::DateTimeRole: {
|
||||||
QDateTime localTime = QDateTime::fromMSecsSinceEpoch(1000 * d->when, Qt::UTC);
|
QDateTime localTime = timestampToDateTime(d->when);
|
||||||
localTime.setTimeSpec(Qt::UTC);
|
|
||||||
return QStringLiteral("%1 %2").arg(localTime.date().toString(prefs.date_format_short),
|
return QStringLiteral("%1 %2").arg(localTime.date().toString(prefs.date_format_short),
|
||||||
localTime.time().toString(prefs.time_format));
|
localTime.time().toString(prefs.time_format));
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue