diff --git a/README.md b/README.md index 63f036c..1a924b4 100644 --- a/README.md +++ b/README.md @@ -78,6 +78,7 @@ func main() { spm.Run() } ``` +*Functions, and specifically their names, are subject to change as I really don't like "AutoDownloadSpecified," but I don't want to make it "DownloadSpecified" yet, as there are still many functions in SPM used for manual downloads, installs, etc.*
License diff --git a/auto.go b/auto.go index d544a44..491bb66 100644 --- a/auto.go +++ b/auto.go @@ -196,22 +196,23 @@ func DownloadSpecified(specs []AppIndexEntry) error { } fmt.Printf("[INFO] Found matching APPINDEX entry: %+v\n", *matchingEntry) - updateNeeded, err := IsUpdateNeeded( - installDir, - matchingEntry.Name, - matchingEntry.Release, - matchingEntry.Version, - matchingEntry.Arch, - matchingEntry.OS, - ) - if err != nil { - return fmt.Errorf("[ERROR] Failed to check if update is needed for %s: %w", matchingEntry.Name, err) - } + // // Check if an update is needed + // updateNeeded, err := IsUpdateNeeded( + // installDir, + // matchingEntry.Name, + // matchingEntry.Release, + // matchingEntry.Version, + // matchingEntry.Arch, + // matchingEntry.OS, + // ) + // if err != nil { + // return fmt.Errorf("[ERROR] Failed to check if update is needed for %s: %w", matchingEntry.Name, err) + // } - if !updateNeeded { - fmt.Printf("[INFO] No update needed for package '%s'\n", matchingEntry.Name) - continue - } + // if !updateNeeded { + // fmt.Printf("[INFO] No update needed for package '%s'\n", matchingEntry.Name) + // continue + // } // 5) Download the package downloadDir := GetTempDir() @@ -242,7 +243,7 @@ func DownloadSpecified(specs []AppIndexEntry) error { } fmt.Printf("[INFO] Package '%s' decompressed successfully to: %s\n", matchingEntry.Name, tempDir) - // Add to pendingUpdates for InstallUpdates + // 7) Store in pendingUpdates for InstallUpdates fmt.Printf("[INFO] Adding '%s' to pending updates\n", matchingEntry.Name) pendingUpdates = append(pendingUpdates, *matchingEntry) } diff --git a/go.mod b/go.mod index f4c1524..8b67881 100644 --- a/go.mod +++ b/go.mod @@ -1,12 +1,7 @@ module weforge.xyz/Spitfire/SPM -go 1.23.0 +go 1.21 -toolchain go1.24.1 - -require ( - golang.org/x/sys v0.31.0 - gopkg.in/ini.v1 v1.67.0 -) +require gopkg.in/ini.v1 v1.67.0 require github.com/stretchr/testify v1.10.0 // indirect diff --git a/go.sum b/go.sum index bd54818..be248fb 100644 --- a/go.sum +++ b/go.sum @@ -4,8 +4,6 @@ github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZb github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/stretchr/testify v1.10.0 h1:Xv5erBjTwe/5IxqUQTdXv5kgmIvbHo3QQyRwhJsOfJA= github.com/stretchr/testify v1.10.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= -golang.org/x/sys v0.31.0 h1:ioabZlmFYtWhL+TRYpcnNlLwhyxaM9kWTDEmfnprqik= -golang.org/x/sys v0.31.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k= gopkg.in/ini.v1 v1.67.0 h1:Dgnx+6+nfE+IfzjUEISNeydPJh9AXNNsWbGP9KzCsOA= gopkg.in/ini.v1 v1.67.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= diff --git a/register_unix.go b/register_unix.go index f9e35c9..d3911bf 100644 --- a/register_unix.go +++ b/register_unix.go @@ -12,12 +12,12 @@ import ( // RegisterApp is not supported on non-Windows platforms. func RegisterApp() error { - return fmt.Errorf("[WARN] RegisterApp() is only available on Windows") + return fmt.Errorf("RegisterApp is only available on Windows") } // UnregisterApp is not supported on non-Windows platforms. func UnregisterApp() error { - return fmt.Errorf("[WARN] UnregisterApp() is only available on Windows") + return fmt.Errorf("UnregisterApp is only available on Windows") } // IsRegistered returns true if the application is detected as installed. diff --git a/run_win.go b/run_win.go index 706b6d4..a108d7e 100644 --- a/run_win.go +++ b/run_win.go @@ -9,10 +9,7 @@ import ( "os" "os/exec" "path/filepath" - "strings" - "time" - - "golang.org/x/sys/windows" + "syscall" ) // Run locates and starts the installed Spitfire browser without waiting for it to exit. @@ -36,6 +33,7 @@ func RunAndWait() error { return fmt.Errorf("failed to get install directory: %w", err) } + // Construct the browser executable path exePath := filepath.Join(installDir, "browser", "spitfire.exe") if _, err := os.Stat(exePath); err != nil { return fmt.Errorf("browser executable not found at %s: %w", exePath, err) @@ -44,29 +42,23 @@ func RunAndWait() error { cmd := exec.Command(exePath) cmd.Stdout = os.Stdout cmd.Stderr = os.Stderr - cmd.Dir = filepath.Join(installDir, "browser") - // Create job object starting the process - job, err := windows.CreateJobObject(nil, nil) - if err != nil { - return fmt.Errorf("failed to create job object: %w", err) + // Use CREATE_NEW_PROCESS_GROUP flag for Windows + cmd.SysProcAttr = &syscall.SysProcAttr{ + CreationFlags: syscall.CREATE_NEW_PROCESS_GROUP, } - defer windows.CloseHandle(job) fmt.Printf("Starting browser: %s\n", exePath) if err := cmd.Start(); err != nil { return fmt.Errorf("failed to start browser: %w", err) } - for { - cmd := exec.Command("tasklist", "/FI", "IMAGENAME eq spitfire.exe") - output, _ := cmd.Output() - if !strings.Contains(string(output), "spitfire.exe") { - break - } - time.Sleep(1 * time.Second) + fmt.Printf("Browser process started with PID %d\n", cmd.Process.Pid) + + if err := cmd.Wait(); err != nil { + return fmt.Errorf("browser exited with error: %w", err) } - fmt.Println("Browser exited.") + fmt.Println("Browser exited successfully.") return nil }