package main import ( "errors" "flag" "fmt" "os" "git.riedstra.us/mitch/steam-export/config" "git.riedstra.us/mitch/steam-export/steam" ) var ( errorHandling flag.ErrorHandling = flag.ExitOnError defaultLib string = `C:\Program Files (x86)\Steam\steamapps` steamLib *steam.Library = &steam.Library{} ) func parseArgs(args []string) error { if len(args) < 2 { return errors.New("Not enough arguments") } aa := args[2:] switch a := args[1]; a { case "list": return listGames(aa) case "package": return packageGame(aa) case "extract": return extractGame(aa) case "delete": return deleteGame(aa) default: printHelp() } return nil } func printHelp() { fmt.Printf(`--- Program usage: steam-export-cli $subcommand $options Subcommands: list -l $steam_library package -l $steam_library -f $output_file -g $game_index extract -l $steam_library -f $input_file delete -l $steam_library -g $game_index server -c $config_file -l $steam_library -L $listen_addr `) } func listGames(args []string) error { fl := flag.NewFlagSet("list", errorHandling) lib := fl.String("l", defaultLib, "Path to library in question. All the way to the 'steamapps' folder") l := defaultLib fl.Parse(args) if fl.Parsed() { l = string(*lib) } if err := steamLib.ProcessLibrary(l); err != nil { return err } fmt.Println(steamLib) return nil } func packageGame(args []string) error { fl := flag.NewFlagSet("package", errorHandling) lib := fl.String("l", defaultLib, "Path to library in question. All the way to the 'steamapps' folder") fileName := fl.String("f", "export", "Name of the archive file to be created. Please do not include the file extension") game := fl.Int("g", -1, "Index of the game to be exported. Please see `list` for the index") var g int l := defaultLib fl.Parse(args) if fl.Parsed() { l = string(*lib) g = int(*game) } if err := steamLib.ProcessLibrary(l); err != nil { return err } if len(steamLib.Games) < g || g == -1 { return errors.New("Cannot find game for index provided or no index provided") } if *fileName == "export" { fileName = &steamLib.Games[g] } return steamLib.PackageGameToFile(g, *fileName+".tar") } func extractGame(args []string) error { fl := flag.NewFlagSet("extract", errorHandling) lib := fl.String("l", defaultLib, "Path to library in question. All the way to the 'steamapps' folder") fileName := fl.String("f", "", "Name of the archive file to be extracted. Please include the file extension") l := defaultLib fl.Parse(args) if fl.Parsed() { l = string(*lib) } if err := steamLib.ProcessLibrary(l); err != nil { return err } if *fileName == "" { return errors.New("No filename provided") } return steamLib.ExtractGameFromFile(*fileName) } func deleteGame(args []string) error { fl := flag.NewFlagSet("delete", errorHandling) lib := fl.String("l", defaultLib, "Path to library in question. All the way to the 'steamapps' folder") game := fl.Int("g", -1, "Index of the game to be deleted. Please see `list` for the index") var g int l := defaultLib fl.Parse(args) if fl.Parsed() { l = string(*lib) g = int(*game) } if err := steamLib.ProcessLibrary(l); err != nil { return err } if len(steamLib.Games) < g || g == -1 { return errors.New("Cannot find game for index provided or no index provided") } return steamLib.DeleteGame(g) } func main() { config, err := config.LoadConfig() if err != nil { fmt.Println(err) } else { if config.DefaultRepository != "" { defaultLib = config.DefaultRepository } } if err := parseArgs(os.Args); err != nil { fmt.Fprintln(os.Stderr, err) printHelp() } }