in rider/src/main/kotlin/com/jetbrains/rider/plugins/godot/GodotFileDocumentManagerListener.kt [24:50]
override fun beforeAllDocumentsSaving() {
val projectManager = serviceIfCreated<ProjectManager>() ?: return
val openedGodotProjects = projectManager.openProjects.filter { !it.isDisposed
&& (GodotProjectDiscoverer.getInstance(it).isGodotProject.valueOrDefault(false))
&& (GodotProjectDiscoverer.getInstance(it).godotDescriptor.valueOrNull?.isPureGdScriptProject == false)
}.toList()
for (project in openedGodotProjects)
application.invokeLater {
if (project.isDisposed) return@invokeLater
val buildAutomatically = project.solution.godotFrontendBackendModel.backendSettings.buildAutomatically.valueOrDefault(false)
if (!buildAutomatically) return@invokeLater
// it makes no sense to build, if Godot is not running
if (project.solution.godotFrontendBackendModel.editorState.valueOrDefault(GodotEditorState.Disconnected) != GodotEditorState.Connected)
return@invokeLater
val isActive = project.protocolHostIfExists?.protocol?.rdShellModel?.isApplicationActive?.valueOrNull
if (isActive != null && !isActive) {
val buildHost = BuildHost.getInstance(project)
if (buildHost.ready.value && !buildHost.building.value) {
val mainProjectPath = GodotProjectDiscoverer.getInstance(project).godotDescriptor.valueOrNull?.mainProjectPath ?: return@invokeLater
buildHost.requestBuild(BuildParameters(BuildTarget(), listOf(mainProjectPath), silentMode = true)) {
showAutoBuildNotification(project)
}
}
}
}
}