diff options
author | Dirk Hohndel <dirk@hohndel.org> | 2015-01-09 14:44:38 -0800 |
---|---|---|
committer | Dirk Hohndel <dirk@hohndel.org> | 2015-01-09 15:06:25 -0800 |
commit | 7357633905cf3bb33a99f7c0b54d214f49373411 (patch) | |
tree | 8edcba679c45b6275e321e8033979710cea37031 | |
parent | e43ea018fa2faecfc6ebb5a7831bafbfefca183d (diff) | |
download | subsurface-7357633905cf3bb33a99f7c0b54d214f49373411.tar.gz |
Now use our table when downloading from the dive computer
We pass a different table to libdivecomputer (and the uemis code) and have
that table filled. And then we simply copy the dives from that table into
the real dive_table when the user accepts the download.
Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
-rw-r--r-- | libdivecomputer.c | 2 | ||||
-rw-r--r-- | qt-ui/downloadfromdivecomputer.cpp | 56 | ||||
-rw-r--r-- | uemis-downloader.c | 2 |
3 files changed, 19 insertions, 41 deletions
diff --git a/libdivecomputer.c b/libdivecomputer.c index d55cadf37..70be23f48 100644 --- a/libdivecomputer.c +++ b/libdivecomputer.c @@ -597,7 +597,7 @@ static int dive_cb(const unsigned char *data, unsigned int size, } dive->downloaded = true; - record_dive(dive); + record_dive_to_table(dive, devdata->download_table); mark_divelist_changed(true); return true; diff --git a/qt-ui/downloadfromdivecomputer.cpp b/qt-ui/downloadfromdivecomputer.cpp index 87529456b..7921acc23 100644 --- a/qt-ui/downloadfromdivecomputer.cpp +++ b/qt-ui/downloadfromdivecomputer.cpp @@ -399,26 +399,12 @@ void DownloadFromDCWidget::onDownloadThreadFinished() updateState(DONE); else updateState(ERROR); - - // I'm not sure if we should really call process_dives even - // if there's an error - if (import_thread_cancelled) { - // walk backwards so we don't keep moving the dives - // down in the dive_table - for (int i = dive_table.nr - 1; i >= previousLast; i--) - delete_single_dive(i); - } else if (dive_table.nr && previousLast < dive_table.nr) { - diveImportedModel->setImportedDivesIndexes(previousLast, dive_table.nr - 1); - } - ui.startDownload->setEnabled(false); - } else if (currentState == CANCELLING || currentState == CANCELLED) { - if (import_thread_cancelled) { - // walk backwards so we don't keep moving the dives - // down in the dive_table - for (int i = dive_table.nr - 1; i >= previousLast; i--) - delete_single_dive(i); - } - updateState(CANCELLED); + } else if (currentState == CANCELLING) { + updateState(DONE); + } + // regardless, if we got dives, we should show them to the user + if (downloadTable.nr) { + diveImportedModel->setImportedDivesIndexes(0, downloadTable.nr - 1); } } @@ -427,8 +413,13 @@ void DownloadFromDCWidget::on_ok_clicked() if (currentState != DONE) return; - // remove all unselected dives from the dive-list. - diveImportedModel->removeUnused(); + // record all the dives in the 'real' dive_table + for (int i = 0; i < downloadTable.nr; i++) { + if (diveImportedModel->data(diveImportedModel->index(i, 0),Qt::CheckStateRole) == Qt::Checked) + record_dive(downloadTable.dives[i]); + downloadTable.dives[i] = NULL; + } + downloadTable.nr = 0; int uniqId, idx; // remember the last downloaded dive (on most dive computers this will be the chronologically @@ -521,6 +512,7 @@ void DownloadThread::run() { const char *errorText; import_thread_cancelled = false; + data->download_table = &downloadTable; if (!strcmp(data->vendor, "Uemis")) errorText = do_uemis_import(data); else @@ -571,7 +563,9 @@ QVariant DiveImportedModel::data(const QModelIndex &index, int role) const if (index.row() + firstIndex > lastIndex) return QVariant(); - struct dive *d = get_dive(index.row() + firstIndex); + struct dive *d = get_dive_from_table(index.row() + firstIndex, &downloadTable); + if (!d) + return QVariant(); if (role == Qt::DisplayRole) { switch (index.column()) { case 0: @@ -627,19 +621,3 @@ void DiveImportedModel::setImportedDivesIndexes(int first, int last) memset(checkStates, true, last - first + 1); endInsertRows(); } - -void DiveImportedModel::removeUnused() -{ - beginRemoveRows(QModelIndex(), 0, rowCount() - 1); - endRemoveRows(); - - for (int i = lastIndex; i >= firstIndex; i--) { - if (!checkStates[i - firstIndex]) { - delete_single_dive(i); - } - } - - lastIndex = 0; - firstIndex = 0; - delete[] checkStates; -} diff --git a/uemis-downloader.c b/uemis-downloader.c index 5dfce6ce2..b4abfeb62 100644 --- a/uemis-downloader.c +++ b/uemis-downloader.c @@ -128,7 +128,7 @@ static void record_uemis_dive(device_data_t *devdata, struct dive *dive) else add_dive_to_trip(dive, devdata->trip); } - record_dive(dive); + record_dive_to_table(dive, devdata->download_table); } /* send text to the importer progress bar */ |