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