Compare commits

...

6 commits

Author SHA1 Message Date
b38ad33610
Merge branch 'develop'
Some checks failed
ci/woodpecker/push/woodpecker Pipeline failed
2026-02-14 23:28:54 +01:00
bfde701922
fix: handle input with several words
Some checks failed
ci/woodpecker/push/woodpecker Pipeline failed
2026-02-14 23:24:37 +01:00
e106e1989d
ci: update golang
Some checks failed
ci/woodpecker/push/woodpecker Pipeline failed
2025-09-13 09:28:30 +02:00
7278ab1a28
refactor: move the web server in a specific function
Some checks failed
ci/woodpecker/push/woodpecker Pipeline failed
2025-09-13 09:27:42 +02:00
f80fdc6e53
remove comments 2025-09-13 09:27:42 +02:00
8f8dfaf514
refactor: full rewrite 2025-09-13 09:27:41 +02:00
4 changed files with 111 additions and 93 deletions

View file

@ -1,11 +1,11 @@
steps:
vendor:
image: golang:1.22
image: golang:1.24
commands:
- go mod vendor
build:
image: golang:1.22
image: golang:1.24
commands:
- make

View file

@ -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),

View file

@ -52,7 +52,17 @@ func (s *Shell) Run(action string, args cli.Args) error {
s.Order,
)
input := strings.Trim(args.Get(0), " ")
var inputs []string
for i := 0; i < args.Len(); i++ {
arg := strings.Trim(args.Get(i), " \t\t\n")
if arg != "" {
inputs = append(inputs, arg)
}
}
input := strings.Join(inputs, " ")
switch input {
case "":

46
internal/web/server.go Normal file
View file

@ -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)))
}