diff --git a/src/console.go b/src/console.go index 7f0cb0a..a5abe70 100644 --- a/src/console.go +++ b/src/console.go @@ -11,8 +11,8 @@ import ( "github.com/jedib0t/go-pretty/table" "github.com/schollz/progressbar/v3" + "github.com/trembon/switch-library-manager/console" "github.com/trembon/switch-library-manager/db" - "github.com/trembon/switch-library-manager/flags" "github.com/trembon/switch-library-manager/process" "github.com/trembon/switch-library-manager/settings" "go.uber.org/zap" @@ -25,10 +25,10 @@ var ( type Console struct { baseFolder string sugarLogger *zap.SugaredLogger - consoleFlags *flags.ConsoleFlags + consoleFlags *console.ConsoleFlags } -func CreateConsole(baseFolder string, sugarLogger *zap.SugaredLogger, consoleFlags *flags.ConsoleFlags) *Console { +func CreateConsole(baseFolder string, sugarLogger *zap.SugaredLogger, consoleFlags *console.ConsoleFlags) *Console { return &Console{baseFolder: baseFolder, sugarLogger: sugarLogger, consoleFlags: consoleFlags} } diff --git a/src/flags/console-flags.go b/src/console/console-flags.go similarity index 90% rename from src/flags/console-flags.go rename to src/console/console-flags.go index 7f6075f..170a153 100644 --- a/src/flags/console-flags.go +++ b/src/console/console-flags.go @@ -1,4 +1,4 @@ -package flags +package console import ( "flag" @@ -40,7 +40,7 @@ var nspFolder string var recursive bool var exportCsv string -func Initialize() { +func InitializeFlags() { if flag.Parsed() { return } @@ -48,7 +48,7 @@ func Initialize() { flag.StringVar(&mode, "m", "", "console or gui, overrides the gui flag in settings.json") flag.StringVar(&nspFolder, "f", "", "path to NSP folder") flag.BoolVar(&recursive, "r", true, "recursively scan sub folders") - flag.StringVar(&exportCsv, "e", "", "if exists, output missing updates, dlcs and issues as csv") + flag.StringVar(&exportCsv, "e", "", "output missing updates, dlcs and issues as csv") flag.Parse() } @@ -57,12 +57,12 @@ var ( consoleFlagsInstance *ConsoleFlags ) -func GetValues() *ConsoleFlags { +func GetFlagsValues() *ConsoleFlags { if consoleFlagsInstance != nil { return consoleFlagsInstance } if !flag.Parsed() { - Initialize() + InitializeFlags() } flagset := make(map[string]bool) @@ -99,7 +99,7 @@ func GetValues() *ConsoleFlags { } func LogFlags(sugar *zap.SugaredLogger) { - values := GetValues() + values := GetFlagsValues() logFlag(sugar, "m", values.Mode) logFlag(sugar, "f", values.NspFolder) diff --git a/src/console/fixconsole.go b/src/console/fixconsole.go new file mode 100644 index 0000000..a48dd91 --- /dev/null +++ b/src/console/fixconsole.go @@ -0,0 +1,6 @@ +//go:build !windows + +package console + +func FixConsoleOutput() { +} diff --git a/src/console/fixconsole_windows.go b/src/console/fixconsole_windows.go new file mode 100644 index 0000000..2af7442 --- /dev/null +++ b/src/console/fixconsole_windows.go @@ -0,0 +1,34 @@ +//go:build windows + +package console + +import ( + "fmt" + "os" + "runtime" + "syscall" +) + +func FixConsoleOutput() { + if runtime.GOOS == "windows" { + const ATTACH_PARENT_PROCESS = ^uintptr(0) + proc := syscall.MustLoadDLL("kernel32.dll").MustFindProc("AttachConsole") + r0, _, err0 := proc.Call(ATTACH_PARENT_PROCESS) + + if r0 == 0 { // Allocation failed, probably process already has a console + fmt.Printf("Could not allocate console: %s. Check build flags..", err0) + os.Exit(1) + } + + hout, err1 := syscall.GetStdHandle(syscall.STD_OUTPUT_HANDLE) + herr, err2 := syscall.GetStdHandle(syscall.STD_ERROR_HANDLE) + if err1 != nil || err2 != nil { + os.Exit(2) + } + + os.Stdout = os.NewFile(uintptr(hout), "/dev/stdout") + os.Stderr = os.NewFile(uintptr(herr), "/dev/stderr") + + fmt.Print("\r\n") + } +} diff --git a/src/main.go b/src/main.go index 2e06457..4ffa52d 100644 --- a/src/main.go +++ b/src/main.go @@ -7,15 +7,14 @@ import ( "path/filepath" "runtime" "strings" - "syscall" - "github.com/trembon/switch-library-manager/flags" + "github.com/trembon/switch-library-manager/console" "github.com/trembon/switch-library-manager/settings" "go.uber.org/zap" ) func main() { - fixWindowsConsole() + console.FixConsoleOutput() exePath, err := os.Executable() if err != nil { @@ -49,10 +48,10 @@ func main() { appSettings.GUI = false } - flags.Initialize() - flags.LogFlags(sugar) + console.InitializeFlags() + console.LogFlags(sugar) - consoleFlags := flags.GetValues() + consoleFlags := console.GetFlagsValues() useGUI := appSettings.GUI if consoleFlags.Mode.IsSet() { mode := consoleFlags.Mode.String() @@ -100,27 +99,3 @@ func createLogger(workingFolder string, debug bool) *zap.Logger { zap.ReplaceGlobals(logger) return logger } - -func fixWindowsConsole() { - if runtime.GOOS == "windows" { - const ATTACH_PARENT_PROCESS = ^uintptr(0) - proc := syscall.MustLoadDLL("kernel32.dll").MustFindProc("AttachConsole") - r0, _, err0 := proc.Call(ATTACH_PARENT_PROCESS) - - if r0 == 0 { // Allocation failed, probably process already has a console - fmt.Printf("Could not allocate console: %s. Check build flags..", err0) - os.Exit(1) - } - - hout, err1 := syscall.GetStdHandle(syscall.STD_OUTPUT_HANDLE) - herr, err2 := syscall.GetStdHandle(syscall.STD_ERROR_HANDLE) - if err1 != nil || err2 != nil { - os.Exit(2) - } - - os.Stdout = os.NewFile(uintptr(hout), "/dev/stdout") - os.Stderr = os.NewFile(uintptr(herr), "/dev/stderr") - - fmt.Print("\r\n") - } -}