Add command for registering data paths of installed games
This commit is contained in:
parent
85a941de81
commit
11b66395b5
35
main.go
35
main.go
|
@ -27,9 +27,7 @@ var commands = []Command{
|
||||||
IsVarargs: true,
|
IsVarargs: true,
|
||||||
|
|
||||||
Action: func(requiredArguments []string, providedArguments []string) (string, error) {
|
Action: func(requiredArguments []string, providedArguments []string) (string, error) {
|
||||||
var argumentCount = len(providedArguments)
|
if len(providedArguments) < len(requiredArguments) {
|
||||||
|
|
||||||
if argumentCount < len(requiredArguments) {
|
|
||||||
return "", fmt.Errorf("expected %s folowed by at least one %ss",
|
return "", fmt.Errorf("expected %s folowed by at least one %ss",
|
||||||
requiredArguments[0], requiredArguments[1])
|
requiredArguments[0], requiredArguments[1])
|
||||||
}
|
}
|
||||||
|
@ -56,6 +54,29 @@ var commands = []Command{
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
|
||||||
|
{
|
||||||
|
Name: "register",
|
||||||
|
Description: "Registers the data directory path of game for management under the given name",
|
||||||
|
Arguments: []string{"data path", "game name"},
|
||||||
|
IsVarargs: false,
|
||||||
|
|
||||||
|
Action: func(requiredArguments []string, providedArguments []string) (string, error) {
|
||||||
|
if len(providedArguments) < len(requiredArguments) {
|
||||||
|
return "", fmt.Errorf("expected %s folowed by at least one %ss",
|
||||||
|
requiredArguments[0], requiredArguments[1])
|
||||||
|
}
|
||||||
|
|
||||||
|
var dataPath = providedArguments[0]
|
||||||
|
var gameName = providedArguments[1]
|
||||||
|
|
||||||
|
if registerGameError := RegisterGame(gameName, dataPath); registerGameError != nil {
|
||||||
|
return "", registerGameError
|
||||||
|
}
|
||||||
|
|
||||||
|
return fmt.Sprintf("Registered %s at %s", gameName, dataPath), nil
|
||||||
|
},
|
||||||
|
},
|
||||||
|
|
||||||
{
|
{
|
||||||
Name: "remove",
|
Name: "remove",
|
||||||
Description: "Remove one or more mods from modman",
|
Description: "Remove one or more mods from modman",
|
||||||
|
@ -169,13 +190,13 @@ var commands = []Command{
|
||||||
Arguments: []string{"game name", "mod name"},
|
Arguments: []string{"game name", "mod name"},
|
||||||
IsVarargs: true,
|
IsVarargs: true,
|
||||||
|
|
||||||
Action: func(requiredArguments []string, arguments []string) (string, error) {
|
Action: func(requiredArguments []string, providedArguments []string) (string, error) {
|
||||||
if len(arguments) != len(requiredArguments) {
|
if len(providedArguments) != len(requiredArguments) {
|
||||||
return "", fmt.Errorf("expected %s followed by one or more %ss",
|
return "", fmt.Errorf("expected %s followed by one or more %ss",
|
||||||
requiredArguments[0], requiredArguments[1])
|
requiredArguments[0], requiredArguments[1])
|
||||||
}
|
}
|
||||||
|
|
||||||
var game, gameOpenError = OpenGame(arguments[0])
|
var game, gameOpenError = OpenGame(providedArguments[0])
|
||||||
|
|
||||||
if gameOpenError != nil {
|
if gameOpenError != nil {
|
||||||
return "", gameOpenError
|
return "", gameOpenError
|
||||||
|
@ -191,7 +212,7 @@ var commands = []Command{
|
||||||
return "", cleanError
|
return "", cleanError
|
||||||
}
|
}
|
||||||
|
|
||||||
for _, modName := range arguments[1:] {
|
for _, modName := range providedArguments[1:] {
|
||||||
if deployError := game.DeployMod(modName); deployError != nil {
|
if deployError := game.DeployMod(modName); deployError != nil {
|
||||||
return "", deployError
|
return "", deployError
|
||||||
}
|
}
|
||||||
|
|
54
manager.go
54
manager.go
|
@ -461,6 +461,60 @@ func (game *Game) RemoveMods(names []string) error {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func RegisterGame(name string, dataPath string) error {
|
||||||
|
var configPath, configPathError = os.UserConfigDir()
|
||||||
|
|
||||||
|
if configPathError != nil {
|
||||||
|
return configPathError
|
||||||
|
}
|
||||||
|
|
||||||
|
var gamesPath = filepath.Join(configPath, "modman", "games.ini")
|
||||||
|
|
||||||
|
var gamesEntries = []ini.Entry{{
|
||||||
|
Section: name,
|
||||||
|
Key: "path",
|
||||||
|
Value: dataPath,
|
||||||
|
}}
|
||||||
|
|
||||||
|
if gamesFile, gamesFileError := os.Open(gamesPath); gamesFileError == nil {
|
||||||
|
var gamesParser = ini.NewParser(gamesFile)
|
||||||
|
|
||||||
|
for entry := gamesParser.Parse(); !(gamesParser.IsEnd()); entry = gamesParser.Parse() {
|
||||||
|
gamesEntries = append(gamesEntries, entry)
|
||||||
|
}
|
||||||
|
|
||||||
|
if err := gamesFile.Close(); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
if err := gamesParser.Err(); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
} else if !(os.IsNotExist(gamesFileError)) {
|
||||||
|
return gamesFileError
|
||||||
|
}
|
||||||
|
|
||||||
|
if gamesFile, gamesFileError := os.Create(gamesPath); gamesFileError == nil {
|
||||||
|
var writeError = ini.Write(gamesFile, gamesEntries)
|
||||||
|
|
||||||
|
if err := gamesFile.Sync(); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
if err := gamesFile.Close(); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
if writeError != nil {
|
||||||
|
return writeError
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
return gamesFileError
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
func (game *Game) RenameMod(modName string, newName string) error {
|
func (game *Game) RenameMod(modName string, newName string) error {
|
||||||
if _, exists := game.Mods[modName]; !(exists) {
|
if _, exists := game.Mods[modName]; !(exists) {
|
||||||
return fmt.Errorf("no mod with that name exists")
|
return fmt.Errorf("no mod with that name exists")
|
||||||
|
|
Loading…
Reference in New Issue