Mobile: disconnect model while updating dive list

If the dive list is connected to the model while the model is updated
with the downloaded dives, sometimes the UI hangs completely.

Disconnecting the model and then reconnecting it does add a fairly
noticeable delay on longer dive lists, so there are tradeoffs here.

Of course the obvious solution is to make reconnecting the model
faster...

Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
This commit is contained in:
Dirk Hohndel 2019-10-29 19:19:31 +01:00
parent 113cb1acc0
commit 9f34f4f97d
2 changed files with 20 additions and 2 deletions

View file

@ -385,19 +385,28 @@ Kirigami.Page {
text: qsTr("Accept")
bottomPadding: Kirigami.Units.gridUnit / 2
onClicked: {
manager.appendTextToLog("Save downloaded dives that were selected")
busy = true
rootItem.showBusy()
manager.appendTextToLog("Save downloaded dives that were selected")
manager.appendTextToLog("temporary disconnecting dive list model")
diveList.diveListModel = null
manager.appendTextToLog("Record dives")
importModel.recordDives()
manager.saveChangesLocal()
manager.appendTextToLog("resetting model and refreshing the dive list")
diveModel.resetInternalData()
manager.refreshDiveList()
manager.appendTextToLog("pageStack popping Download page")
pageStack.pop()
pageStack.push(diveList)
manager.appendTextToLog("setting up the dive list model again")
diveList.diveListModel = diveModel
manager.appendTextToLog("pageStack switching to dive list")
showDiveList()
download.text = qsTr("Download")
busy = false
rootItem.hideBusy()
divesDownloaded = false
manager.appendTextToLog("switch to dive list has completed")
}
}
Controls.Label {

View file

@ -103,7 +103,16 @@ Kirigami.ApplicationWindow {
pageStack.push(mapPage)
else
pageStack.currentIndex = i
}
function showDiveList() {
if (globalDrawer.drawerOpen)
globalDrawer.close()
var i=pageIndex(diveList)
if (i === -1)
pageStack.push(diveList)
else
pageStack.currentIndex = i
}
function pageIndex(pageToFind) {