fix(gtk): defer mods list update until actual changes

This commit is contained in:
Johannes Frohnmeyer 2024-10-04 18:41:21 +02:00
parent 222120f935
commit 75280b8897
Signed by: Johannes
GPG Key ID: E76429612C2929F4

View File

@ -82,17 +82,24 @@ class ModsTab(window: InstanceSettingsWindow) : SettingsTab<Leaflet, InstanceSet
//TODO content
})
var previous: List<String> = emptyList()
addTickCallback { _, _ ->
val toShow = mutableListOf<String>()
var contentChanged = false
fun discover(state: ModState) {
if (mods.put(state.name, state) != state) {
contentChanged = true
}
toShow.add(state.name)
}
if (page == Page.LOCAL) {
loadingRevealer.setRunning(!mds.isComplete(ScanStage.DISCOVER))
val mods = window.instance.mds.mods // avoid instance.mods to allow rendering before MDS is finished
loadingRevealer.setProgress((mods.filter { mds.hasScanned(it) }.size.toDouble() / mods.size))
for (mod in mods) {
//TODO improve this search
if (mod.name.contains(currentSearchString, true)) {
//TODO improve this search
this@ModsTab.mods[mod.name] = ModState.Installed(mod)
toShow.add(mod.name)
discover(ModState.Installed(mod))
}
}
} else {
@ -100,12 +107,14 @@ class ModsTab(window: InstanceSettingsWindow) : SettingsTab<Leaflet, InstanceSet
loadingRevealer.pulse()
if (searchResult != null) {
for (mod in searchResult.orEmpty()) {
this@ModsTab.mods[mod.name] = mod
toShow.add(mod.name)
discover(mod)
}
}
}
listModel.replaceAll(toShow.toTypedArray())
if (toShow != previous || contentChanged) {
listModel.replaceAll(toShow.toTypedArray())
previous = toShow
}
GLib.SOURCE_CONTINUE
}
}