Threadsafe please

This commit is contained in:
2025-10-03 16:09:13 +02:00
parent fc3a0d026f
commit f2c4c05b27
2 changed files with 36 additions and 25 deletions

5
log.go
View File

@@ -4,6 +4,7 @@ import (
"fmt" "fmt"
"strings" "strings"
"fyne.io/fyne/v2"
"fyne.io/fyne/v2/widget" "fyne.io/fyne/v2/widget"
) )
@@ -13,7 +14,7 @@ type Logger struct {
logMaxLines int logMaxLines int
} }
var globalLogger *Logger; var globalLogger *Logger
func InitLogger(text *widget.Entry, maxLines int) { func InitLogger(text *widget.Entry, maxLines int) {
globalLogger = &Logger{ globalLogger = &Logger{
@@ -32,9 +33,11 @@ func Log(line string) {
} }
func (l *Logger) log(line string) { func (l *Logger) log(line string) {
fyne.Do(func() {
l.logBuffer = append(l.logBuffer, line) l.logBuffer = append(l.logBuffer, line)
if len(l.logBuffer) > l.logMaxLines { if len(l.logBuffer) > l.logMaxLines {
l.logBuffer = l.logBuffer[1:] l.logBuffer = l.logBuffer[1:]
} }
l.logText.SetText(strings.Join(l.logBuffer, "\n")) l.logText.SetText(strings.Join(l.logBuffer, "\n"))
})
} }

View File

@@ -85,14 +85,13 @@ func GenerateUnrealSolution(project Project) {
cmd = exec.Command(buildCmd, projectFile, "-game") cmd = exec.Command(buildCmd, projectFile, "-game")
case "windows": case "windows":
editor := project.EnginePath + "\\Engine\\Binaries\\Win64\\UnrealEditor.exe" ubtPath := project.EnginePath + "\\Engine\\Binaries\\DotNET\\UnrealBuildTool\\UnrealBuildTool.dll"
cmd = exec.Command( cmd = exec.Command(
editor, "dotnet", ubtPath,
projectFile,
"-projectfiles", "-projectfiles",
"-project="+projectFile,
"-game",
"-progress", "-progress",
"-waitmutex",
"-NoHotReloadFromIDE",
) )
default: default:
@@ -167,18 +166,27 @@ func logToOutput(cmd *exec.Cmd) {
fmt.Println("Error while loading command") fmt.Println("Error while loading command")
} }
readPipe := func(reader io.ReadCloser) { readPipe := func(reader io.ReadCloser, prefix string) {
scanner := bufio.NewScanner(reader) scanner := bufio.NewScanner(reader)
for scanner.Scan() { for scanner.Scan() {
line := scanner.Text() line := scanner.Text()
if prefix != "" {
Log(prefix + line)
} else {
Log(line) Log(line)
} }
} }
go readPipe(stdout)
go readPipe(stderr)
if err := cmd.Wait(); err != nil {
fmt.Println("Error")
} }
go readPipe(stdout, "")
go readPipe(stderr, "[ERR] ")
// attendre la fin dans une goroutine => pas de blocage de l'UI
go func() {
if err := cmd.Wait(); err != nil {
Log("[FAIL] " + err.Error())
} else {
Log("[DONE] Process finished")
}
}()
} }