-
-
Notifications
You must be signed in to change notification settings - Fork 150
/
Copy pathsystray.go
76 lines (63 loc) · 1.74 KB
/
systray.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
package systray
import (
"fmt"
"os/exec"
"strings"
"github.com/kardianos/osext"
)
// Systray manages the systray icon with its menu and actions. It also handles the pause/resume behaviour of the agent
type Systray struct {
// Whether the Agent is in Pause mode
Hibernate bool
// The version of the Agent, displayed in the trayicon menu
Version string
// The url of the debug page. It's a function because it could change port
DebugURL func() string
// The active configuration file
AdditionalConfig string
// The path of the exe (only used in update)
path string
}
// Restart restarts the program
// it works by finding the executable path and launching it before quitting
func (s *Systray) Restart() {
if s.path == "" {
var err error
s.path, err = osext.Executable()
if err != nil {
fmt.Printf("Error getting exe path using osext lib. err: %v\n", err)
}
// Trim newlines (needed on osx)
s.path = strings.Trim(s.path, "\n")
}
// Build args
args := []string{"-ls", fmt.Sprintf("--hibernate=%v", s.Hibernate)}
if s.AdditionalConfig != "" {
args = append(args, fmt.Sprintf("--additional-config=%s", s.AdditionalConfig))
}
fmt.Println(s.path, args)
// Launch executable
cmd := exec.Command(s.path, args...)
err := cmd.Start()
if err != nil {
fmt.Printf("Error restarting process: %v\n", err)
return
}
// If everything was fine, quit
s.Quit()
}
// Pause restarts the program with the hibernate flag set to true
func (s *Systray) Pause() {
s.Hibernate = true
s.Restart()
}
// Pause restarts the program with the hibernate flag set to false
func (s *Systray) Resume() {
s.Hibernate = false
s.Restart()
}
// Update restarts the program with the given path
func (s *Systray) Update(path string) {
s.path = path
s.Restart()
}