Compare commits

...

3 Commits
v0.1.0 ... main

2 changed files with 60 additions and 4 deletions

30
main.go
View File

@ -3,6 +3,7 @@ package main
import ( import (
"fmt" "fmt"
"os" "os"
"strings"
) )
type Command struct { type Command struct {
@ -103,6 +104,35 @@ var commands = []Command{
return "cleaned", nil return "cleaned", nil
}, },
}, },
{
Name: "list",
Description: "List all known game associations by name followed by data path in a newline-separated list",
Arguments: []string{},
IsVarargs: false,
Action: func(requiredArguments []string, arguments []string) (string, error) {
if len(arguments) != 0 {
return "", fmt.Errorf("expected zero arguments")
}
var gameDataPaths, loadError = LoadGames()
if loadError != nil {
return "", loadError
}
var stringBuilder = strings.Builder{}
for game, dataPath := range gameDataPaths {
if _, printError := fmt.Printf("%s %s\n", game, dataPath); printError != nil {
return "", printError
}
}
return stringBuilder.String(), nil
},
},
} }
func main() { func main() {

View File

@ -117,10 +117,6 @@ func CreateGame(gameName string, gameDataPath string) error {
} }
if iniFile, openError := os.Open(gamesIniPath); openError == nil { if iniFile, openError := os.Open(gamesIniPath); openError == nil {
if (openError != nil) && !(os.IsNotExist(openError)) {
return openError
}
defer func() { defer func() {
if closeError := iniFile.Close(); closeError != nil { if closeError := iniFile.Close(); closeError != nil {
panic(closeError) panic(closeError)
@ -321,6 +317,36 @@ func DeployGameMods(gameName string, modArchivePaths []string) error {
return nil return nil
} }
func LoadGames() (map[string]string, error) {
var gameDataPaths = make(map[string]string)
if iniFile, openError := os.Open(gamesIniPath); openError == nil {
defer func() {
if closeError := iniFile.Close(); closeError != nil {
panic(closeError)
}
}()
var parser = ini.NewParser(iniFile)
for entry := parser.Parse(); !(parser.IsEnd()); entry = parser.Parse() {
var section = parser.Section()
if entry.Key == "path" {
gameDataPaths[section] = entry.Value
}
}
if parseError := parser.Err(); parseError != nil {
return gameDataPaths, parseError
}
} else if !(os.IsNotExist(openError)) {
return gameDataPaths, openError
}
return gameDataPaths, nil
}
func RemoveGame(gameName string) error { func RemoveGame(gameName string) error {
if cleanError := CleanGameMods(gameName); cleanError != nil { if cleanError := CleanGameMods(gameName); cleanError != nil {
return cleanError return cleanError