summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--qt-ui/downloadfromdivecomputer.cpp9
-rw-r--r--uemis-downloader.c9
-rw-r--r--uemis.h1
3 files changed, 18 insertions, 1 deletions
diff --git a/qt-ui/downloadfromdivecomputer.cpp b/qt-ui/downloadfromdivecomputer.cpp
index d4deff268..5f0487e8c 100644
--- a/qt-ui/downloadfromdivecomputer.cpp
+++ b/qt-ui/downloadfromdivecomputer.cpp
@@ -3,6 +3,7 @@
#include "mainwindow.h"
#include "divelistview.h"
#include "display.h"
+#include "uemis.h"
#include <QTimer>
#include <QFileDialog>
@@ -284,6 +285,14 @@ void DownloadFromDCWidget::on_downloadCancelRetryButton_clicked()
diveImportedModel->clearTable();
clear_table(&downloadTable);
}
+ if (ui.vendor->currentText() == "Uemis") {
+ if (currentState == ERROR && downloadTable.nr > 0)
+ // let the uemis code know how far we've gotten
+ uemis_set_max_diveid_from_dialog(downloadTable.dives[downloadTable.nr - 1]->dc.diveid);
+ else
+ // fresh download, so only look at what's in the dive_table
+ uemis_set_max_diveid_from_dialog(0);
+ }
updateState(DOWNLOADING);
// you cannot cancel the dialog, just the download
diff --git a/uemis-downloader.c b/uemis-downloader.c
index 8f3549c97..7fae71f26 100644
--- a/uemis-downloader.c
+++ b/uemis-downloader.c
@@ -816,6 +816,13 @@ static bool process_raw_buffer(device_data_t *devdata, uint32_t deviceid, char *
return true;
}
+static int max_diveid_from_dialog;
+
+void uemis_set_max_diveid_from_dialog(int diveid)
+{
+ max_diveid_from_dialog = diveid;
+}
+
static char *uemis_get_divenr(char *deviceidstr)
{
uint32_t deviceid, maxdiveid = 0;
@@ -833,7 +840,7 @@ static char *uemis_get_divenr(char *deviceidstr)
maxdiveid = dc->diveid;
}
}
- snprintf(divenr, 10, "%d", maxdiveid);
+ snprintf(divenr, 10, "%d", maxdiveid > max_diveid_from_dialog ? maxdiveid : max_diveid_from_dialog);
return strdup(divenr);
}
diff --git a/uemis.h b/uemis.h
index ad4fa10de..d19f293de 100644
--- a/uemis.h
+++ b/uemis.h
@@ -16,6 +16,7 @@ void uemis_parse_divelog_binary(char *base64, void *divep);
int uemis_get_weight_unit(int diveid);
void uemis_mark_divelocation(int diveid, int divespot, uint32_t dive_site_uuid);
void uemis_set_divelocation(int divespot, char *text, double longitude, double latitude);
+void uemis_set_max_diveid_from_dialog(int diveid);
typedef struct
{