11package main
22
33import (
4- "context"
5- "log"
6- "net/http"
7- "os"
8- "os/exec"
9- "path/filepath"
10- "runtime"
11- "strings"
12-
13- "github.com/liteldev/LeviLauncher/internal/discord"
14- "github.com/wailsapp/wails/v3/pkg/application"
15-
16- "github.com/liteldev/LeviLauncher/internal/content"
17- "github.com/liteldev/LeviLauncher/internal/gameinput"
18- "github.com/liteldev/LeviLauncher/internal/lang"
19- "github.com/liteldev/LeviLauncher/internal/launch"
20- "github.com/liteldev/LeviLauncher/internal/mcservice"
21- "github.com/liteldev/LeviLauncher/internal/mods"
22- "github.com/liteldev/LeviLauncher/internal/peeditor"
23- "github.com/liteldev/LeviLauncher/internal/preloader"
24- "github.com/liteldev/LeviLauncher/internal/registry"
25- "github.com/liteldev/LeviLauncher/internal/types"
26- "github.com/liteldev/LeviLauncher/internal/update"
27- "github.com/liteldev/LeviLauncher/internal/utils"
28- "github.com/liteldev/LeviLauncher/internal/vcruntime"
29- "github.com/liteldev/LeviLauncher/internal/versions"
30- "github.com/liteldev/LeviLauncher/internal/winegdk"
4+ "context"
5+ "log"
6+ "net/http"
7+ "os"
8+ "os/exec"
9+ "path/filepath"
10+ "runtime"
11+ "strings"
12+
13+ "github.com/liteldev/LeviLauncher/internal/discord"
14+ "github.com/wailsapp/wails/v3/pkg/application"
15+
16+ "github.com/liteldev/LeviLauncher/internal/content"
17+ "github.com/liteldev/LeviLauncher/internal/gameinput"
18+ "github.com/liteldev/LeviLauncher/internal/lang"
19+ "github.com/liteldev/LeviLauncher/internal/launch"
20+ "github.com/liteldev/LeviLauncher/internal/mcservice"
21+ "github.com/liteldev/LeviLauncher/internal/mods"
22+ "github.com/liteldev/LeviLauncher/internal/peeditor"
23+ "github.com/liteldev/LeviLauncher/internal/preloader"
24+ "github.com/liteldev/LeviLauncher/internal/registry"
25+ "github.com/liteldev/LeviLauncher/internal/types"
26+ "github.com/liteldev/LeviLauncher/internal/update"
27+ "github.com/liteldev/LeviLauncher/internal/utils"
28+ "github.com/liteldev/LeviLauncher/internal/vcruntime"
29+ "github.com/liteldev/LeviLauncher/internal/versions"
30+ "github.com/liteldev/LeviLauncher/internal/winegdk"
3131)
3232
3333const (
@@ -168,13 +168,13 @@ func (a *Minecraft) EnsureGameInputInteractive() { go gameinput.EnsureInteractiv
168168func (a * Minecraft ) IsGameInputInstalled () bool { return gameinput .IsInstalled () }
169169
170170func (a * Minecraft ) IsGamingServicesInstalled () bool {
171- if runtime .GOOS == "linux" {
172- return true
173- }
174- if _ , err := registry .GetAppxInfo ("Microsoft.GamingServices" ); err == nil {
175- return true
176- }
177- return false
171+ if runtime .GOOS == "linux" {
172+ return true
173+ }
174+ if _ , err := registry .GetAppxInfo ("Microsoft.GamingServices" ); err == nil {
175+ return true
176+ }
177+ return false
178178}
179179
180180func (a * Minecraft ) StartMsixvcDownload (url string ) string {
@@ -572,8 +572,13 @@ func (a *Minecraft) SetupWineGDK() string { return winegdk.Setup(a.ctx) }
572572
573573func (a * Minecraft ) GetRuntimeGOOS () string { return runtime .GOOS }
574574
575+ func (a * Minecraft ) IsWineReady () bool {
576+ if runtime .GOOS != "linux" { return true }
577+ return strings .TrimSpace (winegdk .FindWineBin ()) != ""
578+ }
579+
575580func (a * Minecraft ) TestMirrorLatencies (urls []string , timeoutMs int ) []map [string ]interface {} {
576- return mcservice .TestMirrorLatencies (urls , timeoutMs )
581+ return mcservice .TestMirrorLatencies (urls , timeoutMs )
577582}
578583
579584func (a * Minecraft ) launchVersionInternal (name string , checkRunning bool ) string {
@@ -603,44 +608,34 @@ func (a *Minecraft) launchVersionInternal(name string, checkRunning bool) string
603608 }
604609 gameVer = strings .TrimSpace (m .GameVersion )
605610 }
606- if checkRunning {
607- if isProcessRunningAtPath (toRun ) {
608- return "ERR_GAME_ALREADY_RUNNING"
609- }
610- }
611- var cmd * exec.Cmd
612- if runtime .GOOS == "linux" {
613- base := utils .BaseRoot ()
614- wine := filepath .Join (base , "wine" , "files" , "bin" , "wine" )
615- if _ , err := os .Stat (wine ); err != nil {
616- wow := filepath .Join (base , "wine" , "files" , "bin-wow64" , "wine" )
617- if _ , er2 := os .Stat (wow ); er2 == nil {
618- wine = wow
619- } else {
620- alt := filepath .Join (base , "wine" , "files" , "bin" , "wine64" )
621- if _ , er3 := os .Stat (alt ); er3 == nil { wine = alt } else { return "ERR_WINE_NOT_AVAILABLE" }
622- }
623- }
624- pf := filepath .Join (base , "prefix" )
625- _ = os .MkdirAll (pf , 0755 )
626- var argv []string
627- argv = append (argv , toRun )
628- argv = append (argv , args ... )
629- cmd = exec .Command (wine , argv ... )
630- cmd .Env = append (os .Environ (), "WINEPREFIX=" + pf )
631- } else {
632- cmd = exec .Command (toRun , args ... )
633- }
634- cmd .Dir = filepath .Dir (toRun )
635- cmd .Stdout = os .Stdout
636- cmd .Stderr = os .Stderr
637- cmd .Stdin = os .Stdin
638- if err := cmd .Start (); err != nil {
639- return "ERR_LAUNCH_GAME"
640- }
641- discord .SetPlayingVersion (gameVer )
642- go launch .MonitorMinecraftWindow (a .ctx )
643- return ""
611+ if checkRunning {
612+ if isProcessRunningAtPath (toRun ) {
613+ return "ERR_GAME_ALREADY_RUNNING"
614+ }
615+ }
616+ var cmd * exec.Cmd
617+ if runtime .GOOS == "linux" {
618+ wine := winegdk .FindWineBin ()
619+ if strings .TrimSpace (wine ) == "" {
620+ return "ERR_WINE_NOT_AVAILABLE"
621+ }
622+ var argv []string
623+ argv = append (argv , toRun )
624+ argv = append (argv , args ... )
625+ cmd = exec .Command (wine , argv ... )
626+ } else {
627+ cmd = exec .Command (toRun , args ... )
628+ }
629+ cmd .Dir = filepath .Dir (toRun )
630+ cmd .Stdout = os .Stdout
631+ cmd .Stderr = os .Stderr
632+ cmd .Stdin = os .Stdin
633+ if err := cmd .Start (); err != nil {
634+ return "ERR_LAUNCH_GAME"
635+ }
636+ discord .SetPlayingVersion (gameVer )
637+ go launch .MonitorMinecraftWindow (a .ctx )
638+ return ""
644639}
645640
646641func (a * Minecraft ) GetBaseRoot () string { return mcservice .GetBaseRoot () }
@@ -650,5 +645,3 @@ func (a *Minecraft) SetBaseRoot(root string) string { return mcservice.SetBaseRo
650645func (a * Minecraft ) ResetBaseRoot () string { return mcservice .ResetBaseRoot () }
651646
652647func (a * Minecraft ) CanWriteToDir (path string ) bool { return mcservice .CanWriteToDir (path ) }
653-
654- // isProcessRunningAtPath implemented per-OS
0 commit comments