fix(gtk): defer mods list update until actual changes
This commit is contained in:
parent
222120f935
commit
75280b8897
@ -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) {
|
||||
if (mod.name.contains(currentSearchString, true)) {
|
||||
//TODO improve this search
|
||||
this@ModsTab.mods[mod.name] = ModState.Installed(mod)
|
||||
toShow.add(mod.name)
|
||||
if (mod.name.contains(currentSearchString, true)) {
|
||||
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)
|
||||
}
|
||||
}
|
||||
}
|
||||
if (toShow != previous || contentChanged) {
|
||||
listModel.replaceAll(toShow.toTypedArray())
|
||||
previous = toShow
|
||||
}
|
||||
GLib.SOURCE_CONTINUE
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user