97 lines
1.5 KiB
Go
97 lines
1.5 KiB
Go
//
|
||
// cli.go
|
||
// Copyright (C) 2022 tiglog <me@tiglog.com>
|
||
//
|
||
// Distributed under terms of the MIT license.
|
||
//
|
||
|
||
package console
|
||
|
||
import (
|
||
"fmt"
|
||
"os"
|
||
)
|
||
|
||
type sApp struct {
|
||
name string
|
||
version string
|
||
desc string
|
||
cmds map[string]ICommand
|
||
about ActionHandler
|
||
}
|
||
|
||
func New(name, desc string) *sApp {
|
||
app := &sApp{
|
||
name: name,
|
||
version: "v0.1.0",
|
||
desc: desc,
|
||
cmds: make(map[string]ICommand),
|
||
}
|
||
app.AddCmd(NewAboutCmd(app))
|
||
app.AddCmd(NewAirCmd(app))
|
||
app.AddCmd(NewListCmd(app))
|
||
app.AddCmd(NewHelpCmd(app))
|
||
return app
|
||
}
|
||
|
||
func (s *sApp) GetCmds() map[string]ICommand {
|
||
return s.cmds
|
||
}
|
||
|
||
func (s *sApp) GetName() string {
|
||
return s.name
|
||
}
|
||
|
||
func (s *sApp) GetDesc() string {
|
||
return s.desc
|
||
}
|
||
|
||
func (s *sApp) GetVersion() string {
|
||
return s.version
|
||
}
|
||
|
||
func (s *sApp) AddCmd(cmd ICommand) {
|
||
s.cmds[cmd.GetName()] = cmd
|
||
}
|
||
|
||
func (s *sApp) HasCmd(cmd string) bool {
|
||
_, ok := s.cmds[cmd]
|
||
return ok
|
||
}
|
||
|
||
func (s *sApp) SetExtraAbout(about ActionHandler) {
|
||
s.about = about
|
||
}
|
||
|
||
func (s *sApp) GetExtraAbout() ActionHandler {
|
||
return s.about
|
||
}
|
||
|
||
func (s *sApp) Run(args []string) {
|
||
cmd := "list"
|
||
if len(args) == 1 {
|
||
args = []string{cmd}
|
||
} else {
|
||
cmd = args[1]
|
||
args = args[2:]
|
||
}
|
||
if !s.HasCmd(cmd) {
|
||
fmt.Printf("%q is not valid command.\n", cmd)
|
||
os.Exit(2)
|
||
}
|
||
|
||
scmd := s.cmds[cmd]
|
||
scmd.Init(args)
|
||
act := scmd.GetAction()
|
||
if act == nil {
|
||
// fmt.Println("未定义 Action,无法执行 Action.")
|
||
fmt.Println(scmd.GetHelp())
|
||
os.Exit(1)
|
||
}
|
||
err := act()
|
||
if err != nil {
|
||
fmt.Printf("执行异常:%v\n", err)
|
||
os.Exit(1)
|
||
}
|
||
}
|