diff --git a/companion/releasenotes.txt b/companion/releasenotes.txt index b8aadc6ba..03cd9ad05 100644 --- a/companion/releasenotes.txt +++ b/companion/releasenotes.txt @@ -1,6 +1,7 @@

Version 2.1.0 / (set date)

diff --git a/companion/src/logsdialog.cpp b/companion/src/logsdialog.cpp index 4cd94e5ad..67e3e561d 100644 --- a/companion/src/logsdialog.cpp +++ b/companion/src/logsdialog.cpp @@ -575,35 +575,77 @@ bool logsDialog::cvsFileParse() } plotLock = true; - - ui->sessions_CB->clear(); - ui->sessions_CB->addItem("---"); - - double lastvalue = 0; - double tmp; - for (int i = 1; i < n; i++) { - QString tstamp = csvlog.at(i).at(0) + QString(" ") + csvlog.at(i).at(1); - - if (csvlog.at(i).at(1).contains(".")) { - tmp = QDateTime::fromString(tstamp, "yyyy-MM-dd HH:mm:ss.zzz").toTime_t(); - tmp += csvlog.at(i).at(1).mid(csvlog.at(i).at(1).indexOf(".")).toDouble(); - } else { - tmp = QDateTime::fromString(tstamp, "yyyy-MM-dd HH:mm:ss").toTime_t(); - } - - if (tmp > (lastvalue+60)) { - ui->sessions_CB->addItem(tstamp, i - 1); - lastvalue = tmp; - } else { - lastvalue = tmp; - } - } - + setFlightSessions(); plotLock=false; return true; } +struct FlightSession { + QDateTime start; + QDateTime end; +}; + +QDateTime logsDialog::getRecordTimeStamp(int index) +{ + QString tstamp = csvlog.at(index).at(0) + " " + csvlog.at(index).at(1); + if (csvlog.at(index).at(1).contains(".")) + return QDateTime::fromString(tstamp, "yyyy-MM-dd HH:mm:ss.zzz"); + return QDateTime::fromString(tstamp, "yyyy-MM-dd HH:mm:ss"); +} + +QString logsDialog::generateDuration(const QDateTime & start, const QDateTime & end) +{ + int secs = start.secsTo(end); + QString durationString; + if (secs >= 3600) { + durationString = QString("%1:").arg(secs/3600); + secs %= 3600; + } + durationString += QString("%1:%2").arg(secs/60, 2, 10, QChar('0')).arg(secs%60, 2, 10, QChar('0')); + return durationString; +} + +void logsDialog::setFlightSessions() +{ + ui->sessions_CB->clear(); + + int n=csvlog.count(); + // qDebug() << "records" << n; + + // find session breaks + QList sessions; + QDateTime lastvalue; + for (int i = 1; i < n; i++) { + QDateTime tmp = getRecordTimeStamp(i); + if (lastvalue.secsTo(tmp) > 60) { + sessions.push_back(i-1); + // qDebug() << "session index" << i-1; + } + lastvalue = tmp; + } + sessions.push_back(n-1); + + //now construct a list of sessions with their times + //total time + int noSesions = sessions.size()-1; + QString label = QString("%1 ").arg(noSesions); + label += tr(noSesions > 1 ? "sessions" : "session"); + label += " <" + tr("total duration ") + generateDuration(getRecordTimeStamp(1), getRecordTimeStamp(n-1)) + ">"; + ui->sessions_CB->addItem(label); + + // add individual sessions + if (sessions.size() > 2) { + for (int i = 1; i < sessions.size(); i++) { + QDateTime sessionStart = getRecordTimeStamp(sessions.at(i-1)+1); + QDateTime sessionEnd = getRecordTimeStamp(sessions.at(i)); + QString label = sessionStart.toString("HH:mm:ss") + " <" + tr("duration ") + generateDuration(sessionStart, sessionEnd) + ">"; + ui->sessions_CB->addItem(label, sessions.at(i-1)); + // qDebug() << "added label" << label << sessions.at(i-1); + } + } +} + void logsDialog::on_sessions_CB_currentIndexChanged(int index) { if (plotLock) return; diff --git a/companion/src/logsdialog.h b/companion/src/logsdialog.h index f528cec7e..5e5fe5f84 100644 --- a/companion/src/logsdialog.h +++ b/companion/src/logsdialog.h @@ -79,6 +79,9 @@ private: bool cvsFileParse(); QList filterGePoints(const QList & input); void exportToGoogleEarth(); + QDateTime getRecordTimeStamp(int index); + QString generateDuration(const QDateTime & start, const QDateTime & end); + void setFlightSessions(); };