Mobile: update dive site model if dive sites are created

Always keep the dive site model up to date when adding dive sites.
This hopefully avoids creation of invalid indexes followed by crashes.

Signed-off-by: Berthold Stoeger <bstoeger@mail.tuwien.ac.at>
This commit is contained in:
Berthold Stoeger 2019-08-10 17:41:35 +02:00 committed by Dirk Hohndel
parent f18ea2e3b6
commit 0cce3ef2a8
2 changed files with 14 additions and 2 deletions

View file

@ -333,13 +333,19 @@ void QMLManager::openLocalThenRemote(QString url)
updateAllGlobalLists();
}
void QMLManager::updateSiteList()
{
LocationInformationModel::instance()->update();
emit locationListChanged();
}
void QMLManager::updateAllGlobalLists()
{
buddyModel.updateModel(); emit buddyListChanged();
suitModel.updateModel(); emit suitListChanged();
divemasterModel.updateModel(); emit divemasterListChanged();
// TODO: Probably not needed anymore, as the dive site list is generated on the fly!
LocationInformationModel::instance()->update(); emit locationListChanged();
updateSiteList();
}
void QMLManager::mergeLocalRepo()
@ -774,7 +780,7 @@ void QMLManager::refreshDiveList()
DiveListModel::instance()->addAllDives();
}
static void setupDivesite(struct dive *d, struct dive_site *ds, double lat, double lon, const char *locationtext)
void QMLManager::setupDivesite(struct dive *d, struct dive_site *ds, double lat, double lon, const char *locationtext)
{
location_t location = create_location(lat, lon);
if (ds) {
@ -782,6 +788,8 @@ static void setupDivesite(struct dive *d, struct dive_site *ds, double lat, doub
} else {
unregister_dive_from_dive_site(d);
add_dive_to_dive_site(d, create_dive_site_with_gps(locationtext, &location, &dive_site_table));
// We created a new dive site - let the dive site model know.
updateSiteList();
}
}
@ -902,6 +910,8 @@ bool QMLManager::checkLocation(DiveObjectHelper *myDive, struct dive *d, QString
ds = create_dive_site(qPrintable(location), &dive_site_table);
unregister_dive_from_dive_site(d);
add_dive_to_dive_site(d, ds);
// We created a new dive site - let the dive site model know.
updateSiteList();
}
// now make sure that the GPS coordinates match - if the user changed the name but not
// the GPS coordinates, this still does the right thing as the now new dive site will

View file

@ -236,6 +236,8 @@ private:
QString m_progressMessage;
bool m_btEnabled;
void updateAllGlobalLists();
void updateSiteList();
void setupDivesite(struct dive *d, struct dive_site *ds, double lat, double lon, const char *locationtext);
QString m_pluggedInDeviceName;
bool m_showNonDiveComputers;
struct dive *m_copyPasteDive = NULL;