91 lines
		
	
	
		
			2.6 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			91 lines
		
	
	
		
			2.6 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
/*
 | 
						|
	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 scpt
 | 
						|
 | 
						|
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 <script>`
 | 
						|
		cmd := exec.Command("sh", "-c", script)
 | 
						|
		// Set command I/O
 | 
						|
		cmd.Stdout = os.Stdout
 | 
						|
		cmd.Stdin = os.Stdin
 | 
						|
		cmd.Stderr = os.Stderr
 | 
						|
		// Run command
 | 
						|
		_ = cmd.Run()
 | 
						|
		return "", nil
 | 
						|
	} else {
 | 
						|
		return nil, errors.New("script not provided")
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
func toString(args map[string]interface{}) (interface{}, error) {
 | 
						|
	val, ok := args[""]
 | 
						|
	if !ok {
 | 
						|
		return nil, errors.New("no value provided")
 | 
						|
	}
 | 
						|
	return fmt.Sprint(val), nil
 | 
						|
} |