171 lines
3.7 KiB
Go
171 lines
3.7 KiB
Go
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"
|
|
defaultApiUrl = "http://127.0.0.1:4000"
|
|
defaultServerDirectory = "."
|
|
defaultDownloadDirectory = "."
|
|
defaultName = ""
|
|
defaultOrder = "date"
|
|
)
|
|
|
|
var (
|
|
flagListen = "listen"
|
|
flagPort = "port"
|
|
flagApiUrl = "api-url"
|
|
flagDirectory = "directory"
|
|
flagDebug = "debug"
|
|
flagName = "name"
|
|
flagOrder = "order"
|
|
)
|
|
|
|
func main() {
|
|
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",
|
|
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), "/")
|
|
|
|
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)))
|
|
|
|
return nil
|
|
},
|
|
},
|
|
{
|
|
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,
|
|
},
|
|
},
|
|
Action: func(ctx *cli.Context) error {
|
|
s := shell.NewShell(
|
|
ctx.String(flagName),
|
|
ctx.String(flagOrder),
|
|
ctx.String(flagDirectory),
|
|
ctx.String(flagApiUrl),
|
|
)
|
|
|
|
return s.Run("play", ctx.Args())
|
|
},
|
|
},
|
|
{
|
|
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,
|
|
},
|
|
},
|
|
Action: func(ctx *cli.Context) error {
|
|
s := shell.NewShell(
|
|
ctx.String(flagName),
|
|
ctx.String(flagOrder),
|
|
ctx.String(flagDirectory),
|
|
ctx.String(flagApiUrl),
|
|
)
|
|
|
|
return s.Run("download", ctx.Args())
|
|
},
|
|
},
|
|
},
|
|
}
|
|
|
|
if err := app.Run(os.Args); err != nil {
|
|
log.Fatal(err)
|
|
}
|
|
}
|