Add functionality for listing game associations
This commit is contained in:
parent
4d0b24c46a
commit
d44276a56e
31
main.go
31
main.go
|
@ -3,6 +3,7 @@ package main
|
||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
"os"
|
"os"
|
||||||
|
"strings"
|
||||||
)
|
)
|
||||||
|
|
||||||
type Command struct {
|
type Command struct {
|
||||||
|
@ -103,6 +104,36 @@ 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 {
|
||||||
|
stringBuilder.WriteString(game)
|
||||||
|
stringBuilder.WriteString(" \"")
|
||||||
|
stringBuilder.WriteString(dataPath)
|
||||||
|
stringBuilder.WriteByte('"')
|
||||||
|
}
|
||||||
|
|
||||||
|
return stringBuilder.String(), nil
|
||||||
|
},
|
||||||
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
func main() {
|
func main() {
|
||||||
|
|
30
manager.go
30
manager.go
|
@ -317,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
|
||||||
|
|
Loading…
Reference in New Issue