diff --git a/cmd/scpt/funcs.go b/cmd/scpt/funcs.go new file mode 100644 index 0000000..db2b15a --- /dev/null +++ b/cmd/scpt/funcs.go @@ -0,0 +1,83 @@ +/* + Copyright (c) 2021 Arsen Musayelyan + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all + copies or substantial portions of the Software. +*/ + +package main + +import ( + "errors" + "fmt" + "github.com/gen2brain/dlgs" + "os" + "os/exec" +) + +// Default function to display a dialog +func displayDialog(args map[string]interface{}) (interface{}, error) { + // Get title + title, ok := args["title"] + if !ok { + return nil, errors.New("title not provided") + } + // Get unnamed argument as text + text, ok := args[""] + if !ok { + return nil, errors.New("text not provided") + } + // Display correct dialog based on given type + switch args["type"] { + case "yesno": + // Display yes or no dialog, returning bool based on user input + return dlgs.Question(fmt.Sprint(title), fmt.Sprint(text), true) + case "info": + // Display info dialog, returning bool based on success + return dlgs.Info(fmt.Sprint(title), fmt.Sprint(text)) + case "error": + // Display error dialog, returning bool based on success + return dlgs.Error(fmt.Sprint(title), fmt.Sprint(text)) + case "entry": + // Check if default text given + defaultText, ok := args["default"] + if !ok { + // Set to empty if not given + defaultText = "" + } + // Display entry dialog + input, _, err := dlgs.Entry(fmt.Sprint(title), fmt.Sprint(text), fmt.Sprint(defaultText)) + // Return user input + return input, err + default: + // If type unknown, return error + return nil, fmt.Errorf("unknown dialog type: %v", args["type"]) + } +} + +// Default function to run a shell script using `sh -c` +func doShellScript(args map[string]interface{}) (interface{}, error) { + // Get unnamed argument and assert its type as string + script, ok := args[""].(string) + // If assertion successful + if ok { + // Create new exec.Cmd containing `sh -c