153 lines
3.7 KiB
Go
153 lines
3.7 KiB
Go
package main
|
|
|
|
import (
|
|
"fmt"
|
|
"io/ioutil"
|
|
"log"
|
|
"os"
|
|
"risk/api"
|
|
"risk/cli"
|
|
"risk/tools"
|
|
"risk/utils"
|
|
"strings"
|
|
|
|
"github.com/fatih/color"
|
|
)
|
|
|
|
var version string = "0.0.1"
|
|
|
|
// Init starts the CLI frontend for risk
|
|
func main() {
|
|
logFile, err := os.OpenFile(utils.SystemInfo.ProgDir+"/r2mod-go.log", os.O_RDWR|os.O_CREATE|os.O_APPEND, 0644)
|
|
utils.CheckErr(err)
|
|
|
|
defer logFile.Close()
|
|
log.SetOutput(logFile)
|
|
|
|
// Setup CLI switch
|
|
|
|
var operation string
|
|
if len(os.Args) >= 2 {
|
|
operation = os.Args[1]
|
|
} else {
|
|
operation = "help"
|
|
}
|
|
|
|
// Color
|
|
white := color.New(color.FgWhite).SprintFunc()
|
|
|
|
// CLI Operations
|
|
|
|
switch operation {
|
|
case "help":
|
|
fmt.Println("> Commands:")
|
|
fmt.Println(" > info -- get info about a mod")
|
|
fmt.Println(" > install, ins, i -- install mod(s)")
|
|
fmt.Println(" > remove, rm, r -- remove mod(s)")
|
|
fmt.Println(" > list, ls, li -- list mods")
|
|
fmt.Println(" > search, s, find -- search mods")
|
|
fmt.Println(" > update, upgrade, up -- update mods and API cache")
|
|
fmt.Println(" > toggle, tm, togglemods -- toggle mods")
|
|
fmt.Println(" > pull -- forcefully update API cache, not mods")
|
|
fmt.Println(" > filter -- remove version numbers using regex from stdin")
|
|
fmt.Println(" > version, ver, v -- print information about the program")
|
|
case "info":
|
|
api.InitAPI()
|
|
if len(os.Args) <= 2 {
|
|
fmt.Println("Usage: risk info <dependency string>")
|
|
} else {
|
|
status, selectedmod := api.GetModData(os.Args[2])
|
|
if status != 0 {
|
|
fmt.Println("> Could not find the mod specified.")
|
|
}
|
|
color.Cyan("Mod Info: %s", os.Args[2])
|
|
fmt.Println(" Name: " + selectedmod.Versions[0].FullName)
|
|
fmt.Println(" Desc: " + selectedmod.Versions[0].Description)
|
|
fmt.Println(" Version: " + selectedmod.Versions[0].VersionNumber)
|
|
fmt.Println(" Download URL: " + selectedmod.Versions[0].DownloadURL)
|
|
}
|
|
case "install", "ins", "i":
|
|
api.CheckAPICache()
|
|
api.InitAPI()
|
|
fmt.Println("> Downloading mods...")
|
|
|
|
for _, m := range os.Args[2:] {
|
|
cli.InstallMod(m)
|
|
}
|
|
|
|
color.Green("> Complete!")
|
|
case "remove", "rm", "r":
|
|
api.InitAPI()
|
|
fmt.Println("> Removing mods...")
|
|
for _, m := range os.Args[2:] {
|
|
cli.RemoveMod(m)
|
|
}
|
|
color.Green("> Complete!")
|
|
case "list", "ls", "li":
|
|
files, err := ioutil.ReadDir(utils.SystemInfo.PluginDir)
|
|
if err != nil {
|
|
log.Fatal(err)
|
|
}
|
|
|
|
for i, f := range files {
|
|
color.Blue("%3v %s", i, white(f.Name()))
|
|
}
|
|
case "update", "upgrade", "up":
|
|
color.Cyan("> Checking API Cache")
|
|
api.InitAPI()
|
|
if api.CheckAPICache() == 0 {
|
|
color.Green("> API Cache is up to date!")
|
|
} else {
|
|
color.Red("> API Cache out of date!")
|
|
api.UpdateAPICache()
|
|
}
|
|
|
|
files, err := ioutil.ReadDir(utils.SystemInfo.PluginDir)
|
|
if err != nil {
|
|
log.Fatal(err)
|
|
}
|
|
|
|
for _, f := range files {
|
|
cli.InstallMod(f.Name())
|
|
}
|
|
|
|
color.Green("> Complete!")
|
|
case "pull":
|
|
api.InitAPI()
|
|
color.Cyan("> Checking API Cache")
|
|
if api.CheckAPICache() == 0 {
|
|
color.Green("> API Cache is up to date!")
|
|
} else {
|
|
color.Red("> API Cache out of date!")
|
|
api.UpdateAPICache()
|
|
}
|
|
color.Green("> Complete!")
|
|
case "toggle", "tm", "togglemods":
|
|
if tools.ToggleMods() {
|
|
color.Cyan("> Mods Enabled")
|
|
} else {
|
|
color.Cyan("> Mods Disabled")
|
|
}
|
|
case "filter":
|
|
fmt.Println(tools.ExposeModString(os.Args[2]))
|
|
case "version", "ver", "v":
|
|
color.Magenta("> risk", version)
|
|
fmt.Println(" > github.com/endigma442")
|
|
case "search", "s", "find":
|
|
api.InitAPI()
|
|
|
|
query := strings.Join(os.Args[2:], "-")
|
|
|
|
blue := color.New(color.FgBlue).SprintFunc()
|
|
|
|
fmt.Printf("%s %s\n", "> Querying API for mods matching:", blue(query))
|
|
|
|
for _, mod := range api.SearchMods(query) {
|
|
fmt.Println(" -", mod.Target)
|
|
}
|
|
color.Green("> Complete!")
|
|
default:
|
|
fmt.Println("Unknown command, use 'risk help' for a list of commands.")
|
|
}
|
|
}
|