Add conversion functions and move other defaults to cmd/scpt
This commit is contained in:
		
							
								
								
									
										83
									
								
								cmd/scpt/funcs.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										83
									
								
								cmd/scpt/funcs.go
									
									
									
									
									
										Normal file
									
								
							@@ -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 <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")
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
		Reference in New Issue
	
	Block a user