mirror of
https://github.com/subsurface/subsurface.git
synced 2025-02-19 22:16:15 +00:00
Import: get tables from DiveImportedModel not DownloadThread
When importing dives, consume the tables from DiveImportedModel and not the DownloadThread. This appears more logical and avoids an inconsistent state of the DiveImportedModel: On import the tables would be reset, but the DiveImportedModel wasn't informed of that. Signed-off-by: Berthold Stoeger <bstoeger@mail.tuwien.ac.at>
This commit is contained in:
parent
10d4ba82a2
commit
8f3c85f58d
3 changed files with 31 additions and 4 deletions
|
@ -525,21 +525,27 @@ void DownloadFromDCWidget::on_ok_clicked()
|
||||||
{
|
{
|
||||||
if (currentState != DONE && currentState != ERRORED)
|
if (currentState != DONE && currentState != ERRORED)
|
||||||
return;
|
return;
|
||||||
struct dive_table *table = diveImportedModel->thread.table();
|
|
||||||
struct dive_site_table *sites = diveImportedModel->thread.sites();
|
|
||||||
|
|
||||||
// delete non-selected dives
|
// delete non-selected dives
|
||||||
diveImportedModel->deleteDeselected();
|
diveImportedModel->deleteDeselected();
|
||||||
|
|
||||||
if (table->nr > 0) {
|
// TODO: use structured bindings once we go C++17
|
||||||
|
std::pair<struct dive_table, struct dive_site_table> tables = diveImportedModel->consumeTables();
|
||||||
|
if (tables.first.nr > 0) {
|
||||||
auto data = diveImportedModel->thread.data();
|
auto data = diveImportedModel->thread.data();
|
||||||
int flags = IMPORT_IS_DOWNLOADED;
|
int flags = IMPORT_IS_DOWNLOADED;
|
||||||
if (preferDownloaded())
|
if (preferDownloaded())
|
||||||
flags |= IMPORT_PREFER_IMPORTED;
|
flags |= IMPORT_PREFER_IMPORTED;
|
||||||
if (ui.createNewTrip->isChecked())
|
if (ui.createNewTrip->isChecked())
|
||||||
flags |= IMPORT_ADD_TO_NEW_TRIP;
|
flags |= IMPORT_ADD_TO_NEW_TRIP;
|
||||||
Command::importDives(table, nullptr, sites, flags, data->devName());
|
Command::importDives(&tables.first, nullptr, &tables.second, flags, data->devName());
|
||||||
|
} else {
|
||||||
|
clear_dive_site_table(&tables.second);
|
||||||
}
|
}
|
||||||
|
// The dives and dive sites have been consumed, but the arrays of the tables
|
||||||
|
// still exist. Free them.
|
||||||
|
free(tables.first.dives);
|
||||||
|
free(tables.second.dive_sites);
|
||||||
|
|
||||||
if (ostcFirmwareCheck && currentState == DONE)
|
if (ostcFirmwareCheck && currentState == DONE)
|
||||||
ostcFirmwareCheck->checkLatest(this, diveImportedModel->thread.data()->internalData());
|
ostcFirmwareCheck->checkLatest(this, diveImportedModel->thread.data()->internalData());
|
||||||
|
|
|
@ -155,6 +155,26 @@ void DiveImportedModel::repopulate(dive_table_t *table, struct dive_site_table *
|
||||||
endResetModel();
|
endResetModel();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
std::pair<struct dive_table, struct dive_site_table> DiveImportedModel::consumeTables()
|
||||||
|
{
|
||||||
|
beginResetModel();
|
||||||
|
|
||||||
|
// Move tables to result
|
||||||
|
struct dive_table dives;
|
||||||
|
struct dive_site_table sites;
|
||||||
|
move_dive_table(diveTable, &dives);
|
||||||
|
move_dive_site_table(sitesTable, &sites);
|
||||||
|
|
||||||
|
// Reset indexes
|
||||||
|
firstIndex = 0;
|
||||||
|
lastIndex = -1;
|
||||||
|
checkStates.clear();
|
||||||
|
|
||||||
|
endResetModel();
|
||||||
|
|
||||||
|
return std::make_pair(dives, sites);
|
||||||
|
}
|
||||||
|
|
||||||
// Delete non-selected dives
|
// Delete non-selected dives
|
||||||
void DiveImportedModel::deleteDeselected()
|
void DiveImportedModel::deleteDeselected()
|
||||||
{
|
{
|
||||||
|
|
|
@ -22,6 +22,7 @@ public:
|
||||||
Q_INVOKABLE void clearTable();
|
Q_INVOKABLE void clearTable();
|
||||||
QHash<int, QByteArray> roleNames() const;
|
QHash<int, QByteArray> roleNames() const;
|
||||||
void deleteDeselected();
|
void deleteDeselected();
|
||||||
|
std::pair<struct dive_table, struct dive_site_table> consumeTables(); // Returns dives and sites and resets model.
|
||||||
Q_INVOKABLE void recordDives();
|
Q_INVOKABLE void recordDives();
|
||||||
Q_INVOKABLE void startDownload();
|
Q_INVOKABLE void startDownload();
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue