This parses .txt log files produced by Dataplus and Oceanlog software.

Signed-off-by: Miika Turkia <[email protected]>
---
 desktop-widgets/divelogimportdialog.cpp | 74 ++++++++++++++++++++++++++++++++-
 desktop-widgets/divelogimportdialog.h   |  2 +
 2 files changed, 74 insertions(+), 2 deletions(-)

diff --git a/desktop-widgets/divelogimportdialog.cpp 
b/desktop-widgets/divelogimportdialog.cpp
index c8402ab..0a964b0 100644
--- a/desktop-widgets/divelogimportdialog.cpp
+++ b/desktop-widgets/divelogimportdialog.cpp
@@ -342,6 +342,7 @@ DiveLogImportDialog::DiveLogImportDialog(QStringList fn, 
QWidget *parent) : QDia
        column = 0;
        delta = "0";
        hw = "";
+       txtLog = false;
 
        /* Add indexes of XSLTs requiring special handling to the list */
        specialCSV << SENSUS;
@@ -489,8 +490,21 @@ void DiveLogImportDialog::loadFileContents(int value, 
whatChanged triggeredBy)
                ui->knownImports->setCurrentText("DL7");
                ui->CSVUnits->setCurrentText(units);
                blockSignals(false);
+       } else if (firstLine.contains("Life Time Dive")) {
+               txtLog = true;
+
+               while ((firstLine = f.readLine().trimmed()).length() >= 0 && 
!f.atEnd()) {
+                       if (firstLine.contains("Dive Profile")) {
+                               f.readLine();
+                               break;
+                       }
+               }
+               firstLine = f.readLine().trimmed();
+
        }
 
+
+
        // Special handling for APD Log Viewer
        if ((triggeredBy == KNOWNTYPES && (value == APD || value == APD2)) || 
(triggeredBy == INITIAL && fileNames.first().endsWith(".apd", 
Qt::CaseInsensitive))) {
                apd=true;
@@ -694,6 +708,13 @@ void DiveLogImportDialog::loadFileContents(int value, 
whatChanged triggeredBy)
                                break;
                        }
                }
+       } else if (txtLog) {
+               while ((firstLine = f.readLine().trimmed()).length() >= 0 && 
!f.atEnd()) {
+                       if (firstLine.contains("Dive Profile")) {
+                               firstLine = f.readLine().trimmed();
+                               break;
+                       }
+               }
        }
 
        while (rows < 10 && !f.atEnd()) {
@@ -768,6 +789,51 @@ int DiveLogImportDialog::setup_csv_params(QStringList r, 
char **params, int pnr)
 
        return pnr;
 }
+int DiveLogImportDialog::parseTxtHeader(QString fileName, char **params, int 
pnr)
+{
+       QFile f(fileNames.first());
+       QString date;
+       QString time;
+       QString line;
+
+       f.open(QFile::ReadOnly);
+       while ((line = f.readLine().trimmed()).length() >= 0 && !f.atEnd()) {
+               if (line.contains("Dive Profile")) {
+                       f.readLine();
+                       break;
+               } else if (line.contains("Dive Date: ")) {
+                       date = line.replace(QString::fromLatin1("Dive Date: "), 
QString::fromLatin1(""));
+
+                       if (date.contains('-')) {
+                               QStringList fmtDate = date.split('-');
+                               date = fmtDate[0] + fmtDate[1] + fmtDate[2];
+                       } else if (date.contains('/')) {
+                               QStringList fmtDate = date.split('/');
+                               date = fmtDate[2] + fmtDate[0] + fmtDate[1];
+                       } else {
+                               QStringList fmtDate = date.split('.');
+                               date = fmtDate[2] + fmtDate[1] + fmtDate[0];
+                       }
+               } else if (line.contains("Elapsed Dive Time: ")) {
+                       // Skipping dive duration for now
+               } else if (line.contains("Dive Time: ")) {
+                       time = line.replace(QString::fromLatin1("Dive Time: "), 
QString::fromLatin1(""));
+
+                       if (time.contains(':')) {
+                               QStringList fmtTime = time.split(':');
+                               time = fmtTime[0] + fmtTime[1];
+
+                       }
+               }
+       }
+       f.close();
+
+       params[pnr++] = strdup("date");
+       params[pnr++] = strdup(date.toLatin1());
+       params[pnr++] = strdup("time");
+       params[pnr++] = strdup(time.toLatin1());
+       return pnr;
+}
 
 void DiveLogImportDialog::on_buttonBox_accepted()
 {
@@ -832,7 +898,9 @@ void DiveLogImportDialog::on_buttonBox_accepted()
                                int pnr = 0;
 
                                QRegExp 
apdRe("^.*[/\\][0-9a-zA-Z]*_([0-9]{6})_([0-9]{6})\\.apd");
-                               if (apdRe.exactMatch(fileNames[i])) {
+                               if (txtLog) {
+                                       pnr = parseTxtHeader(fileNames[i], 
params, pnr);
+                               } else if (apdRe.exactMatch(fileNames[i])) {
                                        params[pnr++] = strdup("date");
                                        params[pnr++] = strdup("20" + 
apdRe.cap(1).toLatin1());
                                        params[pnr++] = strdup("time");
@@ -906,7 +974,9 @@ void DiveLogImportDialog::on_buttonBox_accepted()
                                int pnr = 0;
 
                                QRegExp 
apdRe("^.*[/\\][0-9a-zA-Z]*_([0-9]{6})_([0-9]{6})\\.apd");
-                               if (apdRe.exactMatch(fileNames[i])) {
+                               if (txtLog) {
+                                       pnr = parseTxtHeader(fileNames[i], 
params, pnr);
+                               } else if (apdRe.exactMatch(fileNames[i])) {
                                        params[pnr++] = strdup("date");
                                        params[pnr++] = strdup("20" + 
apdRe.cap(1).toLatin1());
                                        params[pnr++] = strdup("time");
diff --git a/desktop-widgets/divelogimportdialog.h 
b/desktop-widgets/divelogimportdialog.h
index 750bc10..8c75284 100644
--- a/desktop-widgets/divelogimportdialog.h
+++ b/desktop-widgets/divelogimportdialog.h
@@ -87,6 +87,7 @@ slots:
        void loadFileContentsKnownTypesSelected(int value);
        void loadFileContents(int value, enum whatChanged triggeredBy);
        int setup_csv_params(QStringList r, char **params, int pnr);
+       int parseTxtHeader(QString fileName, char **params, int pnr);
 
 private:
        bool selector;
@@ -97,6 +98,7 @@ private:
        ColumnNameResult *resultModel;
        QString delta;
        QString hw;
+       bool txtLog;
 
        struct CSVAppConfig {
                QString name;
-- 
2.5.0

_______________________________________________
subsurface mailing list
[email protected]
http://lists.subsurface-divelog.org/cgi-bin/mailman/listinfo/subsurface

Reply via email to