diff --git a/backend/app.go b/backend/app.go index 5e5dc1e..1eae20e 100644 --- a/backend/app.go +++ b/backend/app.go @@ -437,7 +437,7 @@ func (a *App) SetupWindowsSMTC(hwnd uintptr) { }) } -func (a *App) LoginToDefaultServer(string) error { +func (a *App) LoginToDefaultServer() error { serverCfg := a.ServerManager.GetDefaultServer() if serverCfg == nil { return ErrNoServers @@ -548,6 +548,8 @@ func (a *App) checkFlagsAndSendIPCMsg(cli *ipc.Client) error { return cli.SeekBackOrPrevious() case *FlagNext: return cli.SeekNext() + case *FlagShow: + return cli.Show() case VolumeCLIArg >= 0: return cli.SetVolume(VolumeCLIArg) case VolumePctCLIArg != 0: diff --git a/backend/cmdlineoptions.go b/backend/cmdlineoptions.go index 9f022b1..c7252ed 100644 --- a/backend/cmdlineoptions.go +++ b/backend/cmdlineoptions.go @@ -12,13 +12,15 @@ var ( SeekByCLIArg float64 = 0 VolumePctCLIArg float64 = 0 - FlagPlay = flag.Bool("play", false, "unpause or begin playback") - FlagPause = flag.Bool("pause", false, "pause playback") - FlagPlayPause = flag.Bool("play-pause", false, "toggle play/pause state") - FlagPrevious = flag.Bool("previous", false, "seek to previous track or beginning of current") - FlagNext = flag.Bool("next", false, "seek to next track") - FlagVersion = flag.Bool("version", false, "print app version and exit") - FlagHelp = flag.Bool("help", false, "print command line options and exit") + FlagPlay = flag.Bool("play", false, "unpause or begin playback") + FlagPause = flag.Bool("pause", false, "pause playback") + FlagPlayPause = flag.Bool("play-pause", false, "toggle play/pause state") + FlagPrevious = flag.Bool("previous", false, "seek to previous track or beginning of current") + FlagNext = flag.Bool("next", false, "seek to next track") + FlagStartMinimized = flag.Bool("start-minimized", false, "start app minimized") + FlagShow = flag.Bool("show", false, "show minimized app") + FlagVersion = flag.Bool("version", false, "print app version and exit") + FlagHelp = flag.Bool("help", false, "print command line options and exit") ) func init() { @@ -50,8 +52,11 @@ func init() { func HaveCommandLineOptions() bool { visitedAny := false - flag.Visit(func(*flag.Flag) { - visitedAny = true + flag.Visit(func(f *flag.Flag) { + // We skip `start-minimized` because it should't send an IPC message. + if f.Name != "start-minimized" { + visitedAny = true + } }) return visitedAny } diff --git a/main.go b/main.go index e5ec0f5..25e8563 100644 --- a/main.go +++ b/main.go @@ -87,7 +87,7 @@ func main() { defaultServer := myApp.ServerManager.GetDefaultServer() if defaultServer == nil { mainWindow.Controller.PromptForFirstServer() - } else { + } else if !*backend.FlagStartMinimized { // If the minimized start flag was passed, the connection is already established. mainWindow.Controller.DoConnectToServerWorkflow(defaultServer) } @@ -103,7 +103,15 @@ func main() { }) fyneApp.Lifecycle().SetOnEnteredForeground(windowStartupTasks) - mainWindow.ShowAndRun() + if *backend.FlagStartMinimized { + if err = myApp.LoginToDefaultServer(); err != nil { + log.Fatalf("failed to connect to server: %v", err.Error()) + return + } + fyneApp.Run() + } else { + mainWindow.ShowAndRun() + } log.Println("Running shutdown tasks...") myApp.Shutdown()