diff options
-rw-r--r-- | dive.h | 2 | ||||
-rw-r--r-- | qt-ui/downloadfromdivecomputer.cpp | 8 | ||||
-rw-r--r-- | uemis-downloader.c | 40 | ||||
-rw-r--r-- | uemis.h | 1 |
4 files changed, 23 insertions, 28 deletions
@@ -498,7 +498,7 @@ struct dive_table { struct dive **dives; }; -extern struct dive_table dive_table; +extern struct dive_table dive_table, downloadTable; extern struct dive displayed_dive; extern struct dive_site displayed_dive_site; extern int selected_dive; diff --git a/qt-ui/downloadfromdivecomputer.cpp b/qt-ui/downloadfromdivecomputer.cpp index 7e18dae70..1fef9f6bf 100644 --- a/qt-ui/downloadfromdivecomputer.cpp +++ b/qt-ui/downloadfromdivecomputer.cpp @@ -298,14 +298,6 @@ 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 70cc3f78d..3b8ddf900 100644 --- a/uemis-downloader.c +++ b/uemis-downloader.c @@ -928,23 +928,32 @@ 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) +static char *uemis_get_divenr(char *deviceidstr, int force) { uint32_t deviceid, maxdiveid = 0; int i; char divenr[10]; - + struct dive_table *table; deviceid = atoi(deviceidstr); - struct dive *d; - for_each_dive (i, d) { + + /* + * If we are are retrying after a disconnect/reconnect, we + * will look up the highest dive number in the dives we + * already have. + * + * Also, if "force_download" is true, do this even if we + * don't have any dives (maxdiveid will remain zero) + */ + if (force || downloadTable.nr) + table = &downloadTable; + else + table = &dive_table; + + for (i = 0; i < table->nr; i++) { + struct dive *d = table->dives[i]; struct divecomputer *dc; + if (!d) + continue; for_each_dc (d, dc) { if (dc->model && !strcmp(dc->model, "Uemis Zurich") && (dc->deviceid == 0 || dc->deviceid == 0x7fffffff || dc->deviceid == deviceid) && @@ -952,7 +961,7 @@ static char *uemis_get_divenr(char *deviceidstr) maxdiveid = dc->diveid; } } - snprintf(divenr, 10, "%d", maxdiveid > max_diveid_from_dialog ? maxdiveid : max_diveid_from_dialog); + snprintf(divenr, 10, "%d", maxdiveid); return strdup(divenr); } @@ -1215,12 +1224,7 @@ const char *do_uemis_import(device_data_t *data) goto bail; param_buff[1] = "notempty"; - /* if we force it we start downloading from the first dive on the Uemis; - * otherwise check which was the last dive downloaded */ - if (!force_download) - newmax = uemis_get_divenr(deviceid); - else - newmax = strdup("0"); + newmax = uemis_get_divenr(deviceid, force_download); first = start = atoi(newmax); dive_to_read = first; @@ -16,7 +16,6 @@ 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); int uemis_get_divespot_id_by_diveid(uint32_t diveid); typedef struct |