mirror of
https://github.com/Baipyrus/ProxySwitcher.git
synced 2024-12-25 12:11:46 +00:00
implement separate powershell calls for each command
This commit is contained in:
parent
af8ca529a2
commit
4778d287fc
12
proxy/set.go
12
proxy/set.go
@ -3,18 +3,19 @@
|
||||
package proxy
|
||||
|
||||
import (
|
||||
"log"
|
||||
|
||||
"github.com/Baipyrus/ProxySwitcher/util"
|
||||
)
|
||||
|
||||
func Set(cfgPath string) {
|
||||
stdin, closeFunc, _ := util.ReadyCmd()
|
||||
|
||||
proxy, _ := ReadSystemProxy()
|
||||
// Set system proxy, if not already
|
||||
if !proxy.Enabled {
|
||||
SetSystemProxy(true)
|
||||
}
|
||||
|
||||
var failed bool
|
||||
configs, _ := util.ReadConfigs(cfgPath)
|
||||
for _, config := range configs {
|
||||
configCmd := config.Name
|
||||
@ -24,8 +25,11 @@ func Set(cfgPath string) {
|
||||
}
|
||||
|
||||
commands := generateCommands(configCmd, config.Set, proxy.Server)
|
||||
util.ExecCmds(commands, stdin)
|
||||
failed = util.ExecCmds(commands)
|
||||
}
|
||||
|
||||
closeFunc()
|
||||
// Additional feedback on error
|
||||
if failed {
|
||||
log.Printf("One or more commands failed to execute. Run command 'debug' to see more.\n")
|
||||
}
|
||||
}
|
||||
|
@ -3,18 +3,19 @@
|
||||
package proxy
|
||||
|
||||
import (
|
||||
"log"
|
||||
|
||||
"github.com/Baipyrus/ProxySwitcher/util"
|
||||
)
|
||||
|
||||
func Unset(cfgPath string) {
|
||||
stdin, closeFunc, _ := util.ReadyCmd()
|
||||
|
||||
proxy, _ := ReadSystemProxy()
|
||||
// Unset system proxy, if not already
|
||||
if proxy.Enabled {
|
||||
SetSystemProxy(false)
|
||||
}
|
||||
|
||||
var failed bool
|
||||
configs, _ := util.ReadConfigs(cfgPath)
|
||||
for _, config := range configs {
|
||||
configCmd := config.Name
|
||||
@ -24,8 +25,11 @@ func Unset(cfgPath string) {
|
||||
}
|
||||
|
||||
commands := generateCommands(configCmd, config.Unset, "")
|
||||
util.ExecCmds(commands, stdin)
|
||||
failed = util.ExecCmds(commands)
|
||||
}
|
||||
|
||||
closeFunc()
|
||||
// Additional feedback on error
|
||||
if failed {
|
||||
log.Printf("One or more commands failed to execute. Run command 'debug' to see more.\n")
|
||||
}
|
||||
}
|
||||
|
@ -3,45 +3,29 @@
|
||||
package util
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"fmt"
|
||||
"io"
|
||||
"log"
|
||||
"os/exec"
|
||||
"strings"
|
||||
)
|
||||
|
||||
// Create a single powershell process and leave closing, input and output open
|
||||
func ReadyCmd() (*io.WriteCloser, func() error, error) {
|
||||
cmd := exec.Command("powershell", "-NoLogo", "-NoProfile", "-Command", "-")
|
||||
|
||||
var stdout bytes.Buffer
|
||||
cmd.Stdout = &stdout
|
||||
cmd.Stderr = &stdout
|
||||
|
||||
stdin, err := cmd.StdinPipe()
|
||||
if err != nil {
|
||||
return nil, nil, err
|
||||
}
|
||||
|
||||
err = cmd.Start()
|
||||
if err != nil {
|
||||
return nil, nil, err
|
||||
}
|
||||
|
||||
return &stdin, func() error {
|
||||
// Close stdin pipe
|
||||
stdin.Close()
|
||||
|
||||
// Wait for command to flush
|
||||
err := cmd.Wait()
|
||||
return err
|
||||
}, nil
|
||||
}
|
||||
|
||||
func ExecCmds(commands []*Command, stdin *io.WriteCloser) {
|
||||
func ExecCmds(commands []*Command) bool {
|
||||
var failed bool
|
||||
for _, command := range commands {
|
||||
cmdArgs := strings.Join(command.Arguments, " ")
|
||||
cmdStr := fmt.Sprintf("%s %s", command.Name, cmdArgs)
|
||||
fmt.Fprintln(*stdin, cmdStr)
|
||||
var cmdStr string = command.Name
|
||||
|
||||
// Combine command into single string if args are given
|
||||
if len(command.Arguments) > 0 {
|
||||
cmdArgs := strings.Join(command.Arguments, " ")
|
||||
cmdStr = fmt.Sprintf("%s %s", command.Name, cmdArgs)
|
||||
}
|
||||
|
||||
// Try executing command in default shell
|
||||
cmd := exec.Command("powershell", "-NoLogo", "-NoProfile", "-Command", cmdStr)
|
||||
if err := cmd.Run(); err != nil {
|
||||
log.Printf("Command '%s' failed!\n", cmdStr)
|
||||
failed = true
|
||||
}
|
||||
}
|
||||
return failed
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user