summaryrefslogtreecommitdiffstats
path: root/mobile-widgets
diff options
context:
space:
mode:
authorGravatar Dirk Hohndel <dirk@hohndel.org>2016-04-05 21:17:37 -0700
committerGravatar Dirk Hohndel <dirk@hohndel.org>2016-04-05 21:17:37 -0700
commit1634c62b9a156b59faab4ed89d64c359ba0580f2 (patch)
treeeda73fe7126132f586ef839a110e62b824d65dcc /mobile-widgets
parentf16a3a1709be50cb2ed4f4ca0e1e9bb5217cc25f (diff)
downloadsubsurface-1634c62b9a156b59faab4ed89d64c359ba0580f2.tar.gz
DiveListModel: don't add the dives one at a time
Most of the time we are adding all the dives, so do this in a single model operation. This makes the case when adding a single dive (in the undo delete function) slightly more complicated, but that seems totally worth it for the speedup in the common case. Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
Diffstat (limited to 'mobile-widgets')
-rw-r--r--mobile-widgets/qmlmanager.cpp30
1 files changed, 10 insertions, 20 deletions
diff --git a/mobile-widgets/qmlmanager.cpp b/mobile-widgets/qmlmanager.cpp
index cbd184539..371e67498 100644
--- a/mobile-widgets/qmlmanager.cpp
+++ b/mobile-widgets/qmlmanager.cpp
@@ -142,14 +142,10 @@ void QMLManager::openLocalThenRemote(QString url)
if (informational_prefs.unit_system == IMPERIAL)
informational_prefs.units = IMPERIAL_units;
prefs.units = informational_prefs.units;
- int i;
- struct dive *d;
process_dives(false, false);
DiveListModel::instance()->clear();
- for_each_dive (i, d) {
- DiveListModel::instance()->addDive(d);
- }
- appendTextToLog(QStringLiteral("%1 dives loaded from cache").arg(i));
+ DiveListModel::instance()->addAllDives();
+ appendTextToLog(QStringLiteral("%1 dives loaded from cache").arg(dive_table.nr));
}
appendTextToLog(QStringLiteral("have cloud credentials, trying to connect"));
tryRetrieveDataFromBackend();
@@ -390,15 +386,11 @@ void QMLManager::loadDivesWithValidCredentials()
if (informational_prefs.unit_system == IMPERIAL)
informational_prefs.units = IMPERIAL_units;
prefs.units = informational_prefs.units;
+ clear_dive_file_data();
+ DiveListModel::instance()->clear();
process_dives(false, false);
-
- int i;
- struct dive *d;
-
- for_each_dive (i, d) {
- DiveListModel::instance()->addDive(d);
- }
- appendTextToLog(QStringLiteral("%1 dives loaded").arg(i));
+ DiveListModel::instance()->addAllDives();
+ appendTextToLog(QStringLiteral("%1 dives loaded").arg(dive_table.nr));
if (dive_table.nr == 0)
setStartPageText(tr("Cloud storage open successfully. No dives in dive list."));
setLoadFromCloud(true);
@@ -406,12 +398,8 @@ void QMLManager::loadDivesWithValidCredentials()
void QMLManager::refreshDiveList()
{
- int i;
- struct dive *d;
DiveListModel::instance()->clear();
- for_each_dive (i, d) {
- DiveListModel::instance()->addDive(d);
- }
+ DiveListModel::instance()->addAllDives();
}
// update the dive and return the notes field, stripped of the HTML junk
@@ -777,7 +765,9 @@ void QMLManager::undoDelete(int id)
deletedDive->tripflag = tripflag;
}
record_dive(deletedDive);
- DiveListModel::instance()->addDive(deletedDive);
+ QList<dive *>diveAsList;
+ diveAsList << deletedDive;
+ DiveListModel::instance()->addDive(diveAsList);
// make sure the changes get saved if the app is no longer in the foreground
// or if the user requests a save
mark_divelist_changed(true);