From 79f15e913b9029205686ef6c080eb136ff99e0cf Mon Sep 17 00:00:00 2001 From: Dirk Hohndel Date: Mon, 20 Apr 2015 22:30:04 -0700 Subject: Uemis downloader: allow continuing download by clicking Retry When we run out of space in the Uemis filesystem we return an error. The user could reasonably unplug the SDA, insert it again and then retry to continue the download (that's what we tell them to do). In that case we need to make sure we start at the correct dive otherwise the same dives keep getting downloaded over and over again. Signed-off-by: Dirk Hohndel --- qt-ui/downloadfromdivecomputer.cpp | 9 +++++++++ uemis-downloader.c | 9 ++++++++- uemis.h | 1 + 3 files changed, 18 insertions(+), 1 deletion(-) 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 #include @@ -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 { -- cgit v1.2.3-70-g09d2