risk/main.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.")
}
}