Initial command system

This commit is contained in:
comp500 2019-03-17 15:04:00 +00:00
parent 63df728f42
commit a531e36713
No known key found for this signature in database
GPG Key ID: 214C822FFEC586B5
9 changed files with 170 additions and 0 deletions

6
core/commands.go Normal file
View File

@ -0,0 +1,6 @@
package core
import "github.com/urfave/cli"
// Commands stores all the commands that packwiz can run. Append to this slice to add your own commands.
var Commands []cli.Command

33
core/flags.go Normal file
View File

@ -0,0 +1,33 @@
package core
import (
"github.com/urfave/cli"
)
// Flags stores common information passed as flags to the program.
type Flags struct {
PackFile string
ModsFolder string
}
// FlagsFromContext converts a CLI context (from commands) into a Flags struct, for use in helper functions.
func FlagsFromContext(c *cli.Context) Flags {
return Flags{
c.GlobalString("pack-file"),
c.GlobalString("mods-folder"),
}
}
// CLIFlags is used internally to initialise the internal flags (easier to keep in one place)
var CLIFlags = [...]cli.Flag{
cli.StringFlag{
Name: "pack-file",
Value: "pack.toml",
Usage: "The modpack metadata file to use",
},
cli.StringFlag{
Name: "mods-folder",
Value: "mods",
Usage: "The mods folder to use",
},
}

1
core/index.go Normal file
View File

@ -0,0 +1 @@
package core

29
core/mod.go Normal file
View File

@ -0,0 +1,29 @@
package core
import "github.com/BurntSushi/toml"
// Mod stores metadata about a mod. This is written to a TOML file for each mod.
type Mod struct {
metaFilename string
Name string `toml:"name"`
FileName string `toml:"filename"`
Side string `toml:"side"`
Optional bool `toml:"optional"`
Download struct {
URL string `toml:"url"`
HashFormat string `toml:"hash-format"`
Hash string `toml:"hash"`
} `toml:"download"`
Update map[string]toml.Primitive
}
// The three possible values of Side (the side that the mod is on) are "server", "client", and "both".
const (
ServerSide = "server"
ClientSide = "client"
UniversalSide = "both"
)
func (m Mod) Write() {
}

15
core/resolve.go Normal file
View File

@ -0,0 +1,15 @@
package core
import (
"path/filepath"
"strings"
)
// ModExtension is the file extension of the mod metadata files
const ModExtension = ".toml"
// ResolveMod returns the path to a mod file from it's name
func ResolveMod(modName string, flags Flags) string {
fileName := strings.ToLower(strings.TrimSuffix(modName, ModExtension)) + ModExtension
return filepath.Join(flags.ModsFolder, fileName)
}

19
curseforge/curseforge.go Normal file
View File

@ -0,0 +1,19 @@
package curseforge
import (
"fmt"
"github.com/comp500/packwiz/core"
"github.com/urfave/cli"
)
func init() {
core.Commands = append(core.Commands, cli.Command{
Name: "curseforge",
Usage: "Manage curseforge-based mods",
Action: func(c *cli.Context) error {
fmt.Println("Not implemented yet!")
return nil
},
})
}

6
go.mod Normal file
View File

@ -0,0 +1,6 @@
module github.com/comp500/packwiz
require (
github.com/BurntSushi/toml v0.3.1
github.com/urfave/cli v1.20.0
)

4
go.sum Normal file
View File

@ -0,0 +1,4 @@
github.com/BurntSushi/toml v0.3.1 h1:WXkYYl6Yr3qBf1K79EBnL4mak0OimBfB0XUf9Vl28OQ=
github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
github.com/urfave/cli v1.20.0 h1:fDqGv3UG/4jbVl/QkFwEdddtEDjh/5Ov6X+0B/3bPaw=
github.com/urfave/cli v1.20.0/go.mod h1:70zkFmudgCuE/ngEzBv17Jvp/497gISqfk5gWijbERA=

57
main.go Normal file
View File

@ -0,0 +1,57 @@
package main
import (
"fmt"
"log"
"os"
"github.com/comp500/packwiz/core"
"github.com/urfave/cli"
// Modules of packwiz
_ "github.com/comp500/packwiz/curseforge"
)
func init() {
core.Commands = append(core.Commands, cli.Command{
Name: "delete",
Aliases: []string{"remove"},
Usage: "Delete a mod from the modpack",
Action: func(c *cli.Context) error {
cmdDelete(core.FlagsFromContext(c))
return nil
},
}, cli.Command{
Name: "delet",
Aliases: []string{"remov"},
Usage: "Delete a mod from the modpack",
Action: func(c *cli.Context) error {
cmdDelete(core.FlagsFromContext(c))
return nil
},
})
}
func main() {
app := cli.NewApp()
app.Commands = core.Commands
app.Flags = core.CLIFlags[:]
app.HideVersion = true
app.Usage = "A command line tool for creating Minecraft modpacks."
err := app.Run(os.Args)
if err != nil {
log.Fatal(err)
}
}
func cmdDelete(flags core.Flags) {
mod := "demagnetize"
err := os.Remove(core.ResolveMod(mod, flags))
if err != nil {
fmt.Printf("Error removing mod: %s", err)
} else {
fmt.Printf("Mod %s removed successfully!", mod)
}
// TODO: update index
}