//go:build windows package main import ( _ "embed" "github.com/getlantern/systray" "log" "net/http" "tawesoft.co.uk/go/dialog" ) //go:generate go-winres make //go:embed tray.ico var icon []byte func main() { path := flag.String("config", "./config.yml", "Set the configuration file path") flag.Parse() appConfiguration, err := config.Load(*path) if err != nil { dialog.Alert("An error occured while starting the server: " + err.Error()) return } if err := initLogger(); err != nil { dialog.Alert("An error occured while starting the server: " + err.Error()) return } appServer := server.NewServer(appConfiguration) go func(s *http.Server) { err := s.ListenAndServe() defer systray.Quit() if err != nil && !errors.Is(err, http.ErrServerClosed) { log.Fatal(err) } }(appServer.Server) startWindowsApp(appServer.Server) } func startWindowsApp(appServer *http.Server) { onReady := func() { systray.SetIcon(icon) systray.SetTitle("Open Save Cloud Server") systray.SetTooltip("The server is up and ready") systray.AddMenuItem("Open Save Cloud "+constant.Version, "").Disable() systray.AddMenuItem("Running on "+appServer.Addr, "").Disable() systray.AddSeparator() mQuit := systray.AddMenuItem("Shutdown", "Quit the server") for { select { case <-mQuit.ClickedCh: func(s *http.Server) { mQuit.Disable() systray.SetTooltip("Shutting down the server...") s.Shutdown() }(appServer) } } } onExit := func() {} systray.Run(onReady, onExit) }