From f2c4c05b27343638a0537621c4fe81c9ac4c7f75 Mon Sep 17 00:00:00 2001 From: Yann Date: Fri, 3 Oct 2025 16:09:13 +0200 Subject: [PATCH] Threadsafe please --- log.go | 29 ++++++++++++++++------------- utils.go | 32 ++++++++++++++++++++------------ 2 files changed, 36 insertions(+), 25 deletions(-) diff --git a/log.go b/log.go index 6ef72d5..4719a9f 100644 --- a/log.go +++ b/log.go @@ -4,22 +4,23 @@ import ( "fmt" "strings" + "fyne.io/fyne/v2" "fyne.io/fyne/v2/widget" ) type Logger struct { - logText *widget.Entry - logBuffer []string + logText *widget.Entry + logBuffer []string logMaxLines int } -var globalLogger *Logger; +var globalLogger *Logger func InitLogger(text *widget.Entry, maxLines int) { - globalLogger = &Logger{ - logText: text, - logMaxLines: maxLines, - } + globalLogger = &Logger{ + logText: text, + logMaxLines: maxLines, + } } func Log(line string) { @@ -32,9 +33,11 @@ func Log(line string) { } func (l *Logger) log(line string) { - l.logBuffer = append(l.logBuffer, line) - if len(l.logBuffer) > l.logMaxLines { - l.logBuffer = l.logBuffer[1:] - } - l.logText.SetText(strings.Join(l.logBuffer, "\n")) -} \ No newline at end of file + fyne.Do(func() { + l.logBuffer = append(l.logBuffer, line) + if len(l.logBuffer) > l.logMaxLines { + l.logBuffer = l.logBuffer[1:] + } + l.logText.SetText(strings.Join(l.logBuffer, "\n")) + }) +} diff --git a/utils.go b/utils.go index 5e86416..abc2c57 100644 --- a/utils.go +++ b/utils.go @@ -85,14 +85,13 @@ func GenerateUnrealSolution(project Project) { cmd = exec.Command(buildCmd, projectFile, "-game") case "windows": - editor := project.EnginePath + "\\Engine\\Binaries\\Win64\\UnrealEditor.exe" + ubtPath := project.EnginePath + "\\Engine\\Binaries\\DotNET\\UnrealBuildTool\\UnrealBuildTool.dll" cmd = exec.Command( - editor, - projectFile, + "dotnet", ubtPath, "-projectfiles", + "-project="+projectFile, + "-game", "-progress", - "-waitmutex", - "-NoHotReloadFromIDE", ) default: @@ -167,18 +166,27 @@ func logToOutput(cmd *exec.Cmd) { fmt.Println("Error while loading command") } - readPipe := func(reader io.ReadCloser) { + readPipe := func(reader io.ReadCloser, prefix string) { scanner := bufio.NewScanner(reader) for scanner.Scan() { line := scanner.Text() - Log(line) + if prefix != "" { + Log(prefix + line) + } else { + Log(line) + } } } - go readPipe(stdout) - go readPipe(stderr) + go readPipe(stdout, "") + go readPipe(stderr, "[ERR] ") - if err := cmd.Wait(); err != nil { - fmt.Println("Error") - } + // 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") + } + }() }