1
0
Fork 0
mirror of https://github.com/subsurface/subsurface.git synced 2025-02-19 22:16:15 +00:00

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 <dirk@hohndel.org>
This commit is contained in:
Dirk Hohndel 2015-04-20 22:30:04 -07:00
parent e9ba8f0ff6
commit 8bbb3dfe42
3 changed files with 20 additions and 1 deletions

View file

@ -1,6 +1,9 @@
#include "downloadfromdivecomputer.h"
#include "helpers.h"
#include "mainwindow.h"
#include "divelistview.h"
#include "display.h"
#include "uemis.h"
#include <QTimer>
#include <QFileDialog>
@ -282,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

View file

@ -814,6 +814,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;
@ -831,7 +838,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);
}

View file

@ -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, char **location, degrees_t *latitude, degrees_t *longitude);
void uemis_set_divelocation(int divespot, char *text, double longitude, double latitude);
void uemis_set_max_diveid_from_dialog(int diveid);
typedef struct
{