From 5c6488b6aac2164df90a281d5cfdbdbb809cff05 Mon Sep 17 00:00:00 2001 From: Alexander Neumann Date: Wed, 10 Apr 2019 12:47:03 +0200 Subject: ui: only allow a single tunnel to be active at any time Signed-off-by: Alexander Neumann --- ui/ui.go | 28 +++++++--------------------- 1 file changed, 7 insertions(+), 21 deletions(-) (limited to 'ui/ui.go') diff --git a/ui/ui.go b/ui/ui.go index 7b9a8ce0..7cc96ee2 100644 --- a/ui/ui.go +++ b/ui/ui.go @@ -33,6 +33,8 @@ func nag() { func RunUI() { runtime.LockOSThread() + tunnelTracker := new(TunnelTracker) + icon, err := walk.NewIconFromResourceId(1) if err != nil { panic(err) @@ -45,6 +47,8 @@ func RunUI() { } defer mtw.Dispose() + mtw.SetTunnelTracker(tunnelTracker) + tray, err := NewTray(mtw, icon) if err != nil { panic(err) @@ -52,14 +56,13 @@ func RunUI() { defer tray.Dispose() // Bind to updates - setTunnelState := func(tunnel *service.Tunnel, state service.TunnelState, showNotifications bool) { + service.IPCClientRegisterTunnelChange(func(tunnel *service.Tunnel, state service.TunnelState, err error) { mtw.Synchronize(func() { + tunnelTracker.SetTunnelState(tunnel, state, err) mtw.SetTunnelState(tunnel, state) - tray.SetTunnelStateWithNotification(tunnel, state, showNotifications) + tray.SetTunnelStateWithNotification(tunnel, state, err == nil) }) - } - service.IPCClientRegisterTunnelChange(func(tunnel *service.Tunnel, state service.TunnelState, err error) { if err == nil { return } @@ -73,25 +76,8 @@ func RunUI() { } else { tray.ShowError("WireGuard Tunnel Error", err.Error()) } - - setTunnelState(tunnel, state, err == nil) }) - // Fetch current state - go func() { - tunnels, err := service.IPCClientTunnels() - if err != nil { - return - } - for _, tunnel := range tunnels { - state, err := tunnel.State() - if err != nil { - continue - } - setTunnelState(&tunnel, state, false) - } - }() - time.AfterFunc(time.Minute*15, nag) mtw.Run() } -- cgit v1.2.3-59-g8ed1b