From 7278ab1a2810aa520c9f79e0ef03b08b13ecb920 Mon Sep 17 00:00:00 2001 From: Simon Vieille Date: Sat, 13 Sep 2025 09:24:10 +0200 Subject: [PATCH] refactor: move the web server in a specific function --- cmd/cli/main.go | 142 +++++++++++++++-------------------------- internal/web/server.go | 46 +++++++++++++ 2 files changed, 98 insertions(+), 90 deletions(-) create mode 100644 internal/web/server.go diff --git a/cmd/cli/main.go b/cmd/cli/main.go index 2a76682..239d348 100644 --- a/cmd/cli/main.go +++ b/cmd/cli/main.go @@ -1,20 +1,15 @@ package main import ( - "fmt" "log" "os" - "strings" - "github.com/labstack/echo/v4" - "github.com/labstack/echo/v4/middleware" "github.com/urfave/cli/v2" "gitnet.fr/deblan/mu-go/internal/shell" "gitnet.fr/deblan/mu-go/internal/web" ) var ( - Commands = []*cli.Command{} version = "dev" defaultListen = "127.0.0.1" defaultPort = "4000" @@ -36,59 +31,63 @@ var ( ) func main() { + cliListen := &cli.StringFlag{ + Name: flagListen, + Aliases: []string{"l"}, + Value: defaultListen, + } + + cliPort := &cli.StringFlag{ + Name: flagPort, + Aliases: []string{"p"}, + Value: defaultPort, + } + + cliApiUrl := &cli.StringFlag{ + Name: flagApiUrl, + Aliases: []string{"u"}, + Value: defaultApiUrl, + } + + cliDirectory := &cli.StringFlag{ + Name: flagDirectory, + Aliases: []string{"d"}, + Value: defaultServerDirectory, + } + + cliDebug := &cli.StringFlag{ + Name: flagDebug, + } + + cliName := &cli.StringFlag{ + Name: flagName, + Aliases: []string{"n"}, + Value: defaultName, + } + + cliOrder := &cli.StringFlag{ + Name: flagOrder, + Aliases: []string{"o"}, + Value: defaultOrder, + } + app := &cli.App{ Commands: []*cli.Command{ { Name: "serve", Aliases: []string{"s"}, - Flags: []cli.Flag{ - &cli.StringFlag{ - Name: flagListen, - Aliases: []string{"l"}, - Value: defaultListen, - }, - &cli.StringFlag{ - Name: flagPort, - Aliases: []string{"p"}, - Value: defaultPort, - }, - &cli.StringFlag{ - Name: flagApiUrl, - Aliases: []string{"u"}, - Value: defaultApiUrl, - }, - &cli.StringFlag{ - Name: flagDirectory, - Aliases: []string{"d"}, - Value: defaultServerDirectory, - }, - &cli.StringFlag{ - Name: flagDebug, - }, - }, - Usage: "run http server to serve api and files", + Flags: []cli.Flag{cliListen, cliPort, cliApiUrl, cliDirectory, cliDebug}, + Usage: "run http server to serve api and files", Action: func(ctx *cli.Context) error { - listen := ctx.String("listen") - port := ctx.Int64("port") - directory := strings.TrimSuffix(ctx.String(flagDirectory), "/") - url := strings.TrimSuffix(ctx.String(flagApiUrl), "/") + s := web.NewWebServer( + ctx.String(flagListen), + ctx.Int64(flagPort), + ctx.String(flagDirectory), + ctx.String(flagApiUrl), + ctx.Bool(flagDebug), + ) - e := echo.New() - - if ctx.Bool(flagDebug) { - e.Use(middleware.Logger()) - e.Use(middleware.Recover()) - } - - e.GET("/api/list", func(ctx echo.Context) error { - return web.List(ctx, directory, url) - }) - - e.GET("/api/stream", func(ctx echo.Context) error { - return web.Stream(ctx, directory, url) - }) - - e.Logger.Fatal(e.Start(fmt.Sprintf("%s:%d", listen, port))) + s.Run() return nil }, @@ -97,23 +96,7 @@ func main() { Name: "play", Usage: "run player", Aliases: []string{"p"}, - Flags: []cli.Flag{ - &cli.StringFlag{ - Name: flagApiUrl, - Aliases: []string{"u"}, - Value: defaultApiUrl, - }, - &cli.StringFlag{ - Name: flagName, - Aliases: []string{"n"}, - Value: defaultName, - }, - &cli.StringFlag{ - Name: flagOrder, - Aliases: []string{"o"}, - Value: defaultOrder, - }, - }, + Flags: []cli.Flag{cliApiUrl, cliName, cliOrder}, Action: func(ctx *cli.Context) error { s := shell.NewShell( ctx.String(flagName), @@ -129,28 +112,7 @@ func main() { Name: "download", Usage: "run downloder", Aliases: []string{"d"}, - Flags: []cli.Flag{ - &cli.StringFlag{ - Name: flagApiUrl, - Aliases: []string{"u"}, - Value: defaultApiUrl, - }, - &cli.StringFlag{ - Name: flagDirectory, - Aliases: []string{"d"}, - Value: defaultDownloadDirectory, - }, - &cli.StringFlag{ - Name: flagName, - Aliases: []string{"n"}, - Value: defaultName, - }, - &cli.StringFlag{ - Name: flagOrder, - Aliases: []string{"o"}, - Value: defaultOrder, - }, - }, + Flags: []cli.Flag{cliApiUrl, cliDirectory, cliName, cliOrder}, Action: func(ctx *cli.Context) error { s := shell.NewShell( ctx.String(flagName), diff --git a/internal/web/server.go b/internal/web/server.go new file mode 100644 index 0000000..97f3592 --- /dev/null +++ b/internal/web/server.go @@ -0,0 +1,46 @@ +package web + +import ( + "fmt" + "strings" + + "github.com/labstack/echo/v4" + "github.com/labstack/echo/v4/middleware" +) + +type WebServer struct { + Listen string + Port int64 + Directory string + Url string + Debug bool +} + +func NewWebServer(listen string, port int64, directory, url string, debug bool) *WebServer { + return &WebServer{ + Listen: listen, + Port: port, + Directory: strings.TrimSuffix(directory, "/"), + Url: strings.TrimSuffix(url, "/"), + Debug: debug, + } +} + +func (w *WebServer) Run() { + e := echo.New() + + if w.Debug { + e.Use(middleware.Logger()) + e.Use(middleware.Recover()) + } + + e.GET("/api/list", func(ctx echo.Context) error { + return List(ctx, w.Directory, w.Url) + }) + + e.GET("/api/stream", func(ctx echo.Context) error { + return Stream(ctx, w.Directory, w.Url) + }) + + e.Logger.Fatal(e.Start(fmt.Sprintf("%s:%d", w.Listen, w.Port))) +}