aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/ui/ui.go
diff options
context:
space:
mode:
authorJason A. Donenfeld <Jason@zx2c4.com>2019-03-02 05:54:25 +0100
committerJason A. Donenfeld <Jason@zx2c4.com>2019-03-02 07:07:05 +0100
commitf1b9349dadce2920187ea7def7397b514d801b38 (patch)
tree3e15404826ea98d13b938417cc7fcd145b9d7f42 /ui/ui.go
parentsyntax: flat border (diff)
downloadwireguard-windows-f1b9349dadce2920187ea7def7397b514d801b38.tar.xz
wireguard-windows-f1b9349dadce2920187ea7def7397b514d801b38.zip
ipc: work out service state transitions
Diffstat (limited to '')
-rw-r--r--ui/ui.go63
1 files changed, 50 insertions, 13 deletions
diff --git a/ui/ui.go b/ui/ui.go
index 30bbb905..f5815ec6 100644
--- a/ui/ui.go
+++ b/ui/ui.go
@@ -84,15 +84,28 @@ func RunUI() {
pb, _ := walk.NewPushButton(mw)
pb.SetText("Start")
var runningTunnel *service.Tunnel
- var lastTunnel *service.Tunnel
pb.Clicked().Attach(func() {
+ restoreState := true
+ pbE := pb.Enabled()
+ seE := se.Enabled()
+ pbT := pb.Text()
+ defer func() {
+ if restoreState {
+ pb.SetEnabled(pbE)
+ se.SetEnabled(seE)
+ pb.SetText(pbT)
+ }
+ }()
+ pb.SetEnabled(false)
+ se.SetEnabled(false)
+ pb.SetText("Requesting..")
if runningTunnel != nil {
- pb.SetEnabled(false)
- _, err := runningTunnel.Stop()
+ err := runningTunnel.Stop()
if err != nil {
walk.MsgBox(mw, "Unable to stop tunnel", err.Error(), walk.MsgBoxIconError)
return
}
+ restoreState = false
runningTunnel = nil
return
}
@@ -106,15 +119,12 @@ func RunUI() {
walk.MsgBox(mw, "Unable to create tunnel", err.Error(), walk.MsgBoxIconError)
return
}
-
- se.SetEnabled(false)
- pb.SetEnabled(false)
- lastTunnel = &tunnel
- _, err = tunnel.Start()
+ err = tunnel.Start()
if err != nil {
walk.MsgBox(mw, "Unable to start tunnel", err.Error(), walk.MsgBoxIconError)
return
}
+ restoreState = false
runningTunnel = &tunnel
})
@@ -136,10 +146,11 @@ func RunUI() {
}
})
- service.IPCClientRegisterTunnelChange(func(tunnel string, state service.TunnelState) {
- if lastTunnel == nil || tunnel != lastTunnel.Name {
+ setServiceState := func(tunnel *service.Tunnel, state service.TunnelState, showNotifications bool) {
+ if tunnel.Name != "test" {
return
}
+ //TODO: also set tray icon to reflect state
switch state {
case service.TunnelStarting:
se.SetEnabled(false)
@@ -151,21 +162,47 @@ func RunUI() {
pb.SetText("Stop")
pb.SetEnabled(true)
tray.SetToolTip("WireGuard: Activated")
+ if showNotifications {
+ //TODO: ShowCustom with right icon
+ tray.ShowInfo("WireGuard Activated", fmt.Sprintf("The %s tunnel has been activated.", tunnel.Name))
+ }
case service.TunnelStopping:
se.SetEnabled(false)
pb.SetText("Stopping...")
pb.SetEnabled(false)
tray.SetToolTip("WireGuard: Deactivating...")
case service.TunnelStopped, service.TunnelDeleting:
+ if runningTunnel != nil {
+ runningTunnel.Delete()
+ runningTunnel = nil
+ }
se.SetEnabled(true)
- lastTunnel.Delete()
- runningTunnel = nil
- lastTunnel = nil
pb.SetText("Start")
pb.SetEnabled(true)
tray.SetToolTip("WireGuard: Deactivated")
+ if showNotifications {
+ //TODO: ShowCustom with right icon
+ tray.ShowInfo("WireGuard Deactivated", fmt.Sprintf("The %s tunnel has been deactivated.", tunnel.Name))
+ }
}
+ }
+ service.IPCClientRegisterTunnelChange(func(tunnel *service.Tunnel, state service.TunnelState) {
+ setServiceState(tunnel, state, true)
})
+ go func() {
+ tunnels, err := service.IPCClientTunnels()
+ if err != nil {
+ return
+ }
+ for _, tunnel := range tunnels {
+ state, err := tunnel.State()
+ if err != nil {
+ continue
+ }
+ runningTunnel = &tunnel
+ setServiceState(&tunnel, state, false)
+ }
+ }()
mw.Run()
}