161 lines
2.7 KiB
Go
161 lines
2.7 KiB
Go
|
package main
|
||
|
|
||
|
import (
|
||
|
"archive/zip"
|
||
|
"fmt"
|
||
|
"os"
|
||
|
"strings"
|
||
|
)
|
||
|
|
||
|
type Command struct {
|
||
|
Name string
|
||
|
Description string
|
||
|
Action func([]string) Result
|
||
|
Arguments []string
|
||
|
IsVarargs bool
|
||
|
}
|
||
|
|
||
|
func Failed(message string) Result {
|
||
|
return Result{
|
||
|
HasFailed: true,
|
||
|
Message: message,
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func Ok(message string) Result {
|
||
|
return Result{
|
||
|
HasFailed: false,
|
||
|
Message: message,
|
||
|
}
|
||
|
}
|
||
|
|
||
|
type Result struct {
|
||
|
Message string
|
||
|
HasFailed bool
|
||
|
}
|
||
|
|
||
|
var commands = []Command{
|
||
|
{
|
||
|
Name: "install",
|
||
|
Description: "Install one or more mod archives into modman",
|
||
|
Arguments: []string{"archive path"},
|
||
|
IsVarargs: true,
|
||
|
|
||
|
Action: func(arguments []string) Result {
|
||
|
var processed = 0
|
||
|
|
||
|
for i := range arguments {
|
||
|
var archivePath = arguments[i]
|
||
|
|
||
|
if strings.HasSuffix(archivePath, ".zip") {
|
||
|
var reader, err = zip.OpenReader(archivePath)
|
||
|
|
||
|
if err == nil {
|
||
|
defer reader.Close()
|
||
|
|
||
|
processed += 1
|
||
|
}
|
||
|
|
||
|
continue
|
||
|
}
|
||
|
}
|
||
|
|
||
|
return Ok(fmt.Sprint(processed, "of", len(arguments), "installed"))
|
||
|
},
|
||
|
},
|
||
|
|
||
|
{
|
||
|
Name: "remove",
|
||
|
Description: "Remove one or more mods from modman",
|
||
|
Arguments: []string{"mod name"},
|
||
|
IsVarargs: true,
|
||
|
|
||
|
Action: func(arguments []string) Result {
|
||
|
// TODO: Implement.
|
||
|
return Failed("Not implemented")
|
||
|
},
|
||
|
},
|
||
|
|
||
|
{
|
||
|
Name: "rename",
|
||
|
Description: "Rename a mod within modman",
|
||
|
Arguments: []string{"mod name", "new name"},
|
||
|
IsVarargs: false,
|
||
|
|
||
|
Action: func(arguments []string) Result {
|
||
|
// TODO: Implement.
|
||
|
return Failed("Not implemented")
|
||
|
},
|
||
|
},
|
||
|
|
||
|
{
|
||
|
Name: "list",
|
||
|
Description: "List all installed mods",
|
||
|
Arguments: []string{},
|
||
|
IsVarargs: false,
|
||
|
|
||
|
Action: func(arguments []string) Result {
|
||
|
// TODO: Implement.
|
||
|
return Failed("Not implemented")
|
||
|
},
|
||
|
},
|
||
|
|
||
|
{
|
||
|
Name: "deploy",
|
||
|
Description: "Deploy all installed and enabled mods",
|
||
|
Arguments: []string{},
|
||
|
IsVarargs: false,
|
||
|
|
||
|
Action: func(arguments []string) Result {
|
||
|
// TODO: Implement.
|
||
|
return Failed("Not implemented")
|
||
|
},
|
||
|
},
|
||
|
}
|
||
|
|
||
|
func main() {
|
||
|
var argCount = len(os.Args)
|
||
|
|
||
|
if argCount == 1 {
|
||
|
fmt.Println("Modman v0.1")
|
||
|
fmt.Println("Enter one of the following commands following modman:")
|
||
|
|
||
|
for i := range commands {
|
||
|
var command = commands[i]
|
||
|
|
||
|
fmt.Print("\t", command.Name)
|
||
|
|
||
|
for j := range command.Arguments {
|
||
|
fmt.Print(" [", command.Arguments[j], "]")
|
||
|
}
|
||
|
|
||
|
if command.IsVarargs {
|
||
|
fmt.Println("...")
|
||
|
} else {
|
||
|
fmt.Println()
|
||
|
}
|
||
|
}
|
||
|
|
||
|
return
|
||
|
}
|
||
|
|
||
|
var commandName = os.Args[1]
|
||
|
|
||
|
for i := range commands {
|
||
|
var command = commands[i]
|
||
|
|
||
|
if command.Name == commandName {
|
||
|
var result = command.Action(os.Args[2:])
|
||
|
|
||
|
if result.HasFailed {
|
||
|
fmt.Fprint(os.Stderr, result.Message)
|
||
|
os.Exit(1)
|
||
|
}
|
||
|
|
||
|
fmt.Print(result.Message)
|
||
|
|
||
|
return
|
||
|
}
|
||
|
}
|
||
|
}
|