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